Владимир Николаевич
Computerra.ru
Тайнопись
защитой информации, являясь, таким образом, родственницей криптографии. Самые памятливые читатели,
наверное, смогут даже назвать пару-тройку алгоритмов «скрытого письма» — именно так переводится слово
"стеганография" с греческого. Однако в последний раз «КТ» рассказывала о стеганографии более двух лет назад,
а с тех пор в этой области появились новые и, без преувеличения, революционные технологии.
От булыжника до спама
Нередко стеганографию считают частным разделом криптографии, что совершенно неверно. Криптография просто защищает данные, а задача стеганографии гораздо глубже — скрыть сам факт существования защищаемой информации. Это различие не менее принципиально, чем между бронежилетом и шапкой-невидимкой.
Можно предположить, что уже в каменном веке, задолго до появления первых шифров, люди могли договориться и особым образом поворачивать булыжник у входа в пещеру, тем самым подавая условные знаки соплеменникам. Примеры аналогичных тайных знаков каждый может вспомнить из собственного детства или прочитанных книг. Скажем, у Сергея Довлатова описано, как друзья будущего заключенного, провожая его в тюрьму и зная, что письма будут вымарываться цензурой, просили его по приезде выслать свою фотографию — если все хорошо, то обычную, а если плохо, то с сигаретой в руке. Через некоторое время им пришло фото, на котором друг был чисто выбрит, аккуратно одет и держал в руках две пачки «Беломора». Краткость — сестра таланта! Если добавить к этому цветок на окне из «Семнадцати мгновений весны» или утюги на подоконнике из анекдота о Штирлице (типичные примеры скрытого информирования), то становится очевидно, что стеганография может быть удивительно разнообразной.
Цифровой век подарил стеганографии второе дыхание. Все мы слышали о невидимых чернилах, проявляющихся на бумаге после нагревания. Казалось бы — сугубо шпионская амуниция, но сейчас любая секретарша, имеющая Word, может сделать себе такие «чернила» одним движением мыши — просто изменив цвет набранного текста. К примеру, вытряхните из мусорной корзины своей почтовой программы какое-нибудь спамерское сообщение. Как видите, абзацы в письме разделены пустой строкой. Скопируйте этот текст в Word и наберите в пустых строках между абзацами свое секретное донесение, допустим: «В Пхеньяне все спокойно». Выделите набранные слова и измените их цвет таким образом, чтобы он совпал с цветом фона (белый на белом). Ваш текст «исчезнет», а письмо приобретет вид обычного спама. Сохраните результат и отправьте письмо своим знакомым, например, в Белый Дом.
Черт в табакерке
В Интернете можно найти десятки программ для компьютерной тайнописи, от больших и дорогих пакетов до маленьких бесплатных утилит. Некоторые из них используют очень причудливые алгоритмы, но всегда неизменной остается суть: для скрытой передачи сообщения нужен подходящий носитель — «контейнер», который, во-первых, безобидно выглядит и, во-вторых, по размеру значительно больше скрытого сообщения (в пересчете на килобайты). Оба требования очевидны, и им подчиняются все программы — от Snow1, скрывающей данные в тексте с разной длинной пробелов, до файловой системы StegFS2, создающей во множестве подходящих файлов целый спрятанный раздел, который может работать как обычный диск.
Хотя «контейнерами» могут быть различные файлы — даже dll-библиотеки и XML-страницы, — чаще всего в этой роли выступают аудиофайлы или графика. Помимо того, что их легко пересылать, не вызывая подозрений, у звука и картинок есть уникальная особенность — они позволяют прятать в себя информацию, совершенно не увеличиваясь в размерах и почти не меняясь «в лице». С помощью простейшей утилиты можно вставить 10 Кбайт текста в 100-килобайтную картинку так, что на глаз она будет неотличима от прежней, а размер не изменится ни на бит. Думаю, стоит объяснить этот фокус, поскольку его используют примерно девять стеганографических программ из десяти.
Представим простейшую черно-белую картинку, в которой каждый пиксель описывается одним байтом. Допустим, байт кодирует яркость пикселя: ноль — черный, 255 — белый, все остальное — градации серого. Если мы изменим любой байт нашего файла или, что то же самое, отдельные биты этого байта, то соответствующий ему пиксель изменит яркость. При этом окажется, что изменение разных битов влияет на яркость пикселя по-разному: первый очень сильно, второй слабее, а последний, восьмой бит может добавить байту (а значит, и пикселю) только единицу. Заметит ли нормальный человек изменение серой точки на одну (1/255) градацию серого? Конечно, нет. А значит, для нашей картинки абсолютно не важно, каковы последние биты ее байтов. И что бы мы с ними ни делали — обнуляли, переставляли, заменяли на случайные, — картинка будет казаться одинаковой. Также не будет меняться и ее размер — ведь количество байтов мы не меняем. Таким образом, для размещения в картинке тайного сообщения достаточно превратить его в цепочку битов и записать их на место последних битов картинки3.
Описанный метод4 очень прост, применим к аудиофайлам так же, как и к картинкам, и в разных вариантах его используют почти все программы. Однако, при всей его элегантности, этим способом нельзя спрятать слишком много: алгоритм требует, чтобы соотношение скрываемой информации и файла-контейнера было не более 1:8. Если мы попытаемся изменять не только восьмые, но и седьмые и шестые биты, то картинка сильно и подозрительно исказится. По правде говоря, даже изменение последних битов бывает заметным на больших однотонных участках. Поэтому хорошие программы делают вставки только в самые надежные участки картинки. В результате для скрытой передачи средней величины текста с короткими аудиороликами общим размером, скажем, 300 Кбайт надо использовать огромное письмо-контейнер объемом 3 Мбайт. Помимо всего прочего, если за вашей почтой наблюдают (а иначе чего вы прячетесь?), то пересылка столь больших объемов может легко привлечь внимание кого-не-нужно.
Тайнопись украинская
Мне случается иногда заглядывать на сайты, посвященные стеганографии, и обычно я лишь пробегаю взглядом их ленты новостей. Однако в недавнем таком «пробеге» я по-настоящему споткнулся, чуть не упав от удивления. Вообразите себе анонс: «Windows-программа BMP Secrets обладает простым интерфейсом и способна незаметно скрывать в bmp-файлах информацию большого объема, размером до 65% от файла-контейнера». Далее шли подробности: встроенное шифрование, работа в произвольном сегменте картинки и т. д., но мое внимание было приковано к цифрам — 65%! Возможно ли это? В то время как обычные «пряталки» делают вставки максимум в 10–12%, неизвестная фирма обещает в шесть раз больше! В анонсе давалась ссылка для скачивания программы5.
На сайте компании Parallel Worlds, куда меня «сослали», рассказывалось, что при работе программы файл-контейнер визуально не меняется, размер его остается прежним и, главное, в картинку запросто входит (а затем выходит) что угодно размером до 2/3 от ее объема. Размер чудо-программы всего 2 Мбайт, и, второе чудо, она полностью freeware — только заполни анкету. Вконец заинтригованный, я заполнил что требовалось и вскоре уже разглядывал скачанный архив.
Лаконичный интерфейс BMP Secrets (рис. 1) кажется понятным с первого взгляда, и мне удалось поместить в картинку большой файл, даже не читая инструкций, — при этом я, конечно же, решил набить «контейнер» под завязку. В мегабайтную картинку программа согласилась спрятать rar-архив размером чуть более 600 Кбайт. После нажатия кнопки «Hide» рядом с оригинальным «контейнером» появилась его новая копия — уже с «закладкой», но при всем старании я не смог найти между ними разницы6.
Решив стать на место получателя послания, я закрыл программу, стер архив, снова запустил программу и попытался извлечь из картинки спрятанное. Не тут-то было! Кнопка «Unhide» не нажималась, а быстрый обзор подсказки ничего не дал. В «About» программы я увидел одни славянские имена, и у меня появилось предчувствие дурацкого розыгрыша. Приготовившись к худшему, стиснул зубы и перечитал весь Help.
Оказалось, чтобы извлечь файл из контейнера, надо указать программе имя этого файла. Пользователь должен догадаться об этом сам или проштудировать инструкцию. Вы спросите, а что делать, если контейнер пришел, но имя спрятанного в нем файла вы не знаете? К счастью, угадывать точное имя не нужно — подойдет любой набор символов, например АВС.xyz. Какое имя укажете, такой файл и появится на диске, после чего снова придется гадать (если не знаете заранее), что же это за файл — электронная таблица, архив, exe’шник или шифровка для PGP?
Впрочем, недоработка с именами — единственный минус, вполне допустимый для версии 1.0. В остальном BMP Secrets полностью оправдывает свои анонсы. Это единственная доступная программа, умеющая вставлять в несжатую картинку любой файл размером в 2/3 картинки. Вдумайтесь в эти цифры! В обои рабочего стола Windows
с разрешением 1024х768 и размером (в формате TrueColor) 2,3 Мбайт можно спрятать архив почти в полтора мегабайта — больше, чем на дискету! При этом обои визуально не изменятся, и на вашем мониторе по-прежнему будет красоваться фотография… Чья там у вас красуется?
Продолжение следует...
1(назад)munkora.cs.mu.oz.au/~mkwan/snow, автор Matthew Knaw.
2(назад)ban.joh.cam.ac.uk/~adm36/StegFS, авторы Andrew D. McDonald и Markus G. Kuhn. Написана для Linux, но обещается и версия для Windows 2000.
3(назад)Можно дать и такое объяснение: если у нас есть 8 байт, которые можно слегка изменять, то мы можем спрятать в них один символ чередованием четных и нечетных байт. Например букву «Ы» (в ASCII-коде 10011011) может передать последовательность «н-ч-ч-н-н-ч-н-н». Поскольку для верной передачи важен только признак «чет-нечет», абсолютные значения байтов-носителей достаточно уменьшить или увеличить лишь на единицу. Что вполне допустимо для графики и аудио.
4(назад) Метод называется LSB — Least Significant Bits method, вставка замещением наименее значащих бит.
5(назад) www.pworlds.com/products/i_secrets.html .
6(назад) Разница видна только при вычитании картинок в «Фотошопе» или быстром переключении между ними, как между кинокадрами.