Стеганографія і з чим її їдять - Частина перша, вступна

У процесі читання пікабу я натрапив на пост, де обговорювалася стеганографія та її застосування в обході глобальних блокувань мережі, почав на нього відповідати і раптово виявилося, що в аудиторії немає ясного розуміння, що таке стеганографія і з чим її їдять. У колонках у мене зараз грає "Look" від Venetian Snares, так що трохи котиків для привернення уваги:

Не дуже схоже на пісню, мабуть, та й на котиків загалом теж. Відповідь криється в спектрограмі – час-частотному графіку амплітуди звуку.

Після привернення уваги – за традицією почну з визначень – тому що іноді серед читачів ІБ виникає плутанина між шифруванням та стеганографією. Відразу уточню, що це моє ІМХО і воно іноді розходиться з чужою думкою.

Кодування- це процес її перетворення з форми, зручної для безпосереднього використання, у форму, зручну для передачі, зберігання, автоматичної переробки та збереження від несанкціонованого доступу.

У даному пості я кодую свою промову в букви, а комп'ютер тут - букви - в UTF-8, а мережева карта - в манчестерське кодування, ось так все складно. Строго кажучи, шифрування і стеганографія це теж кодування, просто досить специфічне. Відмінність між ними 1) - в результаті кодування структурованих вихідних даних після кодування залишається видима структура. 2) - Якщо ми знаємо алгоритм кодування, то будь-яка людина здатна отримати дані до кодування, тобто в загальному випадку не забезпечується конфіденційність інформації. 3) Ми бачимо передачу і розуміємо, що це якийсь код.

Відмінності від кодування - сучасне шифрування на виході майже повністю прибирає структуру вихідних даних, наприклад, в результаті шифрування рядок 11111111111 перетвориться на F1E5367DB22 і так далі, тобтона виході ми отримуємо набір даних, дуже схожих на випадкову послідовність. Для того щоб отримати вихідні дані, нам потрібен ключ, на підставі якого ви можете зробити зворотне перетворення і отримати вихідні. Без правильного ключа ми отримаємо нехай і інший, але теж псевдовипадковий рядок. Неочевидний висновок - якщо згенерувати масив випадкових даних, а потім проганяти їх через дешифрування AES-256 різними ключами рано чи пізно ми отримаємо всі секретні документи США, головне підібрати потрібний ключ)

Стеганографія- (від грец. στεγανός - прихований + γράφω - пишу; буквально «таємнопис») - спосіб передачі або зберігання інформації з урахуванням збереження в таємниці самого факту такої передачі (зберігання).

Головний рядок тут - з урахуванням збереження в таємниці самого факту такої передачі (зберігання)

Тобто ми можемо не шифрувати дані, але при цьому не потрібні нам люди не здогадаються, що дані навіть є в передачі, яка щойно відбулася на їхніх очах.

стеганографія

Зрозуміло, що ці три речі так часто переходять одна в одну, що розмежувати їх іноді не можна. І якщо до шифрування ми вже трохи звикли те саме уявлення, що можна передавати інформацію так, що ніхто не виявить передачі іноді ставить у глухий кут.

А спосіб єдиний і очевидний - просто сховати інформацію в потоці інших даних, так чинили в ті часи коли про комп'ютери і думок не було, скажімо таємне чорнило. Як із контрабандою - мало хто зараз провозить цілком нелегально, набагато простіше взяти багато легітимного, правильного вантажу і потім додати невеликі, але не дозволені речі.

Перше загальне правило для стеганографії - обсяг прихованих даних, що передаються, зазвичай набагато менше маскуючих даних, тому що чим більше більше додатковихданих присутній у структурі аномальної (підозрілої) виглядає передача. Скажімо якщо приписати в кінець файлу архіву об'ємом в 100 кб образ диска об'ємом у пару гігабайт, то передача відразу перестає бути, принаймні на мою думку, чимось схожим на стеганографію.

Друге - передача має бути прихована якнайглибше у вихідні дані. Як деякі люди пропонували записувати інформацію в сервісні поля - технічно це можливо, і дехто вважає це навіть робочою стеганографією. Моя думка - це поганий підхід, тому що по-перше про існування сервісних полів всі знають, по-друге - сервісні поля, які можна змінити без шкоди для роботи вихідних даних, відомі всім хто цим цікавиться, і значить не забезпечує таємність факту передачі, по- третіх - автоматичні DLP системи проганяють крізь себе весь файл, і якщо заборонена інформація буде записана в сервісне поле, то DLP її знайде відразу. Тобто це як ховатися під час хованок в єдиному в будинку комірчині - так, кілька разів вийде, але швидше за все це місце обшукуватимуть насамперед.

Третє випливає з другого. Для "справжньої" стеганографії потрібно писати власний алгоритм роботи і поширювати якнайменшу кількість людей, тому що "відома програма стеганографії" це оксюморон. Імхо.

Четверте – передача прихованої інформації не повинна бути аномалією – тобто не повинна привертати до себе уваги – з цілком зрозумілих причин. Тобто уявимо, що ви придумали хороший алгоритм, який ховає текст у картинку і вирішили - все, потай пересилатимемо і нас ніхто не спіймає. А через лінощі пересилаєте одну картинку. І ось дивляться логи компетентні товариші і бачать, що деякі люди тільки й роблять, що пересилають один одному візуально- одну й ту саму картинку, а ось хеші у картинок всі відрізняються. Пильну увагу людям буде забезпечено.

А тепер підсумовуючи – стеганографія – річ хороша, але для масового обходу глобальної цензури не годиться в принципі. Як тільки починається масове використання стеганографії, тут же втрачається її таємність, і власне їй будуть створюватися алгоритми протидії. Це вкотре. Друге - стеганографія пов'язана із приховуванням у потоці даних чогось, тобто зросте загальний потік даних. Що здатне викликати навантаження мережі. Це два. Ну і нарешті - це дуже незручно)

На такій урочистій ноті мабуть я закінчу, в наступному пості я пробіжуся по конкретних реалізаціях стеганографії, так, які й не стеганографія.