Стеганография и стегоанализ. обзор существующих программ и алгоритмов скрытия информации

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

Стеганогра́фия (от греч. στεγανός - скрытый + γράφω - пишу; буквально «тайнопись») - способ передачи или хранения информации с учётом сохранения в тайне самого факта такой передачи (хранения). Этот термин ввел в 1499 году Иоганн Тритемий в своем трактате «Стеганография» (Steganographia), зашифрованном под магическую книгу.

Постановка задачи

Необходимо реализовать программу, которая размещает исходный текст в цифровом изображении либо получает текст из изображения, хранящего текст. Изображения рекомендуется использовать в формате хранения без потерь (напр., bmp). Один байт текста будет кодироваться в одном пикселе изображения. Так, один байт текста 10 101 010 будет расположен в пикселе изображения следующим образом:

R: 111100 10
G: 00001 101
B: 11001 010

Алгоритм кодирования информации:

  1. Загрузить изображение в память программы
  2. Определить количество доступных пикселей изображения
  3. Определить максимальную длину текста
  4. Загружаем текст в память программы из консоли или файла
  5. Если текст превышает максимально допустимую длину, сообщить об этом пользователю и завершить программу
  6. Организуем цикл по байтам текста и пикселям изображения, кодируем байт текста по схеме 2-3-3 битов на каждый из каналов пикселя
  7. Сохранить изображение на диск в исходном формате

Алгоритм декодирования разрабатывается похожим образом. Для чтения изображения в формате bmp используется бинарное чтение файлов, заголовок которого описан следующей структурой для 32-битной архитектуры:

#pragma pack(push, 1) typedef struct { unsigned char b1,b2; unsigned long bfSize; unsigned short bfReserved1; unsigned short bfReserved2; unsigned long bfOffBits; } BITMAPFILEHEADER; typedef struct { unsigned int biSize; int biWidth; int biHeight; unsigned short biPlanes; unsigned short biBitCount; unsigned int biCompression; unsigned int biSizeImage; int biXPelsPerMeter; int biYPelsPerMeter; unsigned int biClrUsed; unsigned int biClrImportant; } BITMAPINFOHEADER; #pragma pack(pop)

Требования к программе

Базово программа должна обеспечивать возможность кодирования текста из таблицы ASCII в изображении формата BMP без компрессии на стандартной палитре. В качестве усложнения программы могут быть реализованы:

  • Кодирование любого текста из заранее известных кодировок (UTF-16, CP-1251, UTF-8)
  • Использование других форматов изображения без потерь
  • Шифрование текста перед кодированием в изображение для большей защищённости передачи информации
  • Использование других схем записи байта текста в пиксель изображения, например, 1 бит текста в 1 пиксель, таким образом, кодировка является менее заметной, но существенно сокращается размер доступного для кодирования текста

Требования к отчёту

Отчёт выполняет в формате docx или odt вместе с копией на pdf . В отчёте должны присутствовать следующие части:

  1. Постановка задачи
  2. Теоретическое описание проблем стеганографии
  3. Выбранные методы кодирования информации в выполненной работе с подробным описанием алгоритма кодирования и декодирования
  4. Части программ, демонстрирующие основную моменты работы программы
  5. Описание программы в части работы пользователем: вызов, аргументы, скриншоты и прочее
  6. Заключение о проделанной работе

Вопросы для самопроверки

  • Зачем используется #pragma pack(push, 1) ?
  • Как осуществляется чтение и запись бинарных файлов?
  • Что такое формат хранение без потерь?
  • Что из себя представляет формат bmp ?
  • Что такое бит/байт текста?
  • Какие каналы используются для хранения информации о цвете пикселя?
  • Как в программу передаются аргументы при вызове?
  • Каким могут быть варианты хранения скрытого текста, кроме как в изображениях?
  • Какая информация может быть скрыта?

Вопросы, которые стоит гуглить

  • c++ read binary file to struct
  • why i need pragma push c++
  • bmp format structure
  • steganography to bmp

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

1 . ОБЗОР СУЩЕСТВУЮЩИХ ПРОГРАММ И АЛГОРИТМОВ СКРЫТИЯ ИНФОРМАЦИИ В КОМПЬЮТЕРНЫХ ИЗОБРАЖЕНИЯХ

1.1 Алгоритмы скрытия информации в компьютерных изображениях

В отличие от криптографической защиты, предназначенной для сокрытия содержания информации, стеганографическая защита предназначена для сокрытия факта наличия информации.

Методы и средства, с помощью которых можно скрыть факт наличияинформации, изучает стеганография (от греч. – тайнопись). Методы и способы внедрения скрытой информации в электронные объекты относятся к компьютерной стеганографии /7/.

Основными стеганографическими понятиями являются сообщениеиконтейнер. Сообщением m Î M , называют секретную информацию, наличие которой необходимо скрыть, где M – множество всех сообщений. Контейнером b Î B называют несекретную информацию, которую используют для сокрытия сообщений, где B – множество всех контейнеров. Пустой контейнер(контейнер-оригинал)это контейнер b , не содержащий сообщения, заполненный контейнер(контейнер-результат) b m – это контейнер b , содержащий сообщение m .

Стеганографическим преобразованием, принято называть зависимости F и F -1

F : M ´ B ´ K ® B , F -1 : B ´ K ® M , (1)

которые сопоставляют тройке (сообщение, пустой контейнер, ключ из множества K ) контейнер-результат, и паре (заполненный контейнер, ключ из множества K ) исходное сообщение, т.е.

F(m,b,k) = b m,k ,F -1 (b m,k) = m,где m Î M,b, b m Î B,k Î K. (2)

