Стеганография в цифровых изображениях

Стеганография в цифровых изображениях

10.11.2020

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

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

Цифровые изображения представляют особый интерес в качестве контейнеров для скрытых сообщений, поскольку они имеют большой объём и не вызывают подозрений при публикации в социальных сетях и пересылке по электронной почте. В JPEG изображение размером в 733 килобайта поместились все 272 страницы пьесы Шекспира «Макбет».

Практическое применение

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

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

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

В 2018 году сотрудник General Electric использовал фотографию заката чтобы украсть 40 файлов Excel и Matlab, содержащих данные, являющиеся коммерческой тайной.

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

Цифровые стего-изображения так же встречаются в известной интернет-головоломке Цикада 3301, одним из основных фокусов которой является стегоанализ.

Пространственные методы

Пространственные методы манипулируют значениями в пространственной области (пикселями). К таким методам относятся:

  • LSB (англ. Least Significant Bit — Наименее значимый бит)
  • PVD (англ. Pixel Value Difference — Разность значений пикселей)
  • GLM (англ. Grey Level Modification — Изменение уровня серого)
  • MPV (англ. Mid Position Value — Значение в средней позиции)

LSB

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

Встраивание

Например, имеется чёрно-белое изображение, представленное в виде матрицы M [ i , j ] {displaystyle M[i,j]} . Значения в этой матрице соответствуют яркостям пикселей, расположенных по координатам ( i , j ) {displaystyle (i,j)} . Пусть эти значения представлены восьмибитными двоичными числами. Пусть скрываемое сообщение имеет размер 2 байта. Для хранения скрытого сообщения возьмём 2 младших бита изображения-контейнера. Тогда для сокрытия 2 байт, то есть 16 бит необходимо изображение размером минимум 8 пикселей. Если изображение содержит больше пикселей, чем необходимо для хранения сообщения, необходимо выбрать правило, по которому будут выбираться пиксели для встраивания данных. Этот закон должен быть заранее известен получателю, так как он будет необходим для извлечения данных. Для сокрытия факта встраивания данных, к неиспользованным пикселям изображения добавляется шум, чтобы шум, вносимый скрытыми данными, не выглядел аномальным. Например, имея изображение размером 4x2 пикселя запишем первые два бита сообщения b = {displaystyle b=} 0001101100011011 в первый пиксель: пусть исходное значение пикселя M [ i , j ] = {displaystyle M[i,j]=} 10100101, заменим младшие два бита на первые два бита сообщения M [ i , j ] = {displaystyle M[i,j]=} 10100100. Следующие два бита записываются в следующий пиксель, и так далее.

Извлечение

Для извлечения скрытых методом LSB данных, необходимо выбрать пиксели, содержащие полезную нагрузку по тому же закону, по которому они выбирались при встраивании. Далее, имея набор пар координат вида ( i , j ) {displaystyle (i,j)} , по очереди, извлекаются наименее значимые биты: M [ i , j ] = {displaystyle M[i,j]=} 10100100. Извлечённые биты данных объединяются, формируя скрытое сообщение.

PVD

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

Встраивание

Исходное изображение разделяется на блоки по 2 пикселя, и скрытые данные кодируются как разность значений внутри этих блоков. Как и в случае с LSB, необходим закон, по которому будут выбираться блоки для встраивания. Для каждого используемого блока вычисляется модуль разности значений пикселей, по которому определяется диапазон допустимых значений. Чем больше перепад яркости внутри блока- тем шире выбранный диапазон. Для удобства работы, ширина диапазона является степенью двух. Тогда, например, в блок с диапазоном шириной 4= 2 2 {displaystyle 2^{2}} можно записать 2 бита скрываемого сообщения (эти два бита, по сути, представляют собой выбор конкретного числа из диапазона). Блоки, изменение которых может привести к выходу за пределы допустимых значений яркости пикселей (от 0 до 255) не используются.

Извлечение

