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



Следует принимать во внимание, что при известных обстоятельствах наличие зашифрованных сообщений может вызвать интерес посторонних лиц. Если провайдер специально следит за шифрованными сообщениями, он может без труда найти и перехватить шифровки, ведь в этом случае передаваемые данные легко определить просто по внешнему виду. На Экране 1 приведен пример сообщения, зашифрованного с помощью популярной программы шифрования электронной почты Pretty Good Privacy (PGP). Заинтересованное постороннее лицо (например, провайдер) легко может найти это сообщение именно потому, что оно явно не содержит осмысленных данных. Кроме того, символы в этом сообщении встречаются случайным образом, не составляют последовательностей и не соответствуют частотным характеристикам, свойственным нормальному текстовому сообщению (для английского языка — часто встречающиеся буквы e, t, o, a и незначительное количество букв q, w, z).
Экран 1. Пример содержимого зашифрованного текстового файла.

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

Методы стеганографии

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

  • можно спрятать файл "на видном месте". Достаточно назвать его каким-нибудь осмысленным именем, скажем system_save.exe, и сохранить в каталоге C:winntsystem32;
  • можно воспользоваться скрытыми каналами. Программы, вроде Loki и некоторые средства для осуществления атак типа "отказ в обслуживании", Distributed Denial of Service (DDoS), используют для коммуникации протокол ICMP (Internet Control Message Protocol). Вы можете использовать ICMP для сокрытия информации;
  • можно использовать цифровые водяные знаки - это один из наиболее распространенных видов приложений стеганографии. Исторически водяные знаки воспроизводят изображения, логотипы или текст на бумаге, что позволяет идентифицировать источник документа. Такой же принцип используется для цифровых водяных знаков. Скажем, художник, создавая галерею цифровых изображений в Internet, может пометить свои работы встроенной сигнатурой. Если кто-либо попытается присвоить изображение себе, автор может открыть свою подпись и подтвердить права на изображение;
  • можно прятать данные в изображениях и аудиофайлах, размещенных в Internet или передаваемых по электронной почте. Этот способ стеганографии часто используют вкупе с обычным шифрованием для обеспечения большей приватности. Не в меру любопытным придется сперва отыскать файлы с зашифрованной информацией (непростая задача), а уже потом пытаться сломать код.

Процесс стеганографии

Общий процесс стеганографии можно выразить с помощью формулы:

cover_medium + hidden_data 
+ stego_key = stego_medium

Где cover_medium представляет собой базовый файл, в котором скрыты секретные данные hidden_data, зашифрованные ключом stego_key. В результате получается носитель данных stego_medium, который относится к тому же типу, что и исходный файл cover_medium. При этом файл cover_medium (следовательно, и stego_medium) представляет собой ничем не примечательные стандартные файлы изображения или аудиозапись. Я возьму в качестве примера файлы изображения, так что вместо терминов cover_medium и stego_medium буду использовать, соответственно, cover_image и stego_image.

Прежде чем обсуждать способ сокрытия данных в изображении, напомню формат хранения файлов изображения. Изображение представляет собой двоичный файл, в котором содержится информация о цвете и яркости каждой точки изображения (пиксела). Обычно используются 8-ми или 24-разрядное представление цвета.

В 8-разрядном изображении каждой точке соответствует 8-разрядное описание цвета из палитры в 256 цветов. 24-разрядное представление изображения дает куда более разнообразную палитру — может использоваться более 16 млн цветов. В 24-разрядном изображении для хранения каждого пиксела тратится три байта, описывающих яркость трех базовых цветов — красного, зеленого, синего (Red, Green, Blue, RGB).

Формат HTML для описания цвета страниц в Internet использует 24-разрядное представление цветов. Для описания цвета используется представленное шестью шестнадцатеричными цифрами значение RGB. Так, представление оранжевого цвета, имеющего 100% красного, 50% зеленого и 0% голубого, будет выглядеть следующим образом.

Для 100% красного:

двоичное 11111111 = десятичное 255 =
шестнадцатеричное FF

Затем 50% зеленого:

двоичное 01111111 = десятичное 127 =
шестнадцатеричное 7F

