среда, 5 сентября 2012 г.

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

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

·         дописывание данных скрываемой информации в конец файла  - ну, это вообще классика жанра, 90 % всех программ для стеганографии используют этот метод.
·         скрытие информации в косвенных данных файла для скрытия зашифрованной информации как правило используется поле комментария в  exif заголовке;
·         скрытие информации с использованием таблиц квантования - собственно именно этот метод ближе всего к настоящей стеганографии и о нем мы будем говорить в этой статье;
·         скрытие информации между блоками данных файла.
Существует не так много стеганографических программ, которые действительно работают с JPG, хотя в настоящее время это наиболее широко используемый формат для хранения изображений.  Несмотря на то, что многие программы декларируют реализацию JPG стеганографии, на самом деле они используют, как правило, добавление данных в конец файла, или скрывают данные в поле «комментарий» заголовка файла. Реальная JPG стеганография подразумевает смешивание скрытой информации сообщения с фактической информацией пикселей.  Для работы они обычно используют библиотеку Independent JPEG Group S '(IJG), которая является наиболее мощной на сегодняшний день.
Отметим, что многие из методов считаются нестойкими, то есть стегоаналитик с использованием статистических критериев может выявить факт сокрытия информации.
Несмотря на это, программы для стеганографии в JPEG-файлах обеспечивают достаточно высокую степенью защищённости от стегоанализа, так как возможность варьирования качества сжатого изображения в широком диапазоне не позволяет легко установить, являются ли возникающие в результате сжатия погрешности следствием скрытия данных или следствием использования высоких коэффициентов квантования.


Программы для стеганографии в  JPEG
Сейчас наиболее распространены четыре программы стеганографии, работающие под управлением Windows:
  • F5 , который был разработан в рамках исследований, специализирующихся на стеганографии. Вероятно, одна из самых передовых программ, находящихся в публичном доступе. Программа использует различные методы, чтобы компенсировать изменения статистических характеристик контейнера при внесении изменений, что затрудняет статистический анализ.  Доступны исходные коды на языке программирования Java.
  • JPHide / JPSeek / JPHSWin  - существует начиная с 1999 года, исходный код доступен. Программа использует Blowfish, как генератор псевдо-случайных чисел.
  • JSteg – одна  из первых программ для  сокрытия данных в формате JPEG. Программа не поддерживает шифрование скрываемых данных.  Графический интерфейс, который называется JStegShell, был написан позднее и добавляет несколько дополнительных возможностей, такие как возможность шифрования. Исходные коды доступны.
  • StegHide новый относительно свежая программа с открытым исходным кодом, поддерживаемая разработчиками 

Принцип работы стеганографии (на примере программы JSteg).
Для демонстрации работы стеганографического алгоритма рассмотрим подробнее программу JSteg. Она была создана, на базе IJG библиотеки, путем добавления к ней новой опции ("-steg имя файла"), исполняемому файлу. Да, забыл сказать, программа эта консольная и сейчас считается устаревшей, поскольку она не использует шифрования. Если использовать консоль по какой то причине для Вас трудно, используете JStegShell. Это GUI для JSteg удобный и простой в использовании. Однако, чтобы понять принципы стеганографии в JPEG она отлично подойдет. Давайте уже посмотрим, как можно извлекать скрытые данные из формата JPG.
Сначала программа JSteg преобразует скрываемый файл в байтовую последовательность очень простым способом. Он добавляет имя скрываемого файла (если вы выбрали эту опцию) в начало. Затем, после имени скрытого файла, он добавляет байт с длиной названия файла. И, наконец, в конце в качестве подписи, добавляется строка korejwa (имя автора).
Хотя JSteg использует весь комплекс соглашений формата JPG, он выполняет стеганографию очень простым способом, используя для сокрытия данных DCT коэффициенты.  По умолчанию, DCT коэффициенты, которые равны нулю или единице, не изменяются. Остальные могут быть использованы для встраивания в них одного бита скрытой информации, путем перезаписи с использованием алгоритма замены наименее значащего бита (LSB). Скрываемая информации имеет следующий формат (взято из файла README, и немного упрощенно):
A
BBB … B
CCCCCCCCCCCCCCCCCC. . .