Для извлечения данных, изображение вновь делится на блоки по 2 пикселя. В соответствии с заранее известными правилом выбора блоков и последовательностью их обхода, для блоков рассчитывается разность значений пикселей и определяется диапазон, в который она попадает. Далее выполняется проверка на выход за пределы диапазона от 0 до 255: если при максимальной разности, входящий в диапазон, один из пикселей принимает значение больше 255 или меньше 0, то данный блок пропускается, так как он был отброшен аналогичной проверкой на стадии встраивания. Из оставшихся блоков извлекаются данные: по ширине диапазона определяется количество бит, встроенных в блок, которые потом извлекаются, начиная с наименее значимого. В общем же случае, когда ширина диапазона не является степенью 2, полезная нагрузка вычисляется как b = | g i − g i + 1 | − l k {displaystyle b=|g_{i}-g_{i+1}|-l_{k}} , где b {displaystyle b} — извлекаемые данные, g i , g i + 1 {displaystyle g_{i},g_{i+1}} - значения пикселей блока, l k {displaystyle l_{k}} - нижняя граница диапазона.

GLM

Метод GLM заключается в изменении чётности значения яркости изображения в чёрно-белом представлении. В каждый пиксель изображения встраивается 1 бит скрываемого сообщения.

Встраивание

В начале значения яркости всех пикселей делаются чётными, путём изменения всех нечётных значений на 1. Далее чётность этих значений сравнивается с чётностью битов данных. Например, если первый бит данных чётный (то есть равен 0), то первый пиксель не изменяется, если же он нечётный (равен 1), то значение яркости изменяется на нечётное.

Извлечение

Для каждого пикселя, содержащего скрытое сообщение, определяется значение яркости. Если оно чётное- то соответствующий бит сообщения равен 0, если нечётное — то 1.

MPV

В данном методе к изображению-контейнеру сначала применяется преобразование Арнольда, затем для каждого пикселя вычисляется его позиция p ( i , j ) = ( i − 1 ) m + j {displaystyle p(i,j)=(i-1)m+j} . Для каждого p ( i , j ) {displaystyle p(i,j)} оценивается количество знаков t o t a l _ d i g i t s {displaystyle total_digits} и положение среднего знака m i d _ p o s i t i o n = ( t o t a l _ d i g i t s 2 ) + 1 {displaystyle mid_position=({frac {total_digits}{2}})+1} . Далее берётся число m i d _ v a l u e {displaystyle mid_value} из позиции m i d _ p o s i t i o n {displaystyle mid_position} в p ( i , j ) {displaystyle p(i,j)} и вычисляется ключ k e y 1 = p ( i , j ) m i d _ v a l u e {displaystyle key1=p(i,j)^{mid_value}} . Если это число превышает количество пикселей изображения, то берётся его остаток от деления на количество пикселей k e y 1 = k e y 1 mod T {displaystyle key1=key1mod T} . Далее берётся десятичное значение 4 _ b i t _ d e c {displaystyle 4_bit_dec} последних 4 бит пикселя номер p ( i , j ) {displaystyle p(i,j)} и вычисляется k e y 2 = ( k e y 1 mod ( 4 _ b i t _ d e c ) ) + 1 {displaystyle key2=(key1mod (4_bit_dec))+1} . В p ( i , j ) {displaystyle p(i,j)} -й пиксель встраивается 2 бита данных по правилу: если k e y 2 {displaystyle key2} -чётное, то применяется прямое встраивание, если нечётное- то обратное. Если k e y 1 {displaystyle key1} - чётное то встраиваются два бита сообщения, нечётное- встраиваются комплементарные 2 бита. К полученному изображению применяется обратное преобразование Арнольда.

Частотные методы

Частотные методы работают с коэффициентами в частотной области. К ним относятся:

  • DCT (англ. Discrete Cosine Transform — Дискретное косинусное преобразование)
  • DWT (англ. Discrete Wavelet Transform — Дискретное вейвлет-преобразование)

DCT

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

Встраивание

Исходное изображение-контейнер разделяется на блоки O i {displaystyle O_{i}} по 8x8 пикселей, к которым применяется DCT: F i [ a , b ] = D C T ( O i [ a , b ] ) {displaystyle F_{i}[a,b]=DCT(O_{i}[a,b])} . Из каждого коэффициента матрицы F i {displaystyle F_{i}} выделяются наименее значимые биты и заменяются на биты скрываемого сообщения.

Извлечение

Изображение-контейнер разделяется на блоки O i {displaystyle O_{i}} по 8x8 пикселей, к которым применяется DCT: F i [ a , b ] = D C T ( O i [ a , b ] ) {displaystyle F_{i}[a,b]=DCT(O_{i}[a,b])} . Из каждого коэффициента матрицы F i {displaystyle F_{i}} выделяются наименее значимые биты и объединяются, восстанавливая скрытое сообщение.

DWT

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