Три вида теста на стего

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

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

Публикация в целях удобства просмотра разделена на три файла для программы MathCAD.

Зависимость плотности вероятности

Первый файл (папка «добавление-извлечение стего») просто реализует сам алгоритм LSB и представляет интерес лишь, как доказательство корректности реализации. Для теста необходимо взять файл с изображением, назвать его input.bmp, взять файл с текстом стеганограммы, назвать его input.txt, поместить их в папку с файлом маткада и запустить этот файл. Результатом будут два файла: output.bmp и output.txt, содержащих соответственно картинку с внедренным стего и извлеченное стего. Совпадение внедренного и извлеченного стего доказывает корректность реализации алгоритма.

Второй файл (папка «Тест максимальной плотности стего») позволяет наглядно продемонстрировать, как влияет количество внедренной информации на качество изображения. В это папке есть подпапки, в которых можно ознакомиться с примерами внедрения. Для использования необходим просто файл с картинкой, названный input.bmp. После запуска маткад-файла, будет сгенерировано 9 файлов с именами от 0.bmp до 8.bmp. Цифра в названии показывает, сколько бит из байта задействовано в сокрытии стего. (0 - нет стего, 8 - весь файл – стегосообщене). В примерах видно, что при количестве бит 1 и 2 невооруженным глазом невозможно отличить оригинал от изображение со стего. При 3-х битах разница видна, но при отсутствие оригинала не бросается в глаза.

Третий файл (папка «Влияние шума») позволяет продемонстрировать как влияет гауссовский шум на стегосообщение. Так же как и для первого файла, необходимо изображение (input.bmp) и текст (input.txt), результатом работы будут так же два файла (output.bmp и output.txt). Сравнив текстовые файлы можно оценить влияние шума. (ВНИМАНИЕ! Так как при сильном шуме возможно повреждение признака конца стего, выходное сообщение может содержать такс произвольной длинны). Так же можно непосредственно в маткаде понаблюдать за сохранностью байтов (в файле предусмотрен вывод в виде байтов прочитанного и записанного стего).

Примечания: известно, что, например, с вероятностью 0.997 величина попадает в отрезок +-3 величины сигма (правило дисперсии). Так что выбрав сигму равной 0.5/3 можно гарантировать передачу каждого байта (правильную передачу, при глубине стего = 1) с вероятностью 0.997^8=0.97625. Так же, проинтегрировав плотность вероятности на интервале -0.5; +0.5, можно получить следующую зависимость:

Здесь видно, что при значении сигма около 0.2, почти всегда бит передан правильно, однако уже при значении сигма 0.5, вероятность передачи правильно одного бита падает до примерно 0.3

В папке «Дополнительные исходные материалы» находятся несколько образцов фотографий, на которых проводились исследования.

Добавление-извлечение стего

Задание:

  • В произвольно выбранном контейнере в виде файла управляемого объема записать

произвольно выбранное стего методом LSB. (см. конспект и материалы кафедральной энциклопедии)

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

Исходные данные: произвольное изображение в файле input.bmp и произвольное стегосообщение в файле input.txt

Выходные данные: изображение с внедренным стего в файле output.bmp и извлеченное стегоосообщение в файле output.txt

Результат: при одинаковом ключе, извлеченное сообщение совпадает с сокрытм. При разных - не совпадает, что вполне ожидаемо.

Дополнительные функции:
1.Получение бита:

TestSt (1).png



2.Запись бита:

TestSt (2).png


Эти две функции позволяют прочитать и записать бит в число на произвольном месте.


3.Разбиение байтов на биты:

Эта функция разбивает массив байтов на массив битов (в 8 раз длинне), а так же добавляет в конец стоп-сигнал (байт 11111111).

TestSt (4).png



4.Сбор битов в байт::

Эта функция превращает набор из 8 битов в байт

TestSt (3).png