Стеганографической системой называют (F, F -1 , M, B, K) – совокупность сообщений, контейнеров и связывающих их преобразований.

Анализ применяемых на практике методов компьютерной стеганографии позволяет выд елить следующие основные классы:

1. Методы, основанные на наличии свободных участков в представлении/хранении данных.

2. Методы, основанные на избыточности представления/хранения данных.

3. Методы, основанные на применении специально разработанных форматов представления/хранения данных.

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

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

BMP c 24 или 32 битами на пиксель /5/.

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

Чтобы усовершенствовать этот метод, можно использовать пароль, задаваемый пользователем. Этот пароль служит для инициализации генератора псевдослучайных чисел, который генерирует номера пикселей, НЗБ которых подлежат замене на биты сообщения. Данный метод затрудняет как визуальный, так и статистический стегоанализ. К тому же, даже если сам факт передачи сообщения будет обнаружен, то извлечь его будет уже не так просто, как в случае встраивания сообщения без использования пароля.

Стегоалгоритмы, использующие изображения формата BMP c 256-цветной палитрой /3/.

Рассмотрим наиболее типичный в этом случае алгоритм EzStego , получившему свое название от одноименной программы, в которой он был реализован.

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

Первоначально EzStego сортирует цвета палитры c 0 , c 1 , . . . , c P− 1 , P ≤ 256 в цикле c π (0) , c π (1) , . . . , c π (P− 1) , π (P ) = π (0) так, чтобы сумма расстояний была мала. В последнем выражении π – перестановка сортировки. Для получения итоговой перестановки может использоваться несколько вариантов, например, сортировка по значению компоненты яркости каждого пикселя или приблизительное решение задачи коммивояжера на графе, вершинами которого будут являться элементы палитры. Набор пар E , в которых цвета будут обменены друг на друга в процессе внедрения, будет

E = { (c π (0) , c π (1)), (c π (2) , c π (3)), . . . , (c π (P− 2) , c π (P− 1))}. (3)

Используя стегоключ (пароль) генерируется псевдослучайный путь по пикселям изображения. Для каждого пикселя на этом пути его цвет c π (k ) заменяется цветом c π (j ) , где j – индекс k , в котором его НЗБ заменен на бит сообщения. Данный этап повторяется до тех пор, пока все биты сообщения не оказываются внедрены или пока не будет достигнут конец файла изображения.

1.2 Программы для скрытия информации в компьютерных изображениях

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

С помощью программы S - Tools (Steganography Tools ) (рисунок 1), имеющей статус freeware , можно спрятать информацию в графическом или звуковом файле. Причем графический файл после этого можно спокойно просмотреть, а звуковой – прослушать. Утилита не требует инсталляции, достаточно распаковать архив и запустить файл s - tools . exe . Архив программы занимает всего лишь порядка 280 KiB .

Рисунок 1 – Основное окно программы S - Tools

Технология работы программы такова, что шифруемые данные сначала сжимаются, а уже затем непосредственно шифруются. Программа может использовать несколько разных алгоритмов шифрования данных в зависимости от желания пользователя, включая одни из лучших алгоритмов – DES , который сегодня уже не удовлетворяет современным требованиям безопасности, Triple DES и IDEA . Последние два алгоритма обеспечивают высокий уровень защиты данных от дешифрования (до сих пор не было зарегистрировано ни одного случая дешифрования информации, зашифрованной с использованием данных методов).

Сам процесс шифрования информации очень прост: Для этого достаточно из проводника Windows перетащить графический или звуковой файл в окно программы. В правом нижнем углу программы появится информация о размере файла, который можно спрятать. На следующем этапе нужно перетащить файл с информацией на изображение, ввести пароль, выбрать вар иант шифрования и определить метод скрытия. Через некоторое время программа выдаст вторую картинку с условным именем hidden data ,

которая уже содержит скрытую информацию. Затем следует сохранить новую картинку с конк ретным именем и расширением gif или bmp , выбрав команду « Save as ».

Для расшифровки информации нужно перетащить в окно программы картинку со скрытой информацией, выбрать из контекстного меню, вызываемого нажатием правой кнопки мыши, команду « Reveal », затем ввести пароль – и на экране появится дополнительное окно с именем скрытого файла.

Программа Steganos Security Suite (рисунок 2) также является довольно популярной программой, по качеству превосходящей S - Tools , однако не являющейся бесплатной. Данный программный продукт представляет собой универсальный набор средств, необходимых для защиты информации.

Рисунок 2 – Основное окно программы Steganos

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

шифровании какого-либо файла можно дополнительно к этому выбрать контейнер (изображение формата BMP , JPEG или аудиофайл WAV ), в который будет встроено предварительно сжатый и зашифрованный файл. Касательно формата BMP программа позволяет использовать изображения только в режиме True Color .

Программа Secur Engine (рисунок 3) позволяет как просто шифровать файлы с использованием криптографических методов, так и встраивать их в контейнеры форматов BMP , JPEG , WAV . Имеется возможность выбрать один из 6 алгоритмов шифрования, одним из которых является отечественный алгоритм ГОСТ.

Рисунок 3 – Основное окно программы Secur Engine

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

В следующей серии наконец-то появится самое интересное - описание алгоритмов стегоанализа. Впрочем, как показывает настоящее, не такое уж и интересное. Есть и интереснее вещи в данной науке.

