CFA LogoCFA Logo Computer
Новости Статьи Магазин Драйвера Контакты
Новости
RSS канал новостей
В конце марта компания ASRock анонсировала фирменную линейку графических ускорителей Phantom Gaming. ...
Компания Huawei продолжает заниматься расширением фирменной линейки смартфонов Y Series. Очередное ...
Компания Antec в своем очередном пресс-релизе анонсировала поставки фирменной серии блоков питания ...
Компания Thermalright отчиталась о готовности нового высокопроизводительного процессорного кулера ...
Компания Biostar сообщает в официальном пресс-релизе о готовности флагманской материнской платы ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2003 ГОД

Невидимые чернила

Александр ГАЙША

Все тайное когда-нибудь становится явным. Крылатая фраза, которая почти всегда верна, за исключением тех случаев, когда скрывающий пользуется методами стеганографии. Выясним, что это за направление, и какие средства предлагает стеганография для хранения наших тайн.

Исторические изыскания

Стеганография — это одно из перспективных направлений в криптографии. Она предоставляет нам средства для непосредственного сокрытия секретной информации в общедоступной. Известно немало исторических примеров применения стеганографии. Так, в V веке до н. э. древнегреческий тиран Гистий, находясь в плену у царя Дария, должен был послать секретное сообщение своим приспешникам в другой город. Для этого он побрил наголо своего раба и вытатуировал у него на голове сообщение. Когда волосы у раба отрасли, он отправился в путь и, успешно пройдя все кордоны, доставил «письмо» адресату. Дедушка Ленин также пользовался сходными методами, однако поступал более цивилизованно и, как известно, писал послания революционерам молоком между строк. Таким образом, сокрытие секретных данных в общедоступной и внешне безобидной информации обеспечило надежный обмен данными.

Естественно, что и в современной жизни также есть немало вещей, которые мы хотели бы сделать «невидимыми» для постороннего глаза. Особенно это относится к нашим компьютерам: сколько там всего непотребного и секретного! Одних только ххх-картинок (это я про секретные чертежи колбасного цеха :-)) мегабайт на сто. Ну а если серьезно, это могут быть файлы с контактной информацией о ваших знакомых, какие-либо документы, файловые архивы, о существовании которых нежелательно было бы знать кому-то кроме вас. Думаю, каждый найдет у себя хоть что-то, что нужно скрыть. Так что неплохо было бы иметь какое-нибудь средство для выполнения подобных действий.

Давайте попробуем разобраться в механизмах возможного скрытия. Разбираться будем на примере программы, написанной мной на летних каникулах :-). Конкретных описаний и методик скрытия я нигде не встречал, поэтому, возможно, описанный алгоритм будет не самым эффективным, но зато самым простым и, главное, работающим. Из секретных источников («Шпионские штучки; Методы информационной защиты объектов и компьютерных сетей», А. В. Соколов, О. М. Степанюк) стало известно, что подобные программы прячут информацию в мультимедиа-файлах. Грубо говоря, связано это с тем, что мультимедиа-файлы предназначены для человека, а не для машины. Поясню на примере. Слегка подретушированная в Фотошопе картинка выглядит так же для глаза пользователя, как и оригинал, хотя в самом файле изменились тысячи бит. Представьте, что будет, если так изменится архив или экзешник — компьютер просто не захочет работать с ним! Поэтому можно сделать следующий вывод: мультимедиа-файлы особенно хороши в качестве носителя для скрываемой информации, так как их можно изменять незаметно.

Принципы организации цифрового звука и изображений

Подумав, я решил использовать в качестве носителей BMP- (битовые карты) и WAV- (волновые) файлы, так как обычно они несжаты, а значит, могут вместить больше информации; кроме того, с ними легко работать.

Кратко рассмотрим структуру этих файлов. Оба этих типа имеют служебный заголовок с полями, определяющими параметры звука или картинки. За заголовком (вплоть до конца файла) следуют непосредственно сами данные о цвете точек или о величине звукового сигнала. Разберем представление данных отдельно для музыки и картинок.

