Урок №07 V век до н. э. — наши дни 20 мин
Стеганография
Шифр прячет смысл письма, но все видят, что письмо есть. Стеганография прячет само письмо: в волосах гонца, под воском, в младших битах фотографии и в звуке, который можно увидеть.
В этом уроке
- чем стеганография отличается от шифрования
- как работают нулевые шифры и решётка Кардано
- что такое младший бит и битовая плоскость
- как нарисовать картинку звуком и увидеть её на спектрограмме
Около 499 года до нашей эры греческий тиран Гистией жил при дворе персидского царя — почётным гостем и, по сути, пленником. Ему нужно было передать в Милет приказ поднимать восстание. Любое письмо на дороге обыскали бы. Тогда Гистией обрил голову самому верному рабу, наколол послание у него на коже и стал ждать, пока отрастут волосы. Потом отправил раба в Милет с единственным устным поручением: «Скажи Аристагору, чтобы обрил тебе голову и посмотрел».
Историю записал Геродот. Шифра в ней нет вовсе: текст на голове написан открыто. Но никто из стражников не стал бы искать письмо под волосами. Секретом было не содержание, а сам факт, что письмо существует.
Спрятать смысл или спрятать письмо
До сих пор в этом курсе мы занимались криптографией — от греческого «тайнопись». Шифр превращает текст в абракадабру. Враг видит абракадабру, понимает, что перед ним секрет, и может взяться за взлом или просто арестовать отправителя.
Стеганография — «скрытое письмо», от греческого steganos, «покрытый», — делает другое. Она прячет послание внутри чего-то невинного: в картинке, в письме о погоде, в музыке. Перехватчик видит открытку с моря и пропускает её, не подозревая, что пропустил донесение.
Слово придумал немецкий аббат Иоганн Тритемий: так называлась его книга «Steganographia», написанная около 1499 года. Книга сама была стеганографией: она выглядела как трактат о магии и вызове духов, а на деле учила шифрованию.
Два подхода не спорят, а дополняют друг друга. Разумный шпион сначала шифрует донесение, а потом прячет шифровку. Если тайник найдут, текст всё равно не прочтут. Если не найдут — никто даже не узнает, что переписка была.
Геродот рассказывает и вторую историю. Спартанец Демарат, живший в изгнании у персов, узнал, что царь Ксеркс собирается идти на Грецию. Он взял деревянную дощечку для письма, соскоблил с неё воск, написал предупреждение прямо на дереве и снова залил воском. Чистая табличка без единого слова прошла все заставы. В Спарте долго не могли понять, что это значит, пока Горго, жена царя Леонида, не догадалась соскоблить воск.
Невидимые чернила
Самый знакомый со школы приём: написать письмо молоком или лимонным соком, а между строк — обычное письмо чернилами. Высохший сок не виден, но при нагревании темнеет раньше бумаги, и текст проступает. Ещё римский учёный Плиний Старший упоминал растительный сок как невидимые чернила.
В Первую мировую войну невидимые чернила стали серьёзным оружием. Шпионы писали химическими составами, которые проявлялись только другим реактивом, а цензоры проверяли подозрительные письма парами йода и ультрафиолетом. Тема оказалась настолько чувствительной, что в 2011 году ЦРУ рассекретило свои самые старые секретные документы — записки 1917–1918 годов именно о рецептах тайных чернил.
Во Вторую мировую немецкие агенты пошли ещё дальше и уменьшали фотографически целую страницу до точки размером с типографскую. Такую микроточку вклеивали в обычное письмо вместо точки над буквой или в конце предложения.
Нулевой шифр: письмо внутри письма
Можно обойтись без химии. Достаточно договориться, какие буквы читать. Такой способ называется нулевым шифром: почти все буквы письма — «нули», пустышки, и только некоторые несут смысл. Например, первые буквы каждого слова. Или вторые. Или каждое третье слово.
Самый известный пример приводит историк Дэвид Кан в книге «Взломщики кодов»: телеграмма германского агента, которая жаловалась на блокаду, эмбарго и цены на растительное масло. Если взять вторую букву каждого слова, получалось «Pershing sails from NY June 1» — «Першинг отплывает из Нью-Йорка 1 июня». Генерал Першинг командовал американскими войсками, которые отправлялись в Европу.
Похожим способом работала решётка Кардано, которую описал итальянский математик Джероламо Кардано в 1550 году. У отправителя и получателя одинаковые листы картона с прорезями. Отправитель кладёт решётку на бумагу, вписывает в прорези тайные слова, снимает решётку и дописывает вокруг них невинный текст. Получатель накладывает свою решётку — и видит только нужное.
А Фрэнсис Бэкон в начале XVII века придумал, как спрятать письмо в начертании текста. Каждая буква тайного послания записывается пятью знаками из двух — A и B, — а потом эти A и B превращаются в два чуть разных шрифта. Любой текст, набранный двумя шрифтами, может нести второе письмо. Попробуйте шифр Бэкона.
Агент прислал из командировки открытку. Шифровальщик знает: правило чтения то же, что в знаменитой телеграмме про Першинга. В открытке назначено время встречи. Когда?
Опять холодно. Слякоть, иногда солнце. Очень льёт.
В телеграмме про Першинга смысл несла не первая буква слова.
Выпишите вторую букву каждого слова: «Опять» — П, «холодно» — О…
Вторые буквы слов: Опять, холодно, Слякоть, иногда, солнце, Очень, льёт. Получается полночь.
Заметьте слабое место: текст выходит немного натянутым — «очень льёт» звучит странно. Опытный цензор цепляется именно за такие фразы. Чем длиннее тайное послание, тем труднее сочинить вокруг него естественный текст, поэтому нулевые шифры годятся только для коротких сообщений.
Пиксели: тайник в младшем бите
Компьютер открыл для стеганографии огромное пространство. Цифровая фотография — это таблица чисел. Каждый пиксель состоит из трёх: сколько в нём красного, зелёного и синего, от 0 до 255. Пиксель неба может быть (24, 38, 92), то есть тёмно-синим.
Число от 0 до 255 записывается восемью двоичными разрядами — битами. 92 — это 01011100. Левый бит — старший: он стоит 128, и если его поменять, цвет изменится почти вдвое. Правый бит — младший (по-английски least significant bit, LSB): он стоит 1. Поменяйте его, и 92 превратится в 93. Такую разницу не различит ни глаз, ни большинство мониторов.
Значит, младший бит каждого числа можно отдать под своё сообщение. Глаз будет видеть фотографию, а программа, знающая, куда смотреть, прочтёт послание. Если собрать один и тот же бит у всех пикселей в чёрно-белую картинку, получится битовая плоскость.
Пройдитесь по плоскостям. В старших битах видна сама фотография: горы, луна, градиент неба. Чем младше бит, тем больше шума: зернистость снимка живёт именно там. А в синем бите 0 из шума проступают ровные буквы. Именно так устроена шестая дверь нашего квеста.
Сколько можно спрятать? В картинке 360 × 240 пикселей по три числа в каждом — 259 200 младших битов, то есть 32 400 байт. Это около 16 тысяч русских букв: небольшая повесть в маленькой картинке. Утилита стеганографии умеет прятать так текст и доставать его обратно.
Младшие биты переживают только сжатие без потерь, например PNG. Если сохранить картинку в JPEG или отправить через мессенджер, который её пережимает, младшие биты перемешаются, и послание исчезнет.
Почему тайное послание прячут именно в младший бит, а не в старший?
Старший бит стоит 128: его замена превращает тёмно-синее небо в бледно-голубое. Младший стоит 1, и картинка остаётся прежней. К тому же младшие биты настоящей фотографии и так похожи на шум, и биты сообщения среди них не бросаются в глаза.
Звук, который можно увидеть
Любой звук можно разложить на сумму чистых тонов — синусоид разной частоты. Низкий гул — это низкие частоты, свист — высокие. Спектрограмма показывает, какие частоты звучат в каждый момент: время идёт слева направо, высота тона — снизу вверх, а яркость показывает громкость.
Отсюда простая идея: если спектрограмма — картинка, то звук можно нарисовать. Берём изображение, каждую его строку превращаем в полосу частот, каждый столбец — в короткий отрезок времени. Где пиксель светлый, звучит тон этой полосы. На слух выходит шипение и писк, а на спектрограмме проступает изображение.
Самый знаменитый пример — у британского музыканта Ричарда Д. Джеймса, известного как Aphex Twin. В 1999 году на сингле Windowlicker вышла вторая композиция с математической формулой вместо названия; её обычно называют «Equation» или «Formula». Ближе к концу трека на спектрограмме проступает лицо самого музыканта. Слушатель слышит скрежещущий шум и ничего не подозревает.
Пятая дверь квеста устроена так же: слово выписано в звуке блочными буквами между 1800 и 7200 герц. Чтобы его прочесть, загрузите файл в спектрограмму.
Как ищут спрятанное
Стеганография держится на том, что противник не знает, где искать. Это слабая опора: как только способ раскрыт, тайник открывается мгновенно. Поэтому существует обратное искусство — стегоанализ, поиск спрятанного.
Стегоаналитик не читает послание, а замечает следы. В младших битах настоящей фотографии есть слабая связь с соседними пикселями: шум сенсора и сжатие оставляют свой рисунок. Случайные биты сообщения этот рисунок разрушают, и статистические тесты это ловят. Ровные края, как у букв в нашем виджете, видны и вовсе глазом, если догадаться посмотреть на плоскость.
Стеганография окружает нас и сегодня, часто незаметно. Многие цветные лазерные принтеры добавляют на каждую страницу едва видимый узор жёлтых точек, в котором записаны серийный номер принтера и время печати. В 2005 году правозащитная организация EFF опубликовала расшифровку такого узора для одной из моделей.
Перехвачена ещё одна фотография. Аналитик уже проверил синий бит 0 — там чисто. Но слово в картинке есть. Какое?
Проверяйте плоскости по порядку: для каждого канала — младшие биты, 0, 1 и 2. В старших битах прятать бессмысленно — там видна сама фотография.
Попробуйте зелёный канал.
В зелёном канале, в бите 1, проступает слово ЛИСИЦА. Бит 1 стоит 2, так что каждое число поменялось не больше чем на 2 из 255 — всё ещё незаметно.
Урок здесь такой: перебрать 24 плоскости — минутное дело. Прятать «не там, где все» почти не помогает, если противник знает сам приём. Поэтому стеганографию сочетают с шифрованием: тогда даже найденные биты выглядят как шум.
Что взять с собой
- Шифр прячет смысл, стеганография прячет сам факт переписки. Лучше всего они работают вместе: сначала зашифровать, потом спрятать.
- Нулевой шифр выбирает из невинного текста нужные буквы — первые, вторые, каждое третье слово. Хорош для коротких посланий.
- Младший бит пикселя меняет цвет на 1 из 255 — глаз этого не видит. Один бит всех пикселей образует битовую плоскость, где спрятанное часто видно сразу.
- Спектрограмма превращает звук в картинку, а значит, картинку можно превратить в звук.
- Стеганография надёжна, пока способ неизвестен. Поэтому сама по себе она — прятки, а не защита.
Невидимые чернила, микроточки, нулевые шифры — всё это работало, пока письма были на бумаге. Но в XX веке основную переписку повели по радио, а радио слышат все. Прятать стало негде, и на сцену вышли шифровальные машины. Дальше: Энигма →
Утилиты урока
Всё из урока — в рабочем виде: вставьте свой текст.
- Стеганография в картинке (LSB) Спрятать текст в младших битах пикселей PNG и достать его обратно; битовые плоскости картинки.
- Спектрограмма аудио онлайн Увидеть спектрограмму аудиофайла и спрятать в звук свою картинку или текст.
- Шифр Бэкона Шифр Фрэнсиса Бэкона: каждая буква — пять знаков A/B, которые можно спрятать в начертании обычного текста.