Стеганография изображения методом Patchwork

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 12:46, 1 июня 2017.
Open book.svg Авторство
Е.А. Чуланов
Согласовано: 2011

Техническое задание

Назначение и условия

Назначение - назначением данного программного продукта является запись случайного стего методом patchwork в контейнер в виде файла управляемого объема.

Условия применения - данный программный продукт функционирует на одном ПК с ОС семейства Windows. Система состоит из следующих компонентов:

  • Модуль внесения данных в изображение
  • Модуль получения данных из изображения
  • Модуль внесения и получения данных реализованы в среде MathCAD 14.

Требования к техническим средствам

MathCAD 14, требует:

  • Pentium-совместимый 32-битный (x86) или 64-битный (x86-64, EM64T) процессор - 400 МГц или выше; рекомендуется 700+ МГц.
  • 256 МБ RAM; рекомендуется 512 MБ или более.
  • 550 МБ дискового пространства (250 МБ для Mathcad, 100 МБ для системных компонентов, и 200 МБ для временных файлов во время установки).

Требования к программному обеспечению

Требуется установленный программный продукт MathCAD 14, а так же сопутствующее программное обеспечение:

  • Windows XP Home или Professional, Windows XP Professional x64, или Windows Vista; рекомендуется Windows XP SP3, XP-x64 SP2, или Vista.
  • Windows Installer 3.0 или старше.
  • Microsoft .NET Framework® 3.5 или старше
  • MSXML 4.0 SP2 Parser and SDK
  • Microsoft Data Access Components (MDAC) 2.8 или старше
  • Internet Explorer 5.0 или старше.
  • Adobe Reader 5.0 или старше.

Описание задачи и ее решения

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

Восстановить стего по известному ключу.

Сокрытие и извлечение информации в/из контейнера JPG – программа позволяет определить количество возможной скрытой информации в контейнере и позволяет подобрать оптимальное ее количество, а так же произвести ее извлечение из контейнера. Алгоритм ограничен тем, что для каждого бита шифруемой информации берется 10 тыс пар пикселов изображения.

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

Входные и выходные данные

Входные данные

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

Выходные данные

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

Руководство пользователя

Задача

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

Теоритическая часть.

В основе данной реализации алгоритма Patchwork лежит статистический подход. Patchwork внедряет в исходное изображение определенную статистику, которая имеет гауссовское распределение. Вначале псевдослучайным образом на основе ключа выбираются два пикселя изображения (А и В). Затем значение яркости синей цветовой компоненты одного из них увеличивается на значение , а значение яркости синей цветовой компоненты другого – уменьшается на δ. Далее этот процесс повторяется n = 10000 раз.

  Исходные файлы:

  • rndpicture.xmcd здесь содержится исполняемый код для создания контейнера на основе функции rnd().
  • stego_Outbox.xmcd здесь содержится исполняемый код для сокрытия информации в контейнере.
  • stego_inbox.xmcd здесь содержится исполняемый код извлечения сокрытой информации.
  • information_to_stego.txt в этот файл мы вносим информации которую необходимо сокрыть (я решил взять обычную матрицу).
  • information_stego_result.txt в этот файл записывается результат изъятия из контейнера информации.
  • key_stego.txt в этот файл stego_Outbox.xmcd сохраняет ключ для распознавания сокрытой информации.
  • rndpic.jpg это наше случайно получение изображение
  • rndpic_result_stego.jpg это изображение получение после сокрытия в него стего.

Код во всех исполняемых файлах подробно комментировал.

Инструкция:

Для сокрытия информации необходимо:

  • Открыть information_to_stego.txt внести в него необходимую информацию.
  • Открыть rndpicture.xmcd создать случайную картинку нужного размера, по завершению программа создает файл rndpic.jpg
  • Открыть stego_Outbox.xmcd занести необходимую информацию в контейнер, по завершению программа создает файл rndpic_result_stego.jpg и key_stego.txt
  • Открыть stego_inbox.xmcd из полученного контейнера с информацией rndpic_result_stego.jpg программа сама извлекает полученную информацию и создает файл information_stego_result.txt

Выводы:

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

Cоздание контейнера.

Cоздадим изображение(контейнер) управляемого объема. Определяем размер стороны случайного контейнера storona2:=1023 storona3:=779 Записываем функцию,содержащую реализацию случайного сигнала,полученную с помощью функции rnd(.)
Sf1.PNG
Теперь создадим матрицы, размером storona*storona, которые будут содержать случайные значения интенсивности для каждого из цветов RGB R:=f(storona3,storona2) G:=f(storona3,storona2) B:=f(storona3,storona2) RGB:=augment(R,G,B)


U3.png



U4.png

Cохраним полученое изображение для сокрытия в нем стего WRITERGB("rndpic.jpg"):=RGB

Занесение стегосообщения в контейнер.

V:=READRGB("rndpic_result_stego.jpg") //Переносим контейнер в mathcad Повторно делим наш контейнер на цвета, отдельно извлекаем из него 3 компаненты: синию, красную, зеленую

Inb1.png shirina:=rows(M) dlina:=cols(M)

shirina=780

Inb2.PNG

Считываем ключ Key:=READPRN("key_stego.txt")

Inb3-2.PNG

Inb4.png

Находим количество блоков N_block:=n_dlin*n_shir

Inb5.png

Псевдослучайные числа используещуеся для генерации выбора бит, потом результаты нормировки i:=0..n_dlin - 1 l:=0..dlin_blok - 1

Inb6-2.PNG

j:=0..n_shir - 1 k:=0..shir_blok - 1

Inb7-2.png

Разбиваем на блоки, для работы.

Inb8-2.png



H3.png


Извлечение стегосообщения из контейнера.

Переносим контейнер в mathcad

V:=READRGB("rndpic.jpg")

Out1.png

Унаем длинну и ширину нашего контейнера

shirina:=rows(M) dlina:=cols(M)

shirina:=780

Узнаем максимально возможное число блоков:

Out2.png

Макс = 39 бит стего, для каждого бита необходимо минимум 10000 пар битов, в которых мы будем менять яркость.

Max=39.936

n_dlin:=8 nshir:=4 N_blok:=n_dlin*n_shir

Out3.png

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

Out4.png

i:=0..n_dlin - 1 l:=0..dlin_blok - 1

Inb6-2.PNG

j:=0..n_shir - 1 k:=0..shir_blok - 1

Inb7-2.png

Разбиваем на блоки, для работы.

Inb8-2.png

Out5.png


X3-1.png


V2:=augment(Rc_work,Gc_work,M2)

Полученую картинку со стего сохраняем в файл

WRITERGB("rndpic_result_stego.jpg"):=V2

Out6.png

q:=10 t:=4

Out7.png

Находим ключ

Out8.PNG

Результат ключа

Inb3-2.PNG

Записываем ключ в файл

WRITERN("key_stego.txt"):=Key

Изображения

Стегосообщения