Главная страница

Сайт новостей науки и техники


Наши партнёры

Программы на Delphi




Статистика

Рейтинг@Mail.ru


Ссылки

Программы на Delphi

Отличный текстовый редактор

Статьи  »  программы  »  тайнопись

Владимир Николаевич, vnikolaevich@mail.ru
Опубликовано: 24.4.2003

От булыжника до спама

    Нередко стеганографию считают частным разделом криптографии, что совершенно неверно. Криптография просто защищает данные, а задача стеганографии гораздо глубже — скрыть сам факт существования защищаемой информации. Это различие не менее принципиально, чем между бронежилетом и шапкой-невидимкой.

    Можно предположить, что уже в каменном веке, задолго до появления первых шифров, люди могли договориться и особым образом поворачивать булыжник у входа в пещеру, тем самым подавая условные знаки соплеменникам. Примеры аналогичных тайных знаков каждый может вспомнить из собственного детства или прочитанных книг. Скажем, у Сергея Довлатова описано, как друзья будущего заключенного, провожая его в тюрьму и зная, что письма будут вымарываться цензурой, просили его по приезде выслать свою фотографию — если все хорошо, то обычную, а если плохо, то с сигаретой в руке. Через некоторое время им пришло фото, на котором друг был чисто выбрит, аккуратно одет и держал в руках две пачки «Беломора». Краткость — сестра таланта! Если добавить к этому цветок на окне из «Семнадцати мгновений весны» или утюги на подоконнике из анекдота о Штирлице (типичные примеры скрытого информирования), то становится очевидно, что стеганография может быть удивительно разнообразной.

    Цифровой век подарил стеганографии второе дыхание. Все мы слышали о невидимых чернилах, проявляющихся на бумаге после нагревания. Казалось бы — сугубо шпионская амуниция, но сейчас любая секретарша, имеющая Word, может сделать себе такие «чернила» одним движением мыши — просто изменив цвет набранного текста. К примеру, вытряхните из мусорной корзины своей почтовой программы какое-нибудь спамерское сообщение. Как видите, абзацы в письме разделены пустой строкой. Скопируйте этот текст в Word и наберите в пустых строках между абзацами свое секретное донесение, допустим: «В Пхеньяне все спокойно». Выделите набранные слова и измените их цвет таким образом, чтобы он совпал с цветом фона (белый на белом). Ваш текст «исчезнет», а письмо приобретет вид обычного спама. Сохраните результат и отправьте письмо своим знакомым, например, в Белый Дом.

Черт в табакерке

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

    Хотя «контейнерами» могут быть различные файлы — даже dll-библиотеки и XML-страницы, — чаще всего в этой роли выступают аудиофайлы или графика. Помимо того, что их легко пересылать, не вызывая подозрений, у звука и картинок есть уникальная особенность — они позволяют прятать в себя информацию, совершенно не увеличиваясь в размерах и почти не меняясь «в лице». С помощью простейшей утилиты можно вставить 10 Кбайт текста в 100-килобайтную картинку так, что на глаз она будет неотличима от прежней, а размер не изменится ни на бит. Думаю, стоит объяснить этот фокус, поскольку его используют примерно девять стеганографических программ из десяти.

    Представим простейшую черно-белую картинку, в которой каждый пиксель описывается одним байтом. Допустим, байт кодирует яркость пикселя: ноль — черный, 255 — белый, все остальное — градации серого. Если мы изменим любой байт нашего файла или, что то же самое, отдельные биты этого байта, то соответствующий ему пиксель изменит яркость. При этом окажется, что изменение разных битов влияет на яркость пикселя по-разному: первый очень сильно, второй слабее, а последний, восьмой бит может добавить байту (а значит, и пикселю) только единицу. Заметит ли нормальный человек изменение серой точки на одну (1/255) градацию серого? Конечно, нет. А значит, для нашей картинки абсолютно не важно, каковы последние биты ее байтов. И что бы мы с ними ни делали — обнуляли, переставляли, заменяли на случайные, — картинка будет казаться одинаковой. Также не будет меняться и ее размер — ведь количество байтов мы не меняем. Таким образом, для размещения в картинке тайного сообщения достаточно превратить его в цепочку битов и записать их на место последних битов картинки.

    Описанный метод очень прост, применим к аудиофайлам так же, как и к картинкам, и в разных вариантах его используют почти все программы. Однако, при всей его элегантности, этим способом нельзя спрятать слишком много: алгоритм требует, чтобы соотношение скрываемой информации и файла-контейнера было не более 1:8. Если мы попытаемся изменять не только восьмые, но и седьмые и шестые биты, то картинка сильно и подозрительно исказится. По правде говоря, даже изменение последних битов бывает заметным на больших однотонных участках. Поэтому хорошие программы делают вставки только в самые надежные участки картинки. В результате для скрытой передачи средней величины текста с короткими аудиороликами общим размером, скажем, 300 Кбайт надо использовать огромное письмо-контейнер объемом 3 Мбайт. Помимо всего прочего, если за вашей почтой наблюдают (а иначе чего вы прячетесь?), то пересылка столь больших объемов может легко привлечь внимание кого-не-нужно.