Наконец, 0% голубого:

двоичное 00000000 = десятичное 0 =
шестнадцатеричное 00

Что вместе образует представление #FF7F00 для оранжевого цвета в коде HTML. Символ решетки указывает на шестнадцатеричное значение.

Размер файла изображения напрямую зависит от числа пикселов и точности представления цвета. Так, 8-разрядное цветное изображение размером 640 * 480 пикселов будет занимать 307 Кбайт (640 * 480 * 1 байт), а 24-разрядное изображение размером 1024 * 768 займет уже 2,36 Мбайт (1024 * 768 * 3 байт).

Как мы видим, цветные изображения весьма велики. К счастью, существует несколько способов сжатия, позволяющих снизить требования к хранению и передаче цветных изображений. Форматы BMP и GIF используют алгоритмы сжатия без потерь, обеспечивающие точное восстановление исходного изображения. Существуют также алгоритмы сжатия с искажением информации, примером может служить формат JPG. В этом случае восстановленное изображение получается почти такое же, как и исходное, но все же имеет некоторые отличия. Хотя для стеганографии можно пользоваться обоими типами алгоритмов, инструменты стеганографии для JPG значительно сложнее, чем для BMP и GIF.

Как спрятать данные вручную

Простейшим способом сокрытия данных является замена самого младшего разряда (Least Significant Bit, LSB — наименее значимый разряд). Суть этого метода сводится к тому, что берется двоичное представление секретной информации hidden_data, и в каждом байте исходного изображения cover_image перезаписывается младший разряд LSB. При использовании в качестве cover_image 24-разрядного изображения изменения будут незначительны и невооруженным глазом неразличимы. Для сокрытия девяти разрядов данных, скажем 101101101, потребуется изменить всего 3 пиксела (9 байт) в кодировке RGB:

10010101 00001101 11001001
10010110 00001111 11001010
10011111 00010000 11001011

Меняя младший разряд слева направо сверху вниз, получаем результат (измененные разряды выделены полужирным шрифтом)

10010101 00001100 11001001
10010111 00001110 11001011
10011111 00010000 11001011

Для успешного кодирования девяти разрядов секретных данных потребовалось заменить всего четыре разряда исходного изображения, что составляет приблизительно 50% младших разрядов. Такой же метод можно использовать и для изображений с градациями серого цвета и восьмиразрядных цветных изображений. Правда, в восьмиразрядном цветном изображении искажения будут более заметны.

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

Хотя анализ методов стеганографии позволяет обнаружить скрытые сообщения, объем подлежащей анализу информации делает задачу сверхтрудной. Допустим, есть подозрение на наличие данных внутри изображения, размещенного на сайте Internet-аукциона. И что же, загружать из сети и анализировать все сотни или тысячи хранящихся на сайте изображений? Едва ли кто-то станет этим заниматься.

Сокрытие секретных данных с помощью программ

При желании можно найти множество программ стеганографии практически для любой платформы. Вот список некоторых популярных бесплатно распространяемых программ для Windows 2000 и Windows NT:

Подробнее изучить вопрос о программах стеганографии можно с помощью сравнительной таблицы на сайте компании Johnson & Johnson Technology Consultants (JJTC) по адресу: http://www.jjtc.com/Steganography/ toolmatrix.htm.

Рассмотрим подробнее, как использовать S-Tools. Эта программа позволяет прятать данные в файлах изображений в форматах .bmp, .gif и в звукозаписях в формате .wav. Программа проста в использовании: достаточно перетащить на окно работающей программы S-Tools файл изображения или звукозаписи (cover_medium), затем перетащить на него файл hidden_data и указать ключ stego_key. Результатом работы программы будет файл stego_medium.

Для примера я выбрал в качестве носителя файл 5th_wave.gif (cover_image) и перетащил его на окно программы. В примечании в нижней строке сказано, что в файле можно спрятать изображение до 138,547 байт. Я выбрал файл virusdetectioninfo.txt размером 14 Кбайт и перетащил его на изображение. На Экране 2 показано открывшееся диалоговое окно, в котором сообщается, что будет спрятано 6019 байт данных, и предлагается ввести дополнительную фразу — пароль для шифрования скрываемого текста. Я дважды ввел ключевую фразу и подтвердил шифрование с предлагаемым по умолчанию алгоритмом IDEA.