Возможность скрывать одни данные внутри других может позволить злоумышленнику скрытно украсть массу конфиденциальной информации.

  • Стеганография: Немного теории
  • Стеганография на практике
  • Программы для стеганографии
    • ImageSpyer G2
    • StegoTC G2 TC
    • RedJPEG
    • DarkCryptTC и Проект «Заря»
  • Стеганография своими руками

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

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

Если раньше не совсем честному работнику, чтобы вынести какой-нибудь секретный чертеж или документ, нужно было скрывать бумажную копию, то в эпоху цифровых технологий выносить секреты стало намного легче. Зашифрованный файл можно отослать по сети, а можно скинуть на съемный носитель, флешку и скрытно вынести в кармашке.

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

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

Стеганография, а не стенография

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

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

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

Стеганография: Немного теории

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

Методы типа LSB (Least Significiant Bit, наименьший значащий бит) и аналогичные. Их суть заключается в замене последних значащих битов в контейнере (изображения, аудио или видеозаписи) на биты скрываемого сообщения. Возьмем в качестве примера графический файл. Наглядно это выглядит следующим образом: мы меняем младшие биты в коде цвета пикселя на картинке. Если считать, что код цвета имеет 32-битное значение, то замена 0 на 1 или наоборот не приведет к сколько-нибудь существенному искажению картинки, ощутимому для органов восприятия человека. А между тем в этих битах для большой картинки можно что-то спрятать.

Рассмотрим небольшой пример. Допустим, имеется 8-битное изображение в градациях серого. 00h (00000000Ь) обозначает черный цвет, FFh (11111111Ь) — белый. Всего имеется 256 градаций (). Также предположим, что сообщение состоит из 1 байта — например, 01101011Ь. При использовании двух младших бит в описаниях пикселей нам потребуется 4 пикселя. Допустим, они черного цвета. Тогда пиксели, содержащие скрытое сообщение, будут выглядеть следующим образом: 00000001 00000010 00000010 00000011. Тогда цвет пикселей изменится: первого — на 1/255, второго и третьего — на 2/255 и четвертого — на 3/255. Такие градации, мало того, что незаметны для человека, могут вообще не отобразиться при использовании низкокачественных устройств вывода.

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

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

И третий метод — использование особенностей форматов файлов. К примеру, это может быть запись информации в метаданные, используемые данным форматом файла, или в различные другие, не используемые зарезервированные поля. Например, это может быть документ Microsoft Word, внутри которого будет спрятана информация, никак не отображаемая при открытии данного документа.

Аудио стеганография

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

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

Другой вариант использования стеганографии в аудиофайлах — фазовое кодирование (phase coding). Происходит замена исходного звукового элемента на относительную фазу, которая и является секретным сообщением. Фаза подряд идущих элементов должна быть добавлена таким образом, чтобы сохранить относительную фазу между исходными элементами, в противном случае возникнет искажение, заметное для человеческого уха.

На сегодняшний день фазовое кодирование является одним из самых эффективных методов скрытия информации.

Стеганография на практике

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

Программы для стеганографии

В качестве файла для хранения данных я использовал изображение 1680х1050, сохраненное в различных форматах: ВМР, PNG, JPEG. Скрываемым документом выступал текстовый файл размером порядка 40 Кб. Все описанные программы справились с поставленной задачей: текстовый файл был успешно сохранен и затем извлечен из исходного файла. При этом сколько-нибудь заметных искажений картинки обнаружено не было. Представленные далее утилиты можно скачать с сайта.

ImageSpyer G2

Утилита для сокрытия информации в графических файлах с использованием криптографии. При этом поддерживается около 30 алгоритмов шифрования и 25 хеш-функций для шифрования контейнера. Скрывает объем, равный числу пикселей изображения. Опционально доступна компрессия скрываемых данных.


ImageSpyer G2

Утилита совместима с Windows 8. В качестве исходных графических файлов могут использоваться форматы ВМР, JPEG, WMF, EMF, TIFF.

Скачать бесплатно ImageSpyer G2, вы можете по .

StegoTC G2 TC

Стеганографический архиваторный плагин (wcx) для Total Comander позволяет скрывать данные в любом изображении, при этом поддерживаются форматы ВМР, TIFF и PNG.

Скачать бесплатно StegoTC G2, вы можете по .

RedJPEG

Интерфейс этой программы, как и следует из названия, выполнен в красном стиле. Эта простая в использовании утилита предназначена для сокрытия любых данных в JPEG в изображении (фото, картинка) с помощью авторского стеганографического метода. Использует открытые алгоритмы шифрования, поточный шифр AMPRNG и Cartman II DDP4 в режиме хеш-функции, LZMA-компрессию.


RedJPEG

Профессиональная расширенная версия RedJPEG ХТ дополнена маскировкой факта внедрения и усиленной процедурой инициализации поточного шифра на основе характеристик изображения. Включены х86 и х86-64 сборки.

Также имеется RedJPEG ХТ for ТС WCX плагин Total Comanderг, обладающий аналогичным функционалом.

Скачать бесплатно RedJPEG, вы можете по .

DarkCryptTC и Проект «Заря»

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


DarkCryptTC и Проект «Заря»

Список поддерживаемых форматов действительно впечатляет: *.txt, *.html, *.xml, *.docx, *. odt, *.bmp, *jpg, *.tiff, *.png, *.jp2, *.psd, tga, *.mng, *.wav, *.ехе, *.dll.

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

Скачать бесплатно DarkCryptTC, вы можете по .

Также, на нашем сайте представлены и другие материалы касающиеся Стеганографии. Для поиска всех программ и книг, сделайте поиск по слову «Стеганография»

Стеганография своими руками