Программа работает только с 24-битными BMP, т.е. теми, которые содержат полноцветные изображения. Каждая точка такого изображения представлена тремя байтами (т.е. 24 битами, поэтому файл называется 24-битным), хранящими количество красного (R-байт), зеленого (G-байт) и голубого (B-байт) цветов (таким образом, цветовая модель файлов BMP соответствует модели RGB, применяющейся во всех мониторах, и все картинки отображаются одинаково правильно на любом мониторе). Значит, после служебного заголовка следует только информация о цвете пикселей, а как раз эту информацию мы можем изменять, так как глаз пользователя не замечает небольших цветовых модификаций. Например, цвет #1188АА невозможно отличить от #1289АВ, так как все составляющие изменились только на единицу (1112, 8889, АААВ).

В волновых файлах после заголовка идет последовательность значений звукового сигнала. Для простоты разберем пример 8-битного моно-файла (хотя программа работает и с 16-битными и со стерео-файлами), где каждый байт представляет собой значение звукового сигнала. Эти-то значения и проигрываются волновым устройством ПК, извлекая драгоценные звуки музыки из ваших колонок. Всего может существовать 28=256 различных градаций громкости (т.е. величины звукового сигнала), поэтому 8-битные файлы имеют плохое качество. Ухо пользователя не сможет ощутить разницу между громкостью в 155 и 156 единиц, поэтому тут также возможна вставка нашей внешней информации. 16-битные файлы имеют уже хорошее качество, поэтому позволяют изменять звуковой сигнал на бо[ударение!!!]льшую величину. Например, 11348 и 11353 воспринимаются ухом одинаково, хотя величины разнятся на 5 единиц. Можно сказать, что важно относительное изменение сигнала, равное в первом случае 1/1550.006, а во втором — 5/113480.0004, т.е. во втором случае изменение менее заметно, хотя сигнал изменения в сигнале более существенны.

Принципы скрытия информации

Что ж, с принципами организации цифрового звука и изображения вроде разобрались. Перейдем теперь к самому алгоритму скрытия.

Любой файл (который мы будем прятать) представляет собой последовательность нулей и единиц, а значит его можно представить как поток бит. Разбивая его на маленькие группы по 1—6 бит, можно вписывать эти группы в очередную порцию мультимедиа-данных из файла-носителя (далее будем называть его источником). Процесс скрытия изображен на Рис. 1.

Рис. 1.

На рисунке весь файл Секретный, который мы будем прятать, разбит на группки по 3 бита. В каждом байте файла Источник, который будет носителем скрытой информации, выделяются три младших бита. Эти три младших бита (в каждом байте источника) заменяются на три очередных бита из секретного файла. Таким образом, файл Результат является файлом того же типа, что и файл Источник (то есть картинкой или музыкой), причем каждый его байт сформирован следующим образом: первые пять бит берутся из файла Источник, а оставшиеся три — очередная группка из файла Секретный. Самое главное, что при такой замене Результат звучит (или выглядит) почти так же, как и Источник! Конечно, заметность изменений тем больше, чем больше младших бит заменяется. Если заменяется только один младший бит, то абсолютное значение цвета или величины звукового сигнала может измениться только на единицу (если младший бит был 0, а стал 1, или наоборот). Если заменяется два младших бита, то сигнал может измениться максимум на 3 единицы (если два младших бита были 00, а стали 11, или наоборот). Аналогично при замене 3 бит возможно уже изменение на 7 единиц (000111 или наоборот), 4 бита — на 15, и 6 бит — на 63 (почему не реализована замена в 5 бит, написано ниже). Однако, как было выяснено ранее, важно не абсолютное изменение сигнала, а относительное. Так, для 8-битного звука (сигнал лежит в пределах 0—255) разность в 63 единицы может равняться половине сигнала, что изменит его до неузнаваемости, в то время как для 16-битного (сигнал в пределах 0—65535) такое изменение хотя и заметно, но не приводит к катастрофической потере качества.

