 
        
        - •Содержание
- •Введение
- •Постановка задачи
- •Теоретическое исследование
- •Представление изображений в эвм. Форматы изображений
- •Общие положения о защите авторского права и водяных знаках
- •Методы внедрения водяных знаков в изображения
- •Метод микширования
- •Метод нанесения текста
- •Метод lsb
- •Метод Patchwork
- •Обзор существующих программ-аналогов
- •Tsr Watermark Image 1.9.6.4
- •ImageSpyer 1.1
- •Разработка схемы алгоритма и её описание
- •Общая схема работы программы
- •Описание работы класса wmParameters
- •Описание работы класса TextParameters
- •Описание работы класса lsbInjector
- •Описание работы класса PatchworkInjector
- •Разработка программы
- •Тестирование и отладка
- •Руководство пользователя
- •Описание менюFile
- •Описание интерфейса метода микширования
- •Описание интерфейса метода нанесения текста
- •Описание интерфейса методовLsBиPatchwork
- •Заключение
- •Список использованных источников
- •Приложение а. Диаграмма классов приложения watermark injector
- •Приложение б. Исходный текст классаmainform
- •Приложение в. Исходный текст класса wmparameters
- •Приложение г. Исходный текст класса textparameters
- •Приложение д. Исходный текст классаlsbinjector
- •Приложение д. Исходный текст классаpatchworkinjector
- Описание работы класса lsbInjector
Класс LSBInjector реализует LSB метод внедрения ЦВЗ в изображение. Единственным параметром данного класса является путь к файлу, который будет внедрен. Первоначально при внедрении (метод Inject()) производится подсчёт байт, которые могут быть внедрены в изображение (т.е. объем стегоконтейнера) Предполагается, что на каждый пиксел можно внедрить 3 бита информации, для R, G и B компонентов, коэффициент прозрачности не затрагивается. Происходит чтение из файла данного количества байт в массив, после этого попиксельно производится модификация младших битов исходного растрового изображения, в соответствии с хранимой в массиве информацией. Возвращаемое изображение уже содержит в себе внедренный ЦВЗ.
Аналогично реализован и метод Assure(), цель которого – подтвердить подлинность файла. Из файла для проверки в данном случае также читается массив байт, который сравнивается с массивом, извлеченным из контейнера. Допустимое количество ошибок установлено в пределах 10%; если массивы отличаются более чем на это значение, ЦВЗ признается неподтвержденным.
Сохранение LSB–модифицированного растрового изображения следует производить только в несжатом формате (PNG или BMP), т.к. при сжатии файла погрешность дискретизации высока, и распределение младших битов цветовых компонентов растра стремится к вероятностному (50% true, 50% false).
Докажем это. Возьмём 24-битный растр с разрешением 1024х768. В таком случае вес файла равен 1024*768*3 =2359296 байт, и в нем можно поместить методом LSB 1024*768*3/8 = 294912 байт ЦВЗ. В случае несжатого формата это является возможным. Размер же сжатого изображения в формате JPG равен около 110000-120000 байт. Требование вместить в него 294912 байт ЦВЗ и обеспечить достоверность данной информации противоречит здравому смыслу. Именно поэтому ПС ImageSpyer и не поддерживает сохранение в сжатом формате LSB-стегоконтейнеров.
При разработке данного метода был проведен эксперимент по подсчёту процентного соотношения значений совпавших бит, извлеченных из сжатых файлов и бит, исходно записываемых в контейнер, к общему объёму контейнера. При большом количестве опытов это значение стремится к 0,5, это означает, что распределение младших бит в сжатом медиафайле произвольно, что подтверждает выдвинутое ранее утверждение. Такое же распределение получается и при проверке произвольного файла. Таким образом, использование JPG в качестве стегоконтейнера невозможно, что и требовалось доказать.
Исходный код класса LSBInjector находится в приложении Д.
Схема работы алгоритма внедрения LSB показана на рисунке 2.3.

Рисунок 2.3. Схема работы алгоритма внедрения ЦВЗ по методу LSB
- Описание работы класса PatchworkInjector
Данный класс реализует метод Patchwork внедрения ЦВЗ в изображение. Здесь файл ключа служит как «затравка» (salt) для генератора псевдослучайных чисел (Pseudorandom Number Generator, PNG). Исходными данными, как и для метода LSB, служит путь к файлу, содержащему ЦВЗ. Из данного файла считывается массив байт, которые предназначены для передачи в PNG, который, в свою очередь, возвращает 40000 байт. Каждая четверка этих байт представляет собой координаты одной точки изображения, таким образом, данный метод производит 5000 Patchwork-итераций, на каждой из которых получают значения двух точек изображения из результатов работы PNG; в первой из них увеличивают яркость изображения на δ, во второй уменьшают на столько же. Значение δ выбрано равным 5. Измененное изображение отображается на экране.
Для проверки осуществляются те же действия, что и для внедрения. Вводится переменная Ms, которая суммирует общее отклонение разности яркостей двух точек. После 5000 итераций в переменной остается отклонение, вызванное внедрением Patchwork-модификаций. Ошибка распределения принята равной 50; если существует большее отклонение, то водяной знак считается подтвержденным.
Поскольку данный ЦВЗ является полухрупким, на формат файла не накладывается ограничений.
Исходный код класса Patchwork Injector находится в приложении Е.
Схема работы алгоритма внедрения Patchwork показана на рисунке 2.4.

Рисунок 2.4. Схема работы алгоритма внедрения Patchwork