Для тех, кто хорошо знаком с программированием, в частности, с Visual Studio и С#, могу порекомендовать также довольно интересный , в котором можно найти исходные тексты стеганографических утилит для различных форматов данных: для работы с графическими форматами и для сокрытия информации, например, в ZIP-архивах. Общий принцип такого преобразования заключается в использовании заголовков архивируемых файлов. Фрагмент исходного кода для работы с ZIP-архивами выглядит следующим образом:

private void ZipFiles(string destinationFileName, ↵
string password)
{
FileStream outputFileStream = ↵
new FileStream(destinationFileName, ↵
FileMode.Create);
ZipOutputStream zipStream = ↵
new ZipOutputStream(outputFileStream);
bool isCrypted = false;
if (password != null && password.Length > 0)
{ //encrypt the zip file, if password is given
zipStream.Password = password;
isCrypted = true;
}
foreach(ListViewItem viewItem in lvAll.Items)
{
inputStream = new FileStream(viewItem.Text, ↵ FileMode.Open);
zipEntry = new ICSharpCode.SharpZipLib.Zip.ZipEntry(↵ Path.GetFileName(viewItem.Text));
zipEntry.IsVisible = viewItem.Checked;
zipEntry.IsCrypted = isCrypted;
zipEntry.CompressionMethod = ↵ CompressionMethod.Deflated;
zipStream.PutNextEntry(zipEntry);
CopyStream(inputStream, zipStream);
inputStream.Close();
zipStream.CloseEntry();
}
zipStream.Finish();
zipStream.Close();
}

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

Я думаю каждый хоть раз слышал о стеганографии. Стеганография (τεγανός - скрытый + γράφω - пишу, дословно «скрытопись») - это междисциплинарная наука и искусство передавать сокрытые данные, внутри других, не сокрытых данных. Скрываемые данные обычно называют стегосообщением , а данные, внутри которых находится стегосообщение называют контейнером .

На хабрахабре было много различных статей о конкретных алгоритмах информационной стеганографии , например DarkJPEG , «TCP стеганография» , ну и конечно любимый всеми студентами во время курсового проектирования «алгоритм LSB» (например LSB стеганография , Стеганография в GIF , Котфускация исполняемого.net кода)

Стеганографических способов бесчисленное множество. На момент написания данной статьи в США уже опубликовано не менее 95 патентов по стеганографии , а в России не менее 29 патентов . Более всего мне понравился патент Kursh К. и Lav R. Varchney «Продовольственной стеганографии» («Food steganography» , PDF)

Картинка из «пищевого» патента для привлечения внимания:

Тем не менее, прочитав приличное количество статей и работ, посвященных стеганографии, я захотел систематизировать свои идеи и знания в данной области. Данная статья сугубо теоретическая и я хотел бы обсудить следующие вопросы:

  1. Цели стеганографии - на самом деле их три, а не одна.
  2. Практическое применение стеганографии - я насчитал 15.
  3. Место стеганографии в XXI веке - я считаю, что с технической точки зрения современный мир уже подготовлен, но «социально» стеганография пока «запаздывает».

Я постарался обобщить мои исследования по данному вопросу. (Это значит, что текста много)
Надеюсь на разумную критику и советы со стороны хабросообщества.

Цели стеганографии

Цель - это абстрактная задача, относительно которой разрабатывается научная теория и методология достижения данной цели. Не нужно путать цель и применение . Цель предельно абстрактна, в отличие от применения .

Как я уже говорил, в стеганографии существуют три цели.

Цифровые отпечатки (ЦО) (Digital Fingerprint)

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

Таким образом, при извлечении ЦО третья сторона (т.е. противник) может преследовать две цели:

  1. извлечение ЦО из контейнера («слабая цель» );
  2. подмена одного ЦО другим ЦО («сильная цель» ).

В качестве примера ЦО можно привести продажу электронных книг (например в формате *.PDF). При оплате книги и отправки её получателю можно в *.pdf вкраплять информацию о e-mail; IP; данных, введенные пользователем и т.д. Конечно это не отпечатки пальцев и не анализ по ДНК, но, согласитесь, это лучше, чем ничего. Возможно в России, по причине иной культуры и иного, исторически сложившегося, отношения к исключительному праву данное применение стеганографии неактуально; но, например, в Японии, где за скачивание torrent-файлов могут посадить, применение стеганографических ЦО более вероятно.

Стеганографические водяные знаки (СВЗ) (Stego Watermarking)

В отличие от ЦО, СВЗ подразумевает наличие одинаковых меток для каждой копии контейнера. В частности СВЗ можно использовать для подтверждения авторского права. Например, при записи на видеокамеру можно в каждый кадр вкраплять информацию о времени записи, модели видеокамеры и/или имени оператора видеокамеры.
В случае если отснятый материал попадет в руки конкурирующей компании, вы можете попытаться использовать СВЗ для подтверждения авторства записи. Если ключ держать в секрете от владельца камеры, то с помощью СВЗ можно подтверждать подлинность фото и/или видео снимков. Кстати, наш коллега по цеху, Дмитрий Витальевич Скляров , успешно поломал стеганографию на некоторых моделях камеры Canon . Проблема правда была аппаратной, саму стеганку Дмитрий Витальевич не трогал, тем не менее он стеганографически «доказал» подлинность Сталина с iPhone"ом.

Фотография Сталина с iPhone"ом, сделанная Д.В. Скляровым (с корректным СВЗ)


Скрытая передача данных (СПД)

Это «классическая» цель стеганографии, известная со времен Энея Тактика (Αινείας ο Τακτικός , см его труд, содержащий простые стеганографические приемы: ). Задача - передать данные так, чтобы противник не догадался о самом факте появления сообщения.