Тайнопись украинская

1

    Мне случается иногда заглядывать на сайты, посвященные стеганографии, и обычно я лишь пробегаю взглядом их ленты новостей. Однако в недавнем таком «пробеге» я по-настоящему споткнулся, чуть не упав от удивления. Вообразите себе анонс: «Windows-программа BMP Secrets обладает простым интерфейсом и способна незаметно скрывать в bmp-файлах информацию большого объема, размером до 65% от файла-контейнера». Далее шли подробности: встроенное шифрование, работа в произвольном сегменте картинки и т. д., но мое внимание было приковано к цифрам — 65%! Возможно ли это? В то время как обычные «пряталки» делают вставки максимум в 10–12%, неизвестная фирма обещает в шесть раз больше! В анонсе давалась ссылка для скачивания программы.

    На сайте компании Parallel Worlds, куда меня «сослали», рассказывалось, что при работе программы файл-контейнер визуально не меняется, размер его остается прежним и, главное, в картинку запросто входит (а затем выходит) что угодно размером до 2/3 от ее объема. Размер чудо-программы всего 2 Мбайт, и, второе чудо, она полностью freeware — только заполни анкету. Вконец заинтригованный, я заполнил что требовалось и вскоре уже разглядывал скачанный архив.

    Лаконичный интерфейс BMP Secrets (рис. 1) кажется понятным с первого взгляда, и мне удалось поместить в картинку большой файл, даже не читая инструкций, — при этом я, конечно же, решил набить «контейнер» под завязку. В мегабайтную картинку программа согласилась спрятать rar-архив размером чуть более 600 Кбайт. После нажатия кнопки «Hide» рядом с оригинальным «контейнером» появилась его новая копия — уже с «закладкой», но при всем старании я не смог найти между ними разницы.

    Решив стать на место получателя послания, я закрыл программу, стер архив, снова запустил программу и попытался извлечь из картинки спрятанное. Не тут-то было! Кнопка «Unhide» не нажималась, а быстрый обзор подсказки ничего не дал. В «About» программы я увидел одни славянские имена, и у меня появилось предчувствие дурацкого розыгрыша. Приготовившись к худшему, стиснул зубы и перечитал весь Help.

    Оказалось, чтобы извлечь файл из контейнера, надо указать программе имя этого файла. Пользователь должен догадаться об этом сам или проштудировать инструкцию. Вы спросите, а что делать, если контейнер пришел, но имя спрятанного в нем файла вы не знаете? К счастью, угадывать точное имя не нужно — подойдет любой набор символов, например АВС.xyz. Какое имя укажете, такой файл и появится на диске, после чего снова придется гадать (если не знаете заранее), что же это за файл — электронная таблица, архив, exe'шник или шифровка для PGP?

    Впрочем, недоработка с именами — единственный минус, вполне допустимый для версии 1.0. В остальном BMP Secrets полностью оправдывает свои анонсы. Это единственная доступная программа, умеющая вставлять в несжатую картинку любой файл размером в 2/3 картинки. Вдумайтесь в эти цифры! В обои рабочего стола Windows с разрешением 1024х768 и размером (в формате TrueColor) 2,3 Мбайт можно спрятать архив почти в полтора мегабайта — больше, чем на дискету! При этом обои визуально не изменятся, и на вашем мониторе по-прежнему будет красоваться фотография… Чья там у вас красуется?

    Разумеется, в этот тайный архив мы можем поместить что угодно, вплоть до копии самих обоев — даже примитивным Zip'ом они сжимаются достаточно, чтобы спрятаться самим в себя. Этот, в общем, бессмысленный трюк хорошо демонстрирует силу новой программы. Если же мы возьмем более мощный компрессор, например WinRar 3, то сможем спрятать и другие фотографии, по размеру больше, чем видимая картинка!

    У вас на экране висит изображение, внутри которой есть другое изображение — тайное. Можно ли в то, тайное, вставить еще одно, так сказать, «более тайное»? Стеганография действительно позволяет создавать многослойные файлы-матрешки, но раньше они должны были многократно отличаться размером. Сейчас же мы можем взять какой-нибудь пейзаж, сжать его посильнее и с помощью BMP Secrets вставить в собственную копию. Эту копию опять сжать посильнее (без потерь!) и опять вставить в свою копию — получится тройная «матрешка». Если бы мы могли повторять эти операции бесконечно, то у нас получился бы информационный аналог вечного двигателя — файл с бесконечной емкостью каждого из своих битов. Но реальность грубее, и я, применяя самый мощный известный мне «безпотерьный» компрессор графики, смог сделать «матрешку» лишь из четырех копий одной картинки, вложенных друг в друга. Внешний файл-контейнер моей четвертой матрешки уже практически не поддавался сжатию без потерь — так туго он был набит данными.

Тайнопись японская

