Метод Куттера-Джордана-Боссена
Куттер (М. Kutter), Джордан (F. Jordan) и Боссен (F. Bossen) [83] предложили алгоритм встраивания в канал синего цвета изображения, имеющего RGB-кодирование, поскольку к синему цвету ЗСЧ является наименее чувствительной. Рассмотрим алгоритм передачи одного бита секретной информации в предложенном методе.
Пусть Mi — бит, который подлежит встраиванию, — изображение-контейнер, p=(x,y) псевдослучайный пиксель контейнера, в который будет выполняться встраивание.
Секретный бит Mi встраивается в канал синего цвета путем модификации яркости
(5.5)
где и — константа, определяющая энергию встраиваемого сигнала. Eе величина зависит от назначения стеганосистемы. Чем больше , тем выше устойчивость встроенной информации к искажениям, однако и тем сильнее ее заметность.
Получатель извлекает бит, не имея первичного изображения, то есть, "вслепую". Для этого выполняется предсказание значения первичного, не модифицированного пикселя на основе значений соседних пикселей. Для получения оценки пикселя предложено использовать значение нескольких пикселей, размещенных в том же столбце и в той же строке массива графического контейнера. Авторы использовали "крест" пикселей размером 7x7. Оценка получается в виде
(5.6)
где — количество пикселей сверху (снизу, слева, справа) от оцениваемого пикселя (в случае креста 7x7 =3).
При извлечении встроенного бита вычисляется разница между текущим ( ) и прогнозируемым ( ) значениями интенсивности пикселя р= (х,у):
(5.7)
Знак будет означать встроенный бит: если , то Mi = 0; еслн , то Мi= 1.
Функции встраивания и извлечения в данном методе не симметричны, то есть, функция извлечения не является обратной функцией встраивания. Хотя, как указывают авторы метода, правильное распознание бита сообщения в случае применения описанных выше процедур является высоковероятным, однако не стопроцентным. Для уменьшения вероятности ошибок извлечения было предложено в процессе встраивания каждый бит повторять несколько раз (многократное встраивание). Поскольку при этом каждый бит был повторен раз, то получается оценок одного бита сообщения. Секретный бит извлекается по результатам усреднения разницы между реальным и оцененным значениями интенсивности пикселя в полученном контейнере:
(5.8)
Как и в предыдущем случае, знак усредннной разницы будет определять значение встроенного бита. В работе [83] показано, что алгоритм устойчив ко многим известным видам атак: НЧ фильтрации изображения, его компрессии в соответствии с алгоритмом JPEG, обрезанию краев.
Предлагается следующая реализация данного метода.
Шаг 1
Исходные данные — стандартные.
Шаг 2
Массив яркости получается с помощью функции RЕАDВМР("имя_файла"), возвращающей массив, который представляет изображение BMP-формата в яркостном формате (градациях серого): := READBMP("C.bmp").
Шаг 3
Алгоритм встраивания реализуется программным модулем (М.32). При этом вычисление псевдослучайных координат пикселя, в который будет встраиваться бит сообщения, выполняется по алгоритму, описанному в подпункте 5.3.2.3 для метода псевдослучайной перестановки.Предварительно задается параметр о, который определяет энергию встраиваемого сигнала, а также количество повторений встраивания одного и того же бита — . Установлено, что результат встраивания визуально незаметен при значениях и . Однако в этом случае для уменьшения ошибок при извлечении приходится значительно повышать количество повторных скрытий текущего бита ( >35), что также негативно отражается на статистике изображения. Оптимальным, на наш взгляд, является значение и и <20, но, опять же, все зависит от характеристик изображения, которое было выбрано в качестве контейнера.Вычисление индекса элемента двоичного вектора сообщения по формуле ceil(i/ ) позволяет один и тот же бит скрыть ровно раз, после чего будет встраиваться следующий бит сообщения и т.д.
После модификации интенсивности пикселя, определенного координатами (х,у), выполняется коррекция значения результирующей интенсивности. Иначе, при начальном значении интенсивности цвета пикселя, например, 255, внесение бита сообщения "1" приведет не к возрастанию значения интенсивности, а, наоборот, — к его уменьшению в сторону темных оттенков. В другом случае, при очень низких начальных значениях интенсивности, в частности 0, внесение бита "0" может привести к получению отрицательного значения, которое будет восприниматься как значение интенсивности, близкое к 255.
Шаг 4
Перед извлечением сообщения должны быть известны:
• параметры контейнера;
• первичный ключ Ко*;
• количество циклов вычисления координат (х,у) *;
• количество дублирующих встраиваний одного бита *;
• размерность (конфигурация) креста — количество пикселей сверху (снизу, слева, справа) от оцениваемого пикселя — рис. 5.16.
Рис. 5.16. Примеры оцениваемых пикселей и оценивающих конфигураций ("крестов")
Модуль извлечения скрытого сообщения (М.33) содержит в себе блок вычисления псевдослучайных координат (х,у), идентичный соответствующему блоку в модуле встраивания (М.32).
Далее следуют блоки выполнения условий, которые в совокупности позволяют учесть проблемные случаи, когда оцениваемый пиксель находится слишком близко к краю (краям) изображения и построить полноценный "крест" из окружающих пикселей не представляется возможным (см. рис. 5.16).
В модуле (М.ЗЗ) предварительно проводится генерирование псевдослучайных индексов (х,у), определяющих элемент массива В* (пиксель), вокруг которого будет проводиться оценка близлежащих пикселей. По результатам генерирования данных индексов вычисляется количество пикселей сверху и снизу, слева и справа от оцениваемого. В дальнейшем производится вычисление оценки первичного значения оцениваемого пикселя (формула (5.6)). Полученный результат заносится в t-й элемент массива B*^. Оцениваемое значение пикселя сохраняется в буферном массиве (заглавная бета).
Если , то продолжается накопление оценок пикселей, в которые был встроек один и тот же бит сообщения. В случае итоги предыдущей оценки обобщаются: вычисляется усредненная разница S между первичными и оцененными значениями интенсивностей пикселей, выступивших контейнерами для одного бита встраиваемых данных. В зависимости от знака полученной разницы, j-му элементу вектора двоичных данных (индекс элемента определяется по результату вычисления функции сеil(i/ *)) присваивается значение 0 или 1. Переменная t сбрасывается в 1. Начинается сбор оценок значений интенсивности пикселей, в которые был встроен следующий бит сообщения.
Процесс повторяется до тех пор, пока не будут проанализированы все элементы графического массива.Результаты вычисления визуального искажения контейнера сведены в табл. 5.1 (стр. 125).