В современных русскоязычных работах, посвященных стеганографии, часто используется термин ЦВЗ (Цифровые водяные знаки) . Под этим термином подразумевают то СВЗ, то ЦО. (А иногда СВЗ и ЦО одновременно, да еще в одной статье!) Тем не менее при реализации ЦО и СВЗ возникающие проблемы и задачи принципиально различные! Действительно, СВЗ на всех копиях электронного документа одинаков, а ЦО на всех копиях документов различен. По этой причине, например, атака сговором принципиально невозможна в СВЗ! Хотя бы по этой причине следует различать СВЗ и ЦО. Всех, кто собирается работать в области стеганографии, настоятельно советую не употреблять термин ЦВЗ в своей речи.

Данная, казалось бы очевидная мысль, до сих пор у многих вызывает недоумение. Аналогичную точку зрения о необходимости различать СВЗ и ЦО высказывали такие небезызвестные в узких кругах «стеганографы» , как Кашен (Cachin), Петикола (Petitcolas), Каценбейзер (Katzenbeisser).

Для каждой из этих трех целей следует разрабатывать свои собственные критерии стойкости стеганографической системы и формальные информационно-теоретические модели для их достижения, т.к. смысл применения стеганографии различен. Про фундаментальное отличие СВЗ и ЦО написано выше. Но может быть имеет смысл объединить СПД с ЦО или с СВЗ? Нет! Дело в том, что смыслом СПД является сама скрытая передача данных , а ЦО и СВЗ предназначены для защиты самого контейнера . Более того, сам факт наличия ЦО или СВЗ может не быть тайным, в отличие от большинства задач для СПД. В частности, по этой причине говорить о возможности построения совершенной стегосистемы (по Кашену) для реализации ЦО или СВЗ для большинства практических задач не имеет никакого практического смысла.

4. Защита исключительного права (ЦО)

В качестве возможного применения можно привести голографический многоцелевой диск (Holographic Versatile Disc, HVD). (Правда есть точка зрения, что данная технология изначально «мертворожденная») Разрабатываемые ныне HVB могут содержать до 200 Гб данных на один cartridge. Эти технологии предполагают использовать компаниями теле и радиовещания для хранения видео и аудио информации. Наличие ЦО внутри корректирующих кодов этих дисков может использоваться в качестве основного или дополнительного средства для защиты лицензионного права.

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

Данную цель попыталась воплотить в 2007-2011 годах компания amazon.com . Цитата artty из статьи «Защита» mp3 файлов на amazon.com :

Если по-русски: скачанный файл будет содержать уникальный идентификатор покупки, дату/время покупки и др. информацию (...).

Скачать в лоб данные композиции не получилось (амазон ругается и говорит, что может их продать только на территории США). Пришлось попросить американских знакомых и через некоторое время у меня на руках была одна и та же песня, но скачанная независимо двумя разными людьми с разных аккаунтов в амазоне. По виду файлы были абсолютно одинаковы, размер совпадал до байта.

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

5. Защита авторского права (СВЗ)

В данном случае одним знаком защищается каждая копия контента. Например это может быть фотография. В случае если фотографию опубликуют без разрешения фотографа, сказав, что якобы не он автор данной работы, фотограф может попытаться доказать свое авторство с помощью стеганографии. В данном случае в каждую фотографию должна вкрапляется информация о серийном номере фотоаппарата и/или какие либо иные данные, позволяющие «привязать» фотографию к одному единственному фотоаппарату; и через фотоаппарат фотограф может попытаться косвенно доказать, что именно он является автором снимка.

6. Защита подлинности документов (СВЗ)

Технология может быть такая же, как и для защиты авторского права . Только в данном случае стеганография используется не для подтверждения авторства, а для подтверждения подлинности документа. Документ, не содержащий СВЗ считается «не настоящим», т.е. поддельным. Уже упомянутый выше Дмитрий Скляров как раз решал противоположенную задачу. Он нашел уязвимость фотоаппарата Cannon и смог подделать подлинность фотографии Сталина с iPhone"ом.

7. Индивидуальный отпечаток в СЭДО (ЦО)

В системе электронного документооборота (СЭДО) можно использовать индивидуальный отпечаток внутри *.odt, *.docx и иных документах при работе с ними пользователем. Для этого должны быть написаны специальные приложения и/или драйверы, которые установлены и работают в системе. Если данная задача выполнена, то с помощью индивидуального отпечатка можно будет опознать, кто работал с документом, а кто нет. Разумеется стеганографию в данном случае глупо делать единственным критерием, но как дополнительный фактор идентификации участников работы с документом она может быть полезна.

8. Водяной знак в DLP системах (СВЗ)

Стеганография может быть применима для предотвращения утечек информации (Data Leak Prevention , DLP). В отличие от индивидуального отпечатка в СЭДО , в данном применении стеганографии при создании документа, содержащий конфиденциальный характер, вкрапляется определенная метка. При этом метка не изменяется, вне зависимости от количества копий и/или ревизий документа.

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

9. Скрытая передача управляющего сигнала (СПД)

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

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

10. Стеганографические botnet-сети (СПД)

Если быть педантом, то данное применение можно считать частным случаем скрытой передачей управляющего сигнала . Тем не менее, я решил обозначит данное применение отдельно. Мой коллега из ТГУ прислал мне весьма любопытную статью неких Shishir Nagaraja , Amir Houmansadr , Pratch Piyawongwisal , Vijit Singh , Pragya Agarwal и Nikita Borisov "а «Stegobot: a covert social network botnet» . Я не специалист по botnet-сетям. Не могу сказать, лажа это или интересная фича. Буду раз услышать мнение хабрасообщества!