5.Ключевой сдвиг стего:
5а.Функция кодирования (фактически реализует циклический сдвиг вправо:

TestSt (5).png



5б.Функции декодирования (фактически реализует циклический сдвиг влево):

TestSt (6).png


6.Вставка стего:
Функция добавления стегосообщения к изображению. Имеет 4 параметра: Само изображение (в виде массива байтов), сообщение (в виде массива байтов), ключ стего (целое число), глубина стего (сколько бит в каждом байте будет отведено под скрытое сообщение). Функция работает следующим образом: сначала сообщение превращается из набора байтов, в набор битов, к нему дописывается признак конца(255). Затем происходит циклический сдвиг внутри каждых 8 бит, а затем происходит запись стегоинформации в изображение.

TestSt (7).png



7.Извлечение стего:

Функция извлечения стегосообщения из изображения. Имеет 3 параметра: Само изображение (в виде массива байтов), ключ стего (целое число), глубина стего (сколько байт каждого бита извлекать). Функция работает следующим образом: сначала во временную переменную извлекается 8 битов, затем они декодируются (сдвигаются) и затем из них формируется байт стегосообщения и пишется в выходной массив, так делается до тех пор, пока не будет встречен признак конца сообщения (255).

TestSt (8).png




Здесь программа, демонстрирующая запись и извлечение стегосообщения:

Параметры записи/чтения: key_w:=5 //Ключ записи key_r:=5 //Ключ чтения key_q:=2 //Глубина чтения/записи Сама программа: Img:=READRGB("input.bmp") Txt:=READBIN("input.txt","byte") Stego_img:=InsertStego(Img,Txt,key_w,q) WRITERGB("output.bmp"):=Stego_ing //Стего записано,в файле output.bmp находиться изображение со скрытым сообщением Img_2:=READRGB("output.bmp) Data:=ExtractStego(Img_2,key_r,q) WRITEBIN("output.txt","byte,0):=Data //Стего прочитано,в файле output.txt находится скрытое сообщение,которое было прочитано из изображения



Это записанные и прочитанные данные в виде байт

TestSt (10).png


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

Тест максимальной плотности стего

Задание: Оценить максимально возможное количество информации, которое может быть записано в изображение и не может быть визуально обнаружено "на глаз".

Исходные данные: произвольное изображение, с именем файла: input.bmp

Результат: девять изображений с именами: 0.bmp, 1.bmp, ..., 8.bmp; цифра в названии отражает, какое количество бит в байте отведено под стегосообщение.

Выводы: в результате экспериментов было установлено, что 1 и 2 бита на байт не заметны невооруженным взглядом даже при наличии оригинала изображения. 3 бита на байт так же допустимы, хоят при наличии оригинала шумы заметны, но без оригинала внимания не привлекают. Для ознакомления, в папке "Примеры" можно посмотреть на шумы для различных фотогорафий.

Дополнительные функции представлены выше в разделе "Добавление-извлечение стего".

Здесь программа, которая демонстрирует разную плотность(глубину) записи стего (от 0 бит на байт, до 8 бит на байт): Img:=READRGB("input.bmp") n:=0..(rows(Img)*cols(Img) - 1) Test2.PNG

Stego_img_1:=InsertStego(Img,Txt,0,1) Stego_img_2:=InsertStego(Img,Txt,0,2) Stego_img_3:=InsertStego(Img,Txt,0,3) Stego_img_4:=InsertStego(Img,Txt,0,4) Stego_img_5:=InsertStego(Img,Txt,0,5) Stego_img_6:=InsertStego(Img,Txt,0,6) Stego_img_7:=InsertStego(Img,Txt,0,7) Stego_img_8:=InsertStego(Img,Txt,0,8)

Теперь подготовим массив со случайным данными, который будем записывать в изображение: WRITERGB("0.bmp"):= Img WRITERGB("1.bmp"):= Stego_img_1 WRITERGB("2.bmp"):= Stego_img_2 WRITERGB("3.bmp"):= Stego_img_3 WRITERGB("4.bmp"):= Stego_img_4 WRITERGB("5.bmp"):= Stego_img_5 WRITERGB("6.bmp"):= Stego_img_6 WRITERGB("7.bmp"):= Stego_img_7 WRITERGB("8.bmp"):= Stego_img_8


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

входное сообщение input.bmp

Примеры

Влияние шума

Задание:

  • Промоделировать занесение шума в файл, содержащий стегосообщение с

помощью функции rnorm().

  • Качественно оценить влияние Гауссовского шума и параметров нормального

распределения на восстановленное стего.

Исходные данные: произвольное изображение в файле input.bmp и произвольное стегосообщение в файле input.txt

Выходные данные: изображение с внедренным стего в файле output.bmp и извлеченное стегоосообщение в файле output.txt

Результат: взяв шум, величина которого задается нормальным распределнием с параметрами (мю=0, сигма=1) - стандартное, получили, что все стего сообщение было потеряно. Варьируя параметр сигма, можно проследить зависимость количества потерянных битов данных от его велечины, также влияет и глубина стего (чем она больше, тем страшнее шум).При сигме =0.2 почти все сообщение передано верно. В руководстве пользователя есть график с зависимостью. Вообще говоря даже малейший шум разрушает стего, так что необходимо использовать коды коррекции ошибок.

Дополнительные функции представлены выше в разделе "добавление-извлечение стего"


Здесь программа, демонстрирующая запись и извлечение стегосообщения из файла с шумом: key_w:=5 //Ключ записи key_r:=5 //Ключ чтения q:=1 //Глубина чтения/записи s:=0.2 //Квадратичное отклонение

Сама программа: Img:=READRGB("input.bmp") Txt:=READBIN("input.txt","byte") Stego_img:=InsertStego(Img,Txt,key_w,q) i:=0..(rows(Stego_img) - 1) j:=0..(cols(Stego_img) - 1) noise:=rnorm(cols(Stego_img)*rows(Stego_img),0,s)

TestSt3.PNG

WRITERGB("output.bmp"):=Stego+img_2 //Стего запсиано,в файле output.bmp находиться изображения со скрытым сообщением Img_2:=READRGB("output.bmp") Data:=ExtractStego(Img_2,key_r,q) WRITEBIN("output.bmp"),"byte",0):=Data //Стего прочитано,в файле output.bmp находиться скрытое сообщение,которое было прочитано из изображения


Это записанные и прочитанные данные в виде байт:

Noise (2).png

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

Дополнительные исходные данные