Как стать автором
Обновить

Цифровые водяные знаки. Стеганография

После прочтения книжки Уильма Гибсона «Распознавание образов» решил подробнее узнать о предмете. В статье будут рассмотрены некоторые основные понятия, а также описаны несколько простых алгоритмов.

Основные понятия


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

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

Цифровые водяные знаки (ЦВЗ) — это специальные невидимы изменения в изображения, в которых может быть скрыта различная информация (чаще всего данные о авторе).

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

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

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

Алгоритмы и методы



Алгоритмы скрытия данных в изображениях делятся на две основные категории: непосредственной замены и спектральные. Первые проще, вторые надежней.

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

Рассмотрим примеры алгоритмов непосредственной замены…

(Далее подразумеваем изображение в формате RGB, каждая компонента которого представлена 1 байтом)

Алгоритм LSB (Least Significant Bit), Метод замены наименее значимого бита:

Известно, что человек воспринимает не всю информацию, заложенную в изображении и если заменить у цветовых компонент пикселя менее значащие биты на биты скрываемого сообщения то выявить человек этого на глаз не сможет. Производя последовательно подобную замену начиная с заранее оговоренного пикселя мы можем внедрить сообщение. Идея метода проста, однако в подобной тривиальной форме он крайне не эффективен. Недостатки: изменения изображения приводят к практически полной потери данных, факт внедрения легко обнаружить. Достоинства: большой объем встраиваемых данных (в идеале до 3/8 от размера изображения-контейнера), простота реализации. Рассмотрим возможные улучшения:
  • Использования вместо всех трех компонент пикселя только одну (желательно синию т.к человеческий глаз менее всего воспринимает именно этот цвет)
  • Использование специальных последовательностей битов для обозначения первого пикселя с которого начнется внедрение сообщения
  • Использовать для внедрения не каждый последующий пиксель, а, например, каждый 3-й начиная с первого.
  • Использовать для внедрения сообщения пиксели по заранее известной функции(правилу) начиная с первого (при этом порядок следования битов в сообщении может не совпадать с порядком следования пикселей изображения-контейнера, в который вшит бит), например: 2-бит сообщения внедряем в седьмой пиксель (относительно первого), 3-бит в пятый пиксель и.т.д
  • Представление номера пекселя для внедрения бита, как функцию(правило), зависящей от номера первого пикселя (относительно начала изображения)
  • Дублирование сообщения, помещенного в изображение-контейнер, для лучшей сохранности при изменении изображения.
  • Использование самокорректирующий кодов(код Хемминга)


Алгоритм блочного скрытия:

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

Метод квантования изображения:

Для этого рассмотрим функцию (например модуль) от разности двух пикселей(под значением пикселя можно понимать как значение одной из его компонент, например синей, так и значение его яркости т.е r*R+g*G+b*B, где r,g,b — некие константы, в общем случаи значение пикселя это некая функция, зависящая от его цветовых компонент т.е func(R,G,B) ), важно чтобы это функция была эта была целочисленная. Тогда каждому значению данной функции (в нашем случаи функция модуля от разности компонент принимает значения от 0 до 255) ставим в соответствие 0 или 1. Теперь вычисляем нашу функцию от пар пикселей, и смотрим чему соответствует это значение по нашей таблице (0 или 1). Если полученное значение не соответствует биту сообщения, который мы хотим внедрить то изменяем пиксели таким образом, чтобы получить требуемое нами значение.

Алгоритм Коха и Жао. Метод относительной замены величин коэффициентов ДКП (ДКП — Дискретное косинусное преобразование):

Этот алгоритм относится методам замены в частотной области. Изображение-контейнер разбивается на блоки 8x8. К каждому блоку применяется ДКП. В результате получаем блоки 8х8 с коэффициентами. Каждый блок будет содержать один бит встраиваемой информации. Для этого заранее договариваемся о двух коэффициентах в полученных матрицах, будем обозначать их K1 и K2. (Желательно, что бы эти коэффициенты относились к средним частотам, зрительная система человека реагирует на них изменение меньше всего).
Для помещения бита сообщения будем использовать:

ABS(K1)-ABS(K2) > P , для передачи 0
ABS(K1)-ABS(K2) < -P , для передачи 1


где P — некоторая положительная константа (чем P больше, тем система устойчивее к сжатию, но качество изображения падает).

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

Пока все

Надеюсь эта информация была кому то полезна.

Литература:

  1. Компьютерная стеганография. Теория и практика. Г.Ф Коханович — примеры алгоритмов были взяты из неё. Книга содержит теорию и примеры реализации алгоритмов на MathCad.
  2. http://ru.wikipedia.org/wiki/Стеганография
  3. http://ru.wikipedia.org/wiki/Цифровой_водяной_знак
  4. http://stegano.net/
  5. http://www.eff.org/press/archives/2005/10/16
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.