11. Подтверждение достоверности переданной информации(ЦО).

Стегосообщение в данном случае содержит данные, подтверждающие корректность передаваемых данных контейнера. В качестве примера это может быть контрольная сумма или хеш-функция (дайджест). Задача подтверждения достоверности является актуальной, если противник имеет необходимость подделать данные контейнера; по этой причине данное применение не нужно путать с защитой подлинности документов ! Например если речь идет о фотографии, то защитой подлинности является доказательство того, что данная фотография настоящая, не подделанная в фотошопе. Мы как бы защищаемся от самого отправителя (в данном случае фотографа). В случае подтверждения достоверности необходимо организовать защиту от третей стороны (man in the middle), которая имеет возможность подделать данные между отправителем и получателем.

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

12. Funkspiel («Радиоигра») (СПД)

Из википедии :

Определение Funkspiel"я

Радиоигра (калька с нем. Funkspiel - «радиоигра» или «радиоспектакль») - в практике разведки XX века использование средств радиосвязи для дезинформации разведывательных органов противника. Для радиоигры часто используют захваченного контрразведкой и перевербованного разведчика-радиста или двойного агента. Радиоигра позволяет имитировать деятельность уничтоженной или никогда не существовавшей разведсети (и таким образом снижать активность противника по заброске новых разведчиков), передавать противнику дезинформацию, получать сведения о намерениях его разведывательных органов и достигать других разведывательных и контрразведывательных целей.

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

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

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

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

13. Неотчуждаемость информации (СВЗ)

Существует ряд документов, для которых важна целостность. Ее можно осуществить резервированием данных. Но что делать, если есть необходимость иметь документы в таком виде, чтобы невозможно было одну информацию отделить от другой информации? В качестве примера можно привести медицинские снимки. Многие авторы для надежности предлагают вовнутрь снимков вкраплять информацию об имени, фамилии и иных данных пациента. См например книгу Штефана Каценбейзера (Stefan Katzenbeisser) и Фабиана Петикола (Fabien A. P. Petitcolas) "Information Hiding Techniques for Steganography and Digital Watermarking ":

Отрывок про использование стеганографии в медицине. из книги ""Information Hiding Techniques for Steganography and Digital Watermarking""

The healthcare industry and especially medical imaging systems may benefit from information hiding techniques. They use standards such as DICOM (digital imaging and communications in medicine) which separates image data from the caption, such as the name of the patient, the date, and the physician. Sometimes the link between image and patient is lost, thus, embedding the name of the patient in the image could be a useful safety measure. It is still an open question whether such marking would have any effect on the accuracy of the diagnosis but recent studies by Cosman et al. revealing that lossy compression has little effect, let us believe that this might be feasible. Another emerging technique related to the healthcare industry is hiding messages in DNA sequences. This could be used to protect intellectual property in medicine, molecular biology or genetics.

Аналогичные рассуждения можно сделать по поводу современной астрономии. Приведем цитату отечественного астронома Владимира Георгиевича Сурдина (ссылка на видео):

Я завидую тем, кто сейчас входит в науку. Последние 20 лет мы [астрономы] в общем-то топтались на месте. Но сейчас ситуация изменилась. В мире построено несколько телескопов совершенно уникального свойства. Они видят почти все небо и огромные объемы информации получают каждую ночь. Вот достаточно сказать, что за предыдущие 200 лет астрономы открыли несколько тысяч объектов. (...) Это за 200 лет! Сегодня каждую ночь мы открываем триста новых объектов солнечной системы! Это больше, чем человек ручкой смог записать бы в каталог. [за сутки]

Подумать только, каждую ночь 300 новых объектов. Понятно, что это различные мелкие космические астеройды, а не открытие новых планет, но все же… Действительно, возможно было бы разумно вкраплять информацию о времени съемки, месте съемки и иные данные непосредственно в изображение? Тогда при обмене снимков между астрономами, ученые всегда могли бы понять, где, когда и при каких обстоятельствах был сделан тот или иной снимок. Можно даже вкраплять информацию без ключа, считая, что противника нет. Т.е. использовать стеганографию только ради «неотчуждения» самих снимков от дополнительной информации, надеясь на честность пользователей; возможно, это было бы гораздо более удобно, чем сопровождать каждый снимок информацией.

Из мира компьютерных игр можно привести WoW . Если сделать скриншот игры, то автоматически внедряется СВЗ , содержащий имя пользователя, время снятия скриншота (с точностью до минуты и IP) адрес сервера.

14. Стеганографическое отвлечение (?)

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

Грубо говоря, стеганографическое отвлечение чем-то напоминает DoS и DDoS атаки. Вы отвлекаете внимание противника от контейнеров, которые действительно содержат что-то ценное.

15. Стеганографическое отслеживание (СПД)

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

Почему бы не перенять опыт «реальных коллег» в наш виртуальных мир? Таким образом стеганографическое отслеживание напоминает чем-то вроде honeypot"а .

Прогноз о будущем стеганографии в первой четверти XXI века

Прочитав полусотню различных статей по стеганке и несколько книжек, рискну высказать свое мнение по поводу стеганографии. Данное мнение - лишь мое мнение и я его никому не навязываю. Готов к конструктивной критике и диалогу.