Экран 2. Прячем текстовый файл в файле изображения.

На Экране 3 приведено полученное изображение, содержащее мою шифровку. При визуальном сравнении изображения идентичны.

Экран 3. Сравните изображение, содержащее спрятанные данные (справа), с оригиналом (слева).

Получатель этого сообщения перетащит файл на окно программы S-Tools, щелкнет по картинке правой кнопкой мыши и выберет пункт Reveal (проявить). Правильная ключевая фраза, введенная в диалоговом окне, позволит прочитать информацию, скрытую в изображении, как показано на Экране 4. Чтобы сохранить расшифрованные данные в файле, достаточно нажать OK.

Экран 4. Извлечение текстового файла из файла изображения.

Применение стеганографии в реальной жизни

Стеганография представляет собой интересный для изучения и применения объект, не слишком распространенный в системном администрировании. Но при этом стеганография не является лишь предметом академических исследований. Стеганография широко применяется, причем не только в мирных целях — так, в некоторых отчетах о расследовании террористических актов 11 сентября 2001 г. указывается, что стеганография использовалась террористами как один из способов передачи сообщений.

Гарри Кесслер — профессор, руководитель программы Computer Networking в Champlain College, Вермонт. С ним можно связаться по адресу: kumquat@sover.net.


Другие виды стеганографии

Хотя в большинстве современных методов стеганографии используются сложные технологии, существуют и другие методы, почти не требующие вычислений. Одним из распространенных простых методов стеганографии является null chipper — сообщение шифруется по первым (или любым другим фиксированным) буквам каждого слова внешне безобидного текстового сообщения. Например, шпион времен первой мировой войны мог послать по телеграфу такое сообщение:

«PRESIDENT'S EMBARGO RULING SHOULD HAVE IMMEDIATE NOTICE. GRAVE SITUATION AFFECTING INTERNATIONAL LAW. STATEMENT FORESHADOWS RUIN OF MANY NEUTRALS. YELLOW JOURNALS UNIFYING NATIONAL EXCITEMENT IMMENSELY.» («Президентское постановление об эмбарго следует немедленно принять к исполнению. Серьезная ситуация затрагивает международное законодательство. В заявлении предсказывается крах многих нейтральных стран. Бульварная пресса раздувает национальные настроения».)

Первые буквы каждого слова образуют строку PERSHINGSAILSFROMNYJUNEI. Стоит расставить пробелы — и перед нами сообщение PERSHING SAILS FROM NY JUNE I. (Першинг отправляется из Нью-Йорка 1 июня.)

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

  • точечные проколы на карте, позволяющие выбирать нужные буквы;
  • умышленные ошибки для выделения отдельных букв или слов;
  • незаметные изменения интервалов между словами или буквами;
  • использование слегка различающихся шрифтов для выделения букв и слов (вы не заметите разницу между шрифтами Courier и Courier New, если только не будете специально искать отличия).

Стеганография применяется не только для письменных сообщений. Для передачи зашифрованных сообщений можно использовать радио и телевизионные программы. Так, были подозрения, что подготовленные Усамой бен Ладеном видеозаписи, передававшиеся телевизионными станциями по всему миру, содержали скрытые сообщения.

Некоторые специалисты по стеганографии считают, что применявшиеся в годы Второй мировой войны коды языка Навахо морского корпуса ВМС США (United States Marine Corps Navaho Code Talkers) представляют собой один из видов стеганографии. Сообщения не были зашифрованы, но простой текст представлял собой язык, не понятный японцам.

Древнейший метод стеганографии применялся египетскими фараонами — обрить голову курьера, вытатуировать на коже сообщение и подождать, пока отрастут новые волосы. Получатель сообщения снова обривал курьера и мог прочесть скрытое сообщение. Этот метод действительно не требует специальных технических средств и непосредственно выражает смысл стеганографии — скрыть написанное.