2        3

    В справке BMP Secrets нет даже намека на суть ее алгоритмов, как и в файле readme.txt. В разделе «О программе» с достоинством сказано: «Идея Виктора Чеха. Разработка и программирование Александра Грушецкого». Я решил изучить сетевые стегано-ресурсы повнимательнее. На Stegoarchive.com меня ждала аннотация (перевожу дословно): «Программа Digital Picture Envelop использует в своей работе принципы BPCS-стеганографии, изобретенные Eiji Kawaguchi в 1997 г. Эта программа, работая с bmp-файлами, может скрывать в них огромные объемы информации, составляющие до 50–100% от размера файла-контейнера, не увеличивая его размера и не внося заметных искажений». Далее шли подробности и давалась ссылка.

    Ссылка привела меня на сайт японского университета, к счастью, англоязычный. Кроме самой программы, на сайте были подробные описания ее алгоритмов, и уже через полчаса я был уверен, что новое слово в стеганографии довелось сказать не двум украинским программистам, а одному японскому профессору — Эйджи Кавагучи из Kyushu Institute of Technology.
Итак, что же придумал Кавагучи-сан? Судя по списку его научных работ, цифровой обработкой изображений профессор занимается почти тридцать лет, а в 1998 году им была опубликована статья, в которой ученый показал, что любые цифровые изображение состоят из фрагментов, несущих информацию, и фрагментов с бесполезным шумом. Казалось бы — что тут такого?

    Наше восприятие устроено так, что все хаотичное мы незаметно для себя игнорируем. Даже оказавшись в густом лесу и разглядывая беспорядочное переплетение веток, мы стараемся в первую очередь увидеть в них знакомые образы и закономерности — например, силуэт хищника. Фильтрация шумов, выделение образов из хаоса — важная, если не важнейшая, особенность нашего восприятия. И, как доказал Кавагучи, из-за этой особенности в графических файлах можно заменять целые куски изображения. Мы не заметим подмены, если вставляемые фрагменты будут (как и оригинальные) состоять из хаотично перемешанных пикселей.

    Много ли шума в обычных фотографиях? Если рассматривать их «в лоб», то совсем мало. Однако цифровые изображения состоят из байтов и битов, и, как было сказано выше, младшие биты любой картинки не несут полезной информации. Мы можем провести эксперимент, взяв воображаемый рубанок и «срезав» с фотографии слой последних восьмых битов. В этом срезе мы увидим совершенно хаотичную кашу из черных и белых точек — нулей и единиц. Можно сказать, что весь слой последних битов является шумовым и не нужен нашему восприятию. Если мы продолжим «состругивать» с фотографии битовые слои и рассматривать их как двуцветные картинки (в них будут только две цифры — 1 и 0), то заметим, что чем ближе к первому биту, тем отчетливее видны контуры изображения. Согласно Кавагучи, зашумленность битовых слоев любого изображения монотонно увеличивается от первого слоя (самого информативного) к последнему.

    Эта эволюция хорошо видна на примере разложения любой фотографии (рис. 2–6). Если первый битовый слой картинки является почти точной ее копией, то в шестом мы уже ничего не можем разобрать. Наиболее любопытны промежуточные слои — 3, 4 и 5-й, в которых информативные сегменты причудливо сочетаются с шумовыми. Очевидно, научиться обнаруживать в картинке местоположение шумов такого рода было, как минимум, интересной научной задачей. В процессе ее решения Кавагучи создал эффективный алгоритм, способный быстро сегментировать любую картинку.

    Полагаю, читатели уже догадались, какие возможности дает этот алгоритм для стеганографии. Если прежде мы могли добавлять информацию только в последний битовый слой, то сейчас можем использовать все шумовые сегменты, то есть более половины изображения. Новизну метода хорошо понимал и его создатель, опубликовавший в том же году статью «Principle and applications of BPCS-Steganography». BPCS означает Bit-Plane Complexity Segmentation, что можно перевести как «разделение битовых слоев на сегменты по уровню сложности». Это официальное название нового метода, который активно развивается японским профессором: так, на нескольких научных симпозиумах Кавагучи уже демонстрировал применение своих алгоритмов в файлах типа GIF и JP2.

    Программа, демонстрирующая BPCS-алгоритмы, выложена в Сеть, но в какой-то момент ее автор пожадничал и заблокировал функцию вставки сообщений. Сейчас публика может лишь извлекать «закладки» из набора фотографий, выставленных профессором на своем сайте. Это позволяет убедиться в эффективности технологии, но использовать ее в своих целях увы, невозможно.

    Кстати, способность BPCS-алгоритмов скрывать информацию того же объема, что и файл-контейнер, — сильное преувеличение. Перед вставкой данных программа делает их шумоподобными (проводит рандомизацию), а проще говоря — сжимает данные простейшим архиватором. В результате некоторые файлы (например, тексты) уменьшаются в несколько раз, из-за чего и возникает иллюзия, что в картинку влезает больше килобайт, чем сама картинка занимает на диске. С готовыми архивами такой трюк, естественно, не проходит, и в действительности «закладка» может составлять около 60% от размера контейнера.

© 2003, Журнал «Компьютерра» | http://www.computerra.ru/offline
Этот материал вы сможете найти в Интернете по адресу: http://www.computerra.ru/offline/2003/489/26122/

Hosted by uCoz