Тезис. Я считаю, что мир технически готов к стеганографии, но в «культурном» плане современное информационное общество пока ещё не дозрело. Я думаю, что в ближайшее время (2015-2025 годах) произойдет то, что возможно в будущем назовут "стеганографической революцией "… Может быть это немного заносчивое утверждение, но я попытаюсь обосновать свою точку зрения четырьмя положениями.

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

Отсутствие единой теории - важный тормоз. Математически доказано, что шифр Вернама (=«одноразовый блокнот») взломать невозможно, по этой причине связь между В.В. Путиным и Баракой Обамой осуществляется именно с помощью этого алгоритма. Существует определенная теория, создающая и изучающая абстрактные (математические) криптографические объекты (Bent-функции, LFSR, циклы Фейстейля, SP-сеты и т.д.). В стеганографии существует зоопарк терминов и моделей, но большинство из них необоснованны, изучены не полностью или притянуты за уши.

Тем не менее определенные сдвиги в данном направлении уже есть. Уже осуществляются скромные попытки использовать стеганографию если не как основное или даже единственное решение, то как вспомогательный инструмент. Огромный сдвиг в теории произошел за последние пятнадцать лет (2000-2015), но думаю об этом можно написать отдельный пост, в двух словах сказать трудно.

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

Начиная примерно с 2008 года это уже все осознали. Стеганографией стали интересоваться не только математики-криптографы, но и лингвисты, филологи, химики. Думаю это позитивный сдвиг, говорящий о многом.

Третее . Современный виртуальный мир перенасыщен текстами, картинками котиков, видеороликами и прочая и прочая… На одном сайте YouTube ежеминутно загружается более 100 часов видео! Вы только подумайте, ежеминутно ! Вот сколько минут вы читаете этот пространный опус?.. А теперь умножьте это число на 100! Вот столько часов различного видео на одном только YouTube появилось за это время!!! Вы можете себе это представить? А ведь это огромная «почва» для сокрытия данных! То есть «технически» мир давным давно готов к стеганографии. И я, если честно, глубоко уверен, что стеганография и противодействие стеганографии в ближайшем будущем станет такой же актуальной проблемой, как проблема BigData Colossus …

Данная информация перестала быть секретной, если мне не изменяет память, только в 2000-х годах. В качестве другого исторического примера можно привести алгоритм RSA, который был изобретен в конце ВМВ британскими криптографами. Но, по понятным причинам, военные засекретили первый в мире алгоритм асимметричного шифрования и пальма первенства досталась Диффи, Хелману, а затем Ривесту, Шамиру и Адлеману.

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

В современной западной литературе почему-то «исчезли» (т.е. перестали публиковаться) многие ученые, которые в 1998-2008 годах предлагали весьма интересные идеи. (например Питер Вайнер, Мишель Элиа). Примерно аналогичная ситуация была перед изобретением атомного оружия… Кто знает, может быть уже изобретены совершенные стегосистемы и они успешно используются ГРУ и/или АНБ? А мы, дочитывая этот пост и глядя на наручные часы высчитываем, сколько ещё часов мурлыкающих котиков закачали миллионы пользователей на YouTube и есть ли среди них котики с перепиской террористов; команд для botnet-сети или чертежи РТ-2ПМ2, зашифрованные шифром Вернама.

У кого из вас, уважаемые читатели, нет секретов? А кому хоть раз в жизни не приходилось доверить кому-либо нечто важное, взяв с него слово сохранить тайну? Думаю, вы со мной согласитесь: защита информации - дело, касающееся всех и каждого.

Стеганография в далеком и недалеком прошлом

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

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

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

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

В античности, когда для письма использовались вощеные таблички, секретную информацию можно было написать непосредственно на подложке, потом нанести воск, а на нем написать какой-то безобидный текст. Попади такая табличка к врагам, они не догадались бы, что там имеются какие-то секреты. В средние века, да и позднее, большой популярностью пользовались особые чернила, не видимые постороннему глазу. Написанное с их помощью послание можно было прочесть лишь после особой обработки бумаги. Помните известный рассказ об умном Ленине и глупом жандарме? Так вот Владимир Ильич использовал как раз такой стеганографический инструмент - молочные чернила, которые после высыхания становились практически невидимыми, а при нагревании проявлялись четкими коричневыми буквами. Кроме таких незамысловатых способов, изобретались и сложные составы, для проявления которых нужно было провести химическую реакцию.

Нередко для передачи важных данных использовался посторонний текст (книга, заметка в газете, безобидное письмо о погоде и пр.), буквы и знаки которого кодировали конфиденциальную информацию. И здесь простор для фантазии просто огромен: скрытый текст может считываться по первым буквам слов (принцип акростиха) или определяться по заранее оговоренному правилу. После изобретения общепринятых кодов (например, азбуки Морзе) стало возможным распознавать секретный текст по длинам слов: 4-5 букв - тире, 5-6 букв - точка, 7 и более - пробел, меньше 4 букв - игнорируются). В рукописном тексте значение могли иметь особенности начертания букв - размеры, завитки и т.д. Всего и не перечислишь.

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

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

Современные подходы к стеганографии

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

В зависимости от типа контейнера компьютерные стеганографические алгоритмы удобно разделить на три основные группы.

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

Фантазия разработчика может пригодиться в случае необходимости спрятать в тексте двоичные данные. Если в качестве стеганограммы выступает произвольный файл, он рассматривается в виде последовательности одиночных битов или короткой серии битов (группы по два-три бита). Для их кодирования используют пробелы (один пробел - 0, два - 1) или непечатаемые символы (например, нулевой символ). Для решения данной задачи вполне может подойти приведенный выше пример с азбукой Морзе: тогда для кодирования коротких серий битов будут использоваться длины слов или их первые буквы.

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

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

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

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