где область:
·         А – длиной в 5 бит. Он выражает длину (в битах) поля B;
·         B – некоторое количество бит, определенное значением, содержащимся в области А. Количество битов может варьироваться в диапазоне от 0 до 31. Он выражает длину (в байтах) скрываемого сообщения;
·         С – содержит само скрываемое сообщение.
Таким образом, для работы со скрытом сообщением необходимо извлечь из первых пяти коэффициентов DCT младшие биты, чтобы получить размер размер (поле "А" ), затем получить из следующего бита имеют размер скрытых данных (поле "B" ). После этого, возможно извлечение скрытых данных (поля "С" ), и реконструкции байт из извлеченных бит.
Для анализа работы программы JSteg скроем информацию в изображении обложки  "Планета историй", сборника научно фантастических рассказов. Это небольшое JPEG изображение, размером 15 Kb. На рисунке приведены изображения до и после сокрытия информации. Изображение слева не содержит никаких скрытых сообщений. Внутри правого изображения , скрыто стихотворение "If ", Редьярда Киплинга, на английском языке, размером 1,5 Kb:

Исходное изображение
16778 байт
Изображение со скрытым текстом
17344 байт
стеганография программа jpeg
стеганография программа jpeg

Изучим различия между изображениями до и после сокрытия информации. В таблице показаны отличия в квантованных коэффициентах DCT первого левого блока изображения JPEG размером 8x8 пикселей (64 байта). В левом столбце таблицы показано содержимое блока до сокрытия текста, в среднем показан блок после скрытия текста, в правом столбце показаны младшие биты измененного блока. В таблице выделены жирным изменённые программой JSteg байты. Изменение осуществлено с помощью алгоритма LSB. 
Цветом обозначены области формата данных JSteg, описанные выше: красный цвет для поля "А" - первого 5 битного блока, содержащего размер следующего поля размера; зеленый для блока "B", содержащий размер данных, и синий для поля "С", в котором находятся скрытые данные. Важно помнить, что если байт равен 0 или 1, он не принимаются во внимание.
.
Исходное изображение
Изображение со скрытым текстом
Квантованные коэффициенты DCT
Квантованные коэффициенты DCT
Младшие биты
квантованных коэффициентов DCT
D6 69 13 05 03 15 F2 EB
FF 04 01 00 FA FB F9 FF
06 02 FE FF 00 00 00 FF
01 03 02 01 01 FF 00 00
01 00 00 00 00 00 00 00
00 FF FF 00 00 00 00 00
00 00 00 00 00 01 00 00
 00 00 00 00 00 00 00 00
D6 69 12 05 03 15 F3 ЕА
FE 04 01 00 FA FB F8 FE
06 03  FE FF 00 00 00 FE
01 02  03 01 01 FE 00 00
01 00 00 00 00 00 00 00
00 FE FF 00 00 00 00 00
00 00 00 00 00 01 00 00
00 00 00 00 00 00 00 00
00 01 00 01 01 01 01 00
00 00 01 00 00 01 00 00
00 01 01 00 00 00 00 00
01 00 01 01 01 00 00 01
00 00 00 00 00 00 00 00
00 00 01 00 00 00 00 00
00 00 00 00 00 01 00 00
00 00 00 00 00 00 00 00

Далее декодируем приведенный в таблице первый блок размером 8x8 вручную, чтобы понять, как работает алгоритм сокрытия данных. В результате:
Поле А: всегда содержит 5 бит для декодирования. Из таблицы 5 видно , что это число равное 00 01 00 01 01 или 01011 в двоичной системе счисления или 11 в десятичной системе счисления. Это размер следующего поля, содержащего размер скрытых данных.
Поле В: 11 бит для декодирования: 01 01 00 00 00 00 01 00 00 00 01 или 11000010001 в двоичной или 1553 в десятичной системе. Это точный размер скрываемого стихотворения.
Поле C: 1553 x 8 бит для декодирования, начиная с: 00 01 00 00 01 00 00 01 или 01001001 в двоичном или 73 в десятичной системе, что в соответствии с таблицей ASCII является буквой «I» в верхнем регистре, и соответствует первой букве скрытого стихотворения.


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

3 комментария:

  1. RedJPEG, DarkCryptTC - разработаны еще в 2011 году и реализуют JPEG стеганографию. Есть плагины для Total Commander. ru-steganography.narod.ru

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

      Удалить
  2. Как ни старался, но найти приведенный фрагмент таблицы в данных двух изображениях никак не вышло. Уважаемый автор статьи, не могли бы вы объяснить где именно (с какого по какой байт информации ) располагается данная таблица коэффициентов в приведенных здесь изображениях и после какого маркера их можно найти.

    ОтветитьУдалить