Программная реализация

Разобравшись с предметной областью и основными принципами стеганографии объектов, перейдем к практическим аспектам программной реализации (на нормальном языке :-) это означает, что мы сейчас рассмотрим, как программа гоняет все эти толпы битов и посылает их в нужное место :-)). Без поллитры тут не разобраться, поэтому запаситесь всем необходимым и приступим к делу. Должен вам сказать, что все эти биты — довольно прикольные кадры, и тасовать их одно удовольствие, но для этого нужно разобраться с битовыми операциями, которые предлагает нам С++ (тут вы, возможно, подумали: «Так вот зачем нужны эти глупые битовые операции, которыми нас пичкали в универе!»)

Как указано в комментариях к исходникам программы, в ней использованы две битовых маски типа mask1=00000111 и mask2=11111000 (продолжаем пример с тремя заменяемыми битами). Последовательность действий отображена на Рис. 2.

Вот тут уж точно беритесь за поллитру, и поехали разбираться, а иначе (произносится мерзким сюсюкающим голосом в стиле «еще ложечку за дедушку») вам никогда не стать настоящими программистами.

Данные считываются из файла Источник побайтно, каждый байт накладывается операцией & (И) на маску2 — на Рис. 2 результат этого наложения записан в строке под пунктирной линией (рассмотрено пять байт из файла Источник).

Рис. 2.

Из файла Секретный данные читаются по 24 бита. Каждые такие 24 бита обрабатываются в цикле. На первой итерации берется младший байт этих 24 бит (все младшие байты этих 24 бит обведены пунктирным прямоугольничком на Рис. 2) и накладывается операцией & (И) на маску1. Получаем байт, состоящий из пяти нулей, а на конце у него — 3 значащих бита файла Секретный.

Таким образом получаем два байта, причем старшие пять бит одного содержат мультимедийную информацию, а младшие три бита другого хранят секретную. Поскольку остальные биты — нули, можем склеить эти два байта в один операцией | (ИЛИ) — результат показан в самой нижней строчке, которая записывается в файл Результат. Восстановление проходит похожим образом с многочисленными перетасовками бит.

24 бита я решил использовать потому, что 24 делится на 1, 2, 3, 4 и 6, а значит, можно заменять соответственно 1, 2, 3, 4 или 6 бит. В программе (см. Рис. 3) можно изменять количество заменяемых бит, манипулируя трекбаром Заметность.

Естественно, чтобы другой пользователь не воспользовался данной программой, нужно зашифровывать данные, но сейчас поле Пароль игнорируется . Работа продолжается…

Рис. 3.

Еще забыл рассказать о нескольких технологических моментах. При достижении конца секретного файла записывать в младшие биты больше нечего, и качество резко улучшается, поэтому может быть определено наличие секретной записи в принципе. Во избежание такой ситуации младшие биты источника дописываются случайным образом. При восстановлении же информации нужно точно найти конец секретного файла, чтобы не восстанавливать случайные данные. Для этого нужно хранить длину спрятанного файла, причем она также имеет 24 бита, что определило максимальный размер секретного файла в 16 Мб. По-моему, этого вполне достаточно для скрытия данных в картинках и музыке (поди еще найди картинку размером в 100 Мб, чтобы в нее поместились эти 16).

Ознакомиться с самой реализацией (и доработать ее!) можно в исходнике, который написан на Visual C++ 6.0 и использует WinAPI; архив http://givi23.narod.ru/givitools.rarвместе с помощью, программой и проектом весит 50 Кб. Программами аналогичного профиля являются S-Tools и Steganos for Windows, их можно найти в Интернет на многих варезных серверах (сравните на досуге с нашей прогой).

Если вы дочитали статью до этих слов, значит, вы действительно достойны носить почетное звание умнейшего из мудрейших и упорнейшего из настойчивых. Прощаюсь, уповая на то, что программа послужит вам добрую службу, и ваши данные никто не найдет.

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы или вычислите пример: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © sector.biz.ua 2006-2015 design by Vadim Popov