3.1. В простых некоммерческих программах для стеганографии в качестве контейнера нередко используют области графических файлов, изменение которых не влияет на изображение. Скрываемая информация может размещаться и после окончания данных изображения, и между отдельными картинками одного файла (например, анимированного GIF), и в полях-комментариях, которые игнорируются при прорисовке. Такие стеганограммы легко детектируются, поэтому обычно они рассчитаны на то, что специально их никто искать не будет.

3.2. Метод наименее значащих битов (Least Significant Bit, LSB) наиболее распространен в электронной стеганографии. Он основан на ограниченных возможностях человеческих органов чувств, в силу чего люди не способны различать незначительные вариации цветов или звуков. Для простоты описания покажем принцип работы этого метода на примере 24-битного растрового RGB-изображения. Одна точка изображения в этом формате кодируется тремя байтами, каждый из которых отвечает за интенсивность одного из трех составляющих цветов (рис. 1).

В результате смешения цветов из красного (R), зеленого (G) и синего (B) каналов пиксел получает нужный оттенок. Чтобы нагляднее увидеть принцип действия метода LSB, распишем каждый из трех байтов в битовом виде (рис. 2). Младшие разряды (на рисунке они расположены справа) в меньшей степени влияют на итоговое изображение, чем старшие. Из этого можно сделать вывод, что замена одного или двух младших, наименее значащих битов, на другие произвольные биты настолько незначительно исказит оттенок пиксела, что зритель просто не заметит изменения.

Допустим, нам нужно скрыть в данной точке изображения шесть бит: 101100. Для этого разобьем их на три пары (рис. 3) и заместим ими по два младших бита в каждом канале (рис. 4).

В результате мы получим новый оттенок, очень похожий на исходный. Эти цвета трудно различить даже на большой по площади заливке, хотя разница будет заметна по одной отдельной точке (рис. 5). Как показывает практика, замена двух младших битов не воспринимается человеческим глазом. В случае необходимости можно занять и три разряда, что весьма незначительно скажется на качестве картинки.

Рис. 5. Слева — оригинальный цвет, справа — цвет после модификации

Давайте теперь подсчитаем полезный объем такого RGB-контейнера. Занимая два бита из восьми на каждый канал, мы будем иметь возможность спрятать три байта полезной информации на каждые четыре пиксела изображения, что соответствует 25% объема картинки. Таким образом, имея файл изображения размером 200 Кбайт, мы можем скрыть в нем до 50 Кбайт произвольных данных так, что невооруженному глазу эти изменения не будут заметны.

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

Чем же объясняется лидерство метода LSB среди стеганографических алгоритмов? Во-первых, мультимедиаконтейнеры не вызывают подозрений: можно без проблем отправить другу свою фотографию или симпатичный пейзаж. Во-вторых, младшие биты оцифрованных изображений, звука или видео могут иметь различное распределение в зависимости от применявшихся параметров аналого-цифрового преобразования, от дополнительной компьютерной обработки и от прочих факторов. Эта особенность делает метод наименее значащих битов наиболее защищенным от обнаружения вложения. Наконец, в-третьих, реализации LSB для большинства стандартов файлов-контейнеров не требуют значительных затрат времени и сил - идея указанного метода проста, как все гениальное.

Обнаружение стеганограмм

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

Повышение надежности сокрытия данных и пресечение такового

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

Затем нужно приблизить статистические свойства сообщения к тому, что аналитик рассчитывает найти в неискаженном файле-контейнере. Если вы собираетесь использовать текстовые поля комментариев для передачи бинарных данных, то имеет смысл применить кодирование Base64 или аналогичное, чтобы двоичная последовательность была записана символьными знаками. Это хотя и не обманет профессионала, но позволит обойти некоторые программные фильтры.

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

Относительно использования метода LSB можно дать еще несколько простых советов, которые позволят вам обойти стеганографический контроль:

Не следует использовать для хранения сообщения более трех битов каждого байта контейнера, а лучше ограничиться двумя, разбив большое сообщение на несколько мелких или подобрав более емкий файл-носитель. Кроме того, не стоит забивать контейнер пользовательскими данными «под завязку» - чем меньше будет доля важной информации в общем объеме передаваемого файла, тем сложнее обнаружить факт закладки. На практике обычно рекомендуют скрывать сообщения так, чтобы их размер составлял не более 10% размера контейнера;

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

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

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

Примеры применения стеганографии

тобы теория стеганографии не показалась вам умозрительной, не имеющей никакого отношения к практике, приведем пример ее применения. Для демонстрации мы использовали одну из десятков бесплатных и условно-бесплатных программ, предоставляющих сервис стеганографического сокрытия информации и доступных для загрузки в Интернет. В качестве контейнера, согласно описанным выше правилам, была выбрана фотография в формате BMP 24-bit размером около 1 Мбайт, подобранная в личном фотоальбоме автора этой статьи по принципу отсутствия крупных однотонных заливок и наличия мелких деталей. Сообщением послужил случайный бинарный файл (некая динамическая библиотека) размером чуть более 100 Кбайт, что составило как раз примерно 10% от размера контейнера. Перед тем как вложение было упаковано в файл изображения, оно было автоматически зашифровано при помощи указанной программы с использованием алгоритма Blowfish. Итак, все требования безопасности соблюдены, и две картинки, в одной из которых десятая часть информации замещена произвольными данными, практически неразличимы - убедитесь сами (рис. 6).

Рис. 6. Справа — исходное изображение; слева — изображение с вложением

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

Вместо заключения

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