Обнаружение СГ, основанных на погружении скрытых

advertisement
Автореферат
Дипломная работа выполнена на тему «Обнаружение стегосистем,
основанных на погружении скрытых сообщений в шумы сканера».
Дипломная работа содержит:
 185 страниц;
 76 таблиц;
 16 рисунков;
 9 схем;
 1 приложение.
Ключевые слова: стеганография, сканер, шумы, обнаружение.
В дипломной работе
рассмотрена стегосистема, основанная на
погружении скрытых сообщений в шумы сканера, разработаны методы
обнаружения
данной
стегосистемы.
Проверена
эффективность
предложенных методов в зависимости от объёма вложения. Предложены
также возможные методы улучшения самой стегосистемы, и методов её
обнаружения.
4
Содержание
Титульный лист ..................................................................................... 1
Задание ................................................................................................... 2
Автореферат........................................................................................... 4
Содержание............................................................................................ 5
Введение................................................................................................. 7
Глава 1. Краткий обзор стегосистем и их основное назначение. .......... 10
1.1.
Наука стеганография ................................................................... 10
1.2.
Отличие стеганографии от криптографии................................. 10
1.3.
Две основные части стеганографии ........................................... 10
1.4.
Задачи, решаемые стеганографией и ЦВЗ ................................. 11
1.5.
Особенности построения стегосистем ....................................... 12
Глава 2. Описание
стегосистемы,
основанной
на
погружении
секретных сообщений в шумы сканера .............................................................. 18
2.1.
компонент»
Обоснование существования такого типа «шумовых
.................................................................................................. 18
2.2.
Виды шумов сканера ................................................................... 20
2.3.
Описание стегосистемы, основаной на погружении скрытых
сообщений в шумы сканера ............................................................................... 22
2.4.
Пример вложения секретной информации................................ 27
Глава 3. Разработка методов стегоанализа в текстовых документах .. 28
3.1.
Постановка задачи ....................................................................... 28
3.2.
Атака вычислением корреляции одинаковых букв текста ...... 28
3.3.
Атака выполнением двумерного преобразования Фурье от
сканированных изображений ............................................................................. 40
5
3.4.
Анализ количества единичных выбросов ................................. 51
3.5.
Анализ количества единичных углублений .............................. 70
Глава 4.
методами
Результаты обнаружения стегосистем, предложенными
.................................................................................................. 91
4.1.
Атака анализом количества единичных выбросов ................... 91
4.2.
Атака анализом количества единичных углублений ............... 97
4.3.
Возможные улучшения методов вложения и обнаружения .. 111
Заключение ........................................................................................ 113
Список литературы ........................................................................... 115
Приложение № 1 ............................................................................... 117
6
Введение
История
человечества
знает
немало
примеров
использования
стеганографии.
Одно из первых применений стеганографии было зафиксировано в
трактате «История» греческого историка Геродота, относящегося к 5 веку до
н. э., в котором описывается метод сокрытия информации, заключавшийся в
том, что для передачи секретной информации использовалась голова раба.
Сначала волосы на голове раба сбривали, затем наносили татуировкой
секретное сообщение и когда волосы на голове раба отрастали, его
отправляли в пункт назначения. Там снова сбривали волосы и читали
секретное сообщение.
Во время войны за независимость США, для тайного общения, и
Американцы и Британцы использовали симпатические чернила, которые
проявлялись при нагреве.
Стеганография также использовалась в ходе обеих мировых войн. В
период между первой и второй мировыми войнами в Германии была
разработана
технология
создания
микроточек
(микрофотографий)
–
изображений, уменьшенных на столько, что неосведомлённый наблюдатель
не сможет их обнаружить.
В октябре 2001 года New York Times опубликовала заметку о том, что
Аль – Каида, при подготовке к террористической атаке 11 сентября 2001
года, использовала стеганографию для погружения секретных сообщений в
изображения, с целью дальнейшей рассылки информации по e – mail.
В «The Federal Plan for Cyber Security and Information Assurance
Research and Development» , опубликованном NSTC («National Science and
7
Technology Council»), в апреле 2006 года говорится о потенциальных угрозах
национальной безопасности к которым относятся:
 использование
киберпространства
для
скрытой
передачи
информации, в частности, террористами, и иностранными
спецслужбами;
 использование киберпространства для шпионажа против важных,
наименее защищенных данных в государственных и отраслевых
системах;
 использование киберпространства для подрывной деятельности
инсайдеров, в том числе поставщиков и подрядчиков;
 использование киберпространства для
ведения
преступной
деятельности, в первую очередь для мошенничества и хищения
финансовой или идентификационной информации, хакерами и
организованными преступными группами;
 рост
международного
интереса
к
изучению
методов
стеганографии, их коммерциализации и применению, эти
технологии представляют потенциальную угрозу национальной
безопасности,
дополнительную
так
как
стеганография
информацию,
которую
тайно
погружает
практически
не
обнаружить.
Из изложенного выше и дипломной работы [10] в которой подробно
рассмотрены примеры использования стеганографии террористическими и
криминальными группировками, становится понятно, что секретное общение
может быть использовано разными людьми для различных целей от вполне
безобидных до очень серьёзных, способных нанести непоправимый вред
компаниям или государствам. Таким образом, задачи стегоанализа, с каждым
годом становятся всё более важными, для обеспечения безопасности, как
отдельных лиц, так и целых государств.
8
В данной работе рассматривается стегосистема, имитирующая шумы
сканера. Погружение секретного
сообщения
в данной
стегосистеме
производится за счет изменения яркости пикселей на границе черного с
белым. Данная стегосистема является стойкой к визуальному анализу. До
настоящего времени не было предложено методов автоматического
определения вложения секретной информации данным методом.
Целью данной дипломной работы является разработка методов
стегоанализа, позволяющих в автоматическом режиме обнаружить вложение
секретной информации и оценить эффективности стегоанализа.
В первой главе рассмотрены
базовые аспекты стеганографии,
необходимые для понимания особенностей построения стегосистем.
Во второй главе описана стегосистема имитирующая шумы сканера.
Приводятся блок – схемы алгоритмов погружения и извлечения секретной
информации.
В третьей главе предложены различные методы стегоанализа в
текстовых документах. Приводятся блок-схемы алгоритмов стегоанализа и
пояснения к ним.
В
четвертой
главе
представлены
результаты
обнаружения
стегосистемы предлагаемыми методами. Представлены также предложения
по улучшению как стегосистемы, так и методов стегоанализа.
9
Глава 1. Краткий обзор стегосистем и их основное назначение.
1.1.
Наука стеганография
Стеганография – это наука о скрытой передаче информации путём
сохранения в тайне самого факта передачи. Слово стеганография образовано
от греческих слов стеганос («στεγανος») — скрытый и графо («γραφω») —
пишу, что дословно переводится, как «тайнопись».
1.2.
Отличие стеганографии от криптографии
Криптография делает содержание сообщения невозможным для
понимания, при этом сохраняется возможность обнаружить факт её
присутствия.
Стеганография в отличие от криптографии утаивает сам факт
погружения дополнительной информации в «невинное сообщение».
1.3.
Две основные части стеганографии
Стеганография ( в англоязычной литературе «Information hiding (IH)») -
это семейство методов, при помощи которых некоторое дополнительное
сведение погружается в основное (покрывающее сообщение (ПС)) при
сохранении хорошего качества ПС.
В качестве покрывающего сообщения могут быть использованы:
 неподвижные изображения;
 подвижные изображения (видео);
 аудио файлы;
 речь;
 печатные смысловые тексты;
 интернет – протоколы;
 программы для компьютеров.
10
На схеме 1 показывается, как стеганография (Information Hiding)
делится на области применения.
Information Hiding (IH)
Защита от обнаружения
Защита от удаления
Цифровые «водяные знаки»
Стеганография
(ЦВЗ)
Схема 1. Иллюстрация разделения IH на различные области применения
1.4.
Задачи, решаемые стеганографией и ЦВЗ
Задача стеганографии:
Погрузить дополнительное сообщение в ПС так, чтобы сам факт его
присутствия
в
нем
нельзя
было
бы
обнаружить
нелегитимным
пользователям.
Задача ЦВЗ:
Погрузить дополнительные сведения (обычно идентификационный код
автора) в ПС так, чтобы его нельзя было бы удалить, не ухудшив
существенно качество ПС. Факт такого вложения может и обнаруживаться
нелегитимными пользователями.
11
1.5.
Особенности построения стегосистем
Стеганографическая система (стегосистема) - совокупность средств и
методов, которые используются для формирования скрытого канала
передачи информации.
На схеме 2 изображена общая идея организации стеганографических
каналов связи.
Стего - Ключ
Стего - Ключ
ПС
Стеганографический
Отправитель
Получатель
канал
Секретная
Секретная
информация
информация
Схема 2. Иллюстрация общего принципа построения стеганографических каналов связи
Стегосистемы используются для решения следующих задач:
 идентификации
владельца,
защиты
авторского
права
на
интеллектуальную собственность;
 мониторинга вещания;
 отслеживания истории перемещений;
 контроля копирования;
 защиты конфиденциальной информации от несанкционированного
доступа;
12
 создания скрытых от законного пользователя каналов утечки
информации;
 альтернатива криптографии при ее запрещении или ограничении
уровня стойкости;
 защиты пользователей, которые нуждаются в хранении и передаче
секретной
информации
(так
как
факт
использования
стеганографии в большинстве своём не удаётся обнаружить, то и
пользователь остаётся неизвестным).
При построении стегосистемы должны учитываться следующие
положения:
 после вложения секретной информации покрывающее сообщение
должно
оставаться
сообщений
или
неизменным
эти
для
изменения
видео
должны
покрывающих
быть
незаметны
невооруженным глазом;
 стегосистема
должна
сложность
реализации
(под
понимается
количество
шагов
иметь
приемлемую
вычислительную
вычислительной
или
сложностью
арифметико-логических
операций, необходимых для решения вычислительной проблемы, в
данном случае – процесса встраивания/извлечения секретной
информации в/из сигнала покрывающего сообщения);
 должна обеспечиваться необходимая пропускная способность (что
особенно актуально для стегосистем скрытой передачи данных);
 методы
сокрытия
аутентичность
и
информации
целостность
должны
секретной
обеспечивать
информации
для
легитимного пользователя;

потенциальный нарушитель имеет полное представление о
стегосистеме и деталях ее реализации; единственное, что ему
неизвестно, – это ключ, с помощью которого только его
13
обладатель может установить факт наличия и содержание
скрытого сообщения;
 если
факт
существования
скрытого
сообщения
становится
известным нарушителю, это не должно позволить последнему
извлечь его до тех пор, пока ключ сохраняется в тайне;
 нарушитель должен быть лишен любых технических и других
преимуществ в распознании или, по крайней мере, раскрытии
содержания секретных сообщений.
Скрытие информации внутри цифровых файлов требует изменения
каких либо параметров этих файлов, что выражается в некотором ухудшении
или появлении необычных характеристик. Эти необычные характеристики
могут выступать в роли критерия обнаружения вложения секретной
информации.
Под понятием стегоанализ понимается атака на стегосистему, целью
которой является попытка обнаружить, извлечь, изменить вложенное
секретное сообщение.
Основные атаки на СГ:
 обнаружение стегосигналов;
 нахождение объема секретного вложения;
 чтение стегосообщения;
 удаление стегосигнала без значительного ухудшения качества ПС
и даже при необнаружении СГ.
При прохождении стегосигналов по каналам связи они могут
подвергнуться различным воздействиям.
Возможные преобразования стегосигналов:
 естественные
преобразования
(фильтрация,
масштабирование, передача по каналам с шумом);
14
сжатие,
 преднамеренные (атаки).
Критерии эффективности СГ:
Исходя из определения стегосистемы, можно выделить три основных
направления оценки эффективности СГ:
 количество информации которое можно погрузить в ПС (чем
больший объём секретной информации можно погрузить, тем
лучше стегосистема);
 сложность обнаружения (показывает на сколько легко, для кого –
либо обнаружить секретное сообщение. Как правило существует
прямая связь между количеством вложенной информации и
временем необходимым для её обнаружения. По мере увеличения
объёма вложенной информации растёт вероятность того, что
вложение секретной информации будет обнаружено);
 сложность удаления (заключает в себе тот принцип, что кто – либо
перехватив секретное сообщение не смог бы легко его удалить).
Из этих трёх основных направлений сформированы пять критериев
оценки эффективности СГ:
 вероятность пропуска стегосигнала;
 вероятность ложного обнаружения стегосигнала;
 вероятность
ошибки
бита
при
извлечении
легитимными
пользователями вложенного сообщения;
 качество ПС после вложения (отношение сигнал/шум или более
сложные, в том числе экспертные, оценки);
 скорость вложения (число бит вложенного сообщения на один
отсчет ПС).
15
СГ называется робастной, если секретное сообщение устойчиво
выделяется при всех естественных или преднамеренных преобразованиях СГ,
которые не искажают существенно ПС.
Основная классификация СГ:
Для легитимных пользователей:
 с известным ПС на легитимном декодере (информированный
декодер);
 с неизвестным ПС на легитимном декодере ("слепой" декодер);
 с использованием ПС в легитимном кодере (информированный
кодер).
Для "атакующих":
 с известной стеганограммой (выполняется всегда);
 с известным сообщением;
 с выбранным сообщением;
 с известным (или выбранным ПС) - для каналов с шумом.
Основная концепция в разработке СГ:
Найти «шумовые компоненты» (области) в ПС и заменить их на
зашифрованное (т.е. шумоподобное) секретное сообщение.
Найти «шумовые компоненты» не сложно, так как они присутствуют
повсюду, будь то цифровая фотографии, цифровой аудио или видео файл.
Когда голос, звук или фотография превращаются в последовательность бит,
аппаратура проделывающая данную работу как правило далека от идеала.
Немного электрического шума может изменить некоторое количество бит, и
восстановить эти изменённые биты не представляется возможным.
И если эти небольшие изменения не столь важны с точки зрения
передачи информационной составляющей, то с точки зрения возможности
16
погружения
дополнительной
информации
эти
искажения
открывают
большие возможности.
Принцип прост. Цифровая фотография или цифровой аудио файл
представляют
собой
числа,
которыми
кодируются
интенсивности
в
определенный момент в пространстве и / или времени.
Цифровая фотографии представляет собой матрицу чисел, которые
определяют яркость пикселей в определенном месте в определенное время.
Цифровые аудио файлы представляют собой последовательность давлений в
определённые моменты времени.
Но все эти цифры приблизительны. Цифровые камеры, генерирующие
цифровые изображения не идеальны из – за наличия в них приборов с
зарядовой связью (ПЗС), преобразующих фотоны в биты информации. ПЗС
сильно подвержены случайным физическим процессам. Иногда на ПЗС
попадает меньше фотонов, чем необходимо, а иногда больше. В
долгосрочной перспективе количество случаев, когда на ПЗС попадёт
меньше фотонов и когда на ПЗС попадёт больше фотонов будет примерно
одинаково, но изображение должно быть сгенерировано за несколько секунд.
Схожа ситуация и с микрофонами.
Основная проблема при разработке СГ:
Статистика таких сложных ПС как звук, изображение и смысловой
текст известна не полностью и весьма сложна. Поэтому существует
опасность, что атакующий знает ее лучше, чем разработчик СГ.
Одним из видов СГ является стегосистема, которая в качестве
«шумовых компонент» для погружении скрытых сообщений использует
шумы сканера.
17
Глава 2. Описание стегосистемы, основанной на погружении
секретных сообщений в шумы сканера
Главной
задачей
стеганографии
является
построение
необнаруживаемого канала связи. С целью внедрения секретного сообщения
отправитель немного модифицирует покрывающее сообщение (ПС), получая
на выходе сообщение с вложением. При этом требуется внедрить, как можно
больше бит информации, не поместив в ПС легко обнаруживаемые признаки.
Как было отмечено в первой главе, основной концепцией при
разработке стегосистем является нахождение «шумовых компонент». Из
названия данной стегосистемы становится понятно, что в качестве «шумовых
компонент» используются шумы сканера. Но действительно ли они есть?
Чтобы ответить на этот вопрос мы рассмотрим основные типы сканеров,
существующие
на
сегодняшний
день,
выберем
из
них
наиболее
распространённый тип, рассмотрим принцип его действия и определим
откуда появляются «шумовые компоненты».
2.1.
Обоснование существования такого типа «шумовых компонент»
На сегодняшний день существует четыре вида сканеров, а именно:
 ручные сканеры;
 листопротяжные сканеры;
 планшетные сканеры;
 барабанные.
Ручные сканеры – обрабатывают полосы документа шириной около 10
см и представляют интерес, прежде всего для владельцев мобильных ПК.
Они медлительны, имеют низкие оптические разрешения (обычно 100 точек
на дюйм) и часто сканируют изображения с перекосом.
18
В листопротяжном сканере, как в факсимильном аппарате, страницы
документа при считывании пропускаются через специальную щель с
помощью направляющих роликов. Таким образом, сканеры этого типа
непригодны для ввода данных непосредственно из журналов или книг. В
целом возможности применения листопротяжных сканеров ограничены.
Планшетные
сканеры
имеют
ряд
преимуществ
по
объему
применения, то есть более универсальны. Они напоминают верхнюю часть
копировального аппарата: оригинал – либо бумажный документ, либо
плоский предмет – кладут на специальное стекло, под которым перемещается
каретка с оптикой и аналого-цифровым преобразователем.
Барабанные
сканеры,
по
светочувствительности,
значительно
превосходящие потребительские планшетные устройства, применяются
исключительно
в
воспроизведение
полиграфии,
где
профессиональных
требуется
фотоснимков.
высококачественное
Разрешение
таких
сканеров обычно составляет 8000-11000 точек на дюйм и более.
Таким
образом
из–за
своей
универсальности
наибольшее
распространение получили планшетные сканеры. Для лучшего понимания
причин появления «шумовых компонент» рассмотрим принцип действия
таких сканеров.
Схема 3. Иллюстрация принципа действия планшетного сканера
Схема 3 иллюстрирует принцип действия планшетного сканера.
19
Вдоль сканируемого изображения, расположенного на прозрачном
неподвижном стекле, движется сканирующая каретка с источником света.
Отраженный свет через оптическую систему сканера (состоящую из
объектива и зеркал или призмы) попадает на три расположенных
параллельно друг другу фоточувствительных полупроводниковых элемента
на основе ПЗС, каждый из которых принимает информацию о компонентах
изображения.
2.2.
Виды шумов сканера
Выделяют четыре вида шумов:

фотонный шум;

темновой шум (темновой ток);

шум считывания;

неоднородность чувствительности.
Фотонный
шум
обусловлен
квантовой
природой
света.
Воздействующие на ПЗС фотоны света порождают в кремниевом слое
прибора фотоэлектроны. Количество фотоэлектронов, накапливаемых за
время экспозиции, в каждой ячейке ПЗС описывается распределением
Пуассона. Среднеквадратическое значение флуктуирующей (шумовой)
составляющей заряда, накопленного в ячейке ПЗС, фш и его среднее
значение ф , представляющее полезный сигнал, взаимосвязаны
фш ≈ √ф .
То есть число фотонов накопленное в ячейке, определено с точностью
до квадратного корня из их числа. Например, зарядовый пакет в 10000
электронов от кадра к кадру будет флуктуировать со среднеквадратическим
отклонением в 100 электронов.
20
Темновой шум возникает под действием тепла, вследствие генерации
электронов в кристаллической решётке кремния ПЗС, поскольку процесс
генерации термоэлектронов является случайным процессом. Величина
темнового тока не зависит от величины светового потока, который
проецируется на ПЗС, а следовательно, не зависит от величины светового
потока и темновой шум. Количество термоэлектронов, накапливаемых в
каждой ячейке ПЗС за время экспозиции, так же, как и количество
фотоэлектронов,
описывается
среднеквадратическое
распределением
значение
темнового
Пуассона.
шума
тш
Поэтому
подчиняется
соотношению
тш ≈ √т ,
где т - среднее значение накопленного за время экспозиции заряда,
обусловленного термоэлектронами.
Шум
считывания
(или
шум
предусилителя)
–
обусловлен
предусилителем на чипе. Среднеквадратическое значение шума считывания
определяется параметрами матрицы ПЗС и не зависит от величины
считываемого сигнала, а следовательно, не зависит и от светового потока.
Шум считывания распределён по гауссову закону.
Ячейки ПЗС имеют не одинаковую чувствительность, то есть даже при
абсолютно однородной освещённости сигнал с них разный. Величина этой
неоднородности не велика, порядка 1 – 5 %.
И так мы пришли к выводу о том что «шумовые компоненты» такого
типа действительно существуют, теперь перейдём к рассмотрению самой
стегосистемы.
21
2.3.
Описание стегосистемы, основаной на погружении скрытых
сообщений в шумы сканера
Данная СГ была предложена около 5 лет назад профессором кафедры
ИБТС СПбГУТ Коржиком В. И. и аспирантом Алексеевым В. Г..
Основная идея данного метода заключается в том, чтобы отсканировать
напечатанный документ и внести в него секретную информацию имитируя
шумы сканера [11].
Имитация осуществляется за счёт того, что изменению могут быть
подвергнуты только пиксели, находящиеся на границе черного с белым.
Введём обозначения:
 – область, размером  ×  пикселей;
 – количество чёрных пикселей в ;
 + – количество чёрных пикселей в , если оно чётное;
 − – количество чёрных пикселей в , если оно нечётное;
0<<
1
2
– выбранный порог;
 = {0,1} – значение бита секретной информации, вкладываемой в ;
Метод вложения секретной информации:
Отсканированный чёрно – белый документ последовательно делится на
области .
Область  является пригодной для вложения в следующих случаях:
 = 0 , если  ∙ 2 <  < (1 − ) ∙ 2 ;
 = 1 , если  = (1 − ) ∙ 2 ;
22
 = 2 , если  =  ∙ 2 .
Во всех остальных случаях область  будет считаться не пригодной для
вложения секретного сообщения.
Алгоритм погружения секретной информации для области 0 :
Если область  = 0 , то вложение производится в соответствие с
таблицей 1:
Таблица 1. Алгоритм вложения секретной информации для области  = 
 = +
=0
=1
 = −
Изменить цвет одного пикселя
Ничего не изменять
на противоположный
Изменить цвет одного
пикселя на противоположный
Ничего не изменять
Алгоритм погружения секретной информации для области 1 :
Если область  = 1 , то вложение производится в соответствие с
таблицей 2:
Таблица 2. Алгоритм вложения секретной информации для области  = 
 = +
=0
=1
 = −
Изменить один чёрный пиксель
Ничего не изменять
на белый
Изменить один чёрный
Ничего не изменять
пиксель на белый
23
Алгоритм погружения секретной информации для области 2 :
Если область  = 2 , то вложение производится в соответствие с
таблицей 3:
Таблица 3. Алгоритм вложения секретной информации для области  = 
 = +
=0
=1
 = −
Изменить один белый пиксель
Ничего не изменять
на чёрный
Изменить один белый пиксель
Ничего не изменять
на чёрный
Метод извлечения секретной информации:
Стегоизображение последовательно делится на области . Затем
высчитывается количество чёрных пикселей внутри каждой области и
принимается решение, какого типа эти области, если области типа 0 , 1
или 2 , то производится извлечение секретного сообщения, если нет, то
извлечение информации не производится.
Алгоритм извлечения секретной информации из областей 0 , 1 и 2 :
Если область  = 0 ,  = 1 или  = 2 , то извлечение производится
в соответствие с таблицей 4:
Таблица 4. Алгоритм извлечения секретной информации из областей  =  ,  =  ,  = 
Количество черных пикселей
Извлекаемая информация
 = +
Извлекается «0»
 = −
Извлекается «1»
24
На схемах 4 и 5 изображены соответственно блок - схемы алгоритмов
погружения и извлечения секретной информации.
ПС
Выбор параметров
nиk
Разбиение ПС на
области
nxn
Подсчёт количества
чёрных пикселей
внутри областей
Принятие решения о
возможности вложения
Область не пригодна
для вложения
Область пригодна для
вложения
Ни чего не
вкладывается
Производится
вложение в
соответствии с
таблицами 1, 2 и 3
Схема 4. Блок - схема алгоритма погружения секретной информации
25
Стегоизображение (СИ) – изображение после вложения секретной
информации.
Стегоизображение (СИ)
Выбор параметров
nиk
Разбиение СИ на
области размером n x n
Подсчёт количества
чёрных пикселей
внутри областей
Принятие решения о
типе области
 ≠ 0 ,  ≠ 1 ,  ≠ 2
 = 0 ,  = 1 ,  = 2
Ни чего не
извлекается
Производится
извлечение в
соответствии с
таблицей 4
Схема 5. Блок - схема алгоритма извлечения секретной информации
26
Основные свойства данного метода:
 Извлечение информации производится без ошибок.
 Чем больше n и чем больше k, тем секретнее вложение, но тем
меньше скорость вложения, и наоборот.
 Вложение устойчиво к визуальной атаке и к простейшим
статистическим атакам.
 Вложение легко удаляется при помощи рандомизации А+, А- без
ухудшения качества документа.
 Скорость вложения невелика.
2.4.
Пример вложения секретной информации
На рисунке 1 изображен пример ПС с «шумовыми компонентами». На
рисунке 2 изображен пример СИ после погружения в ПС 9 бит секретной
информации (параметр  = 20, порог  = 0,01). На рисунке 3 красным
цветом выделены пиксели, изменившиеся, после погружения в ПС 9 бит
секретной информации.
Рисунок 1. Покрывающее сообщение с «шумовыми компонентами»
Рисунок 2. Стегоизображение
Рисунок 3. Расположение изменённых пикселей
27
Глава 3. Разработка
методов
стегоанализа
в
текстовых
документах
3.1.
Постановка задачи
Целью данной дипломной работы является разработка методов
стегоанализа, позволяющих в автоматическом режиме обнаружить вложение
секретной информации и оценка эффективности их работы.
 Для
стегоанализа
предоставлено
одно
или
несколько
изображений;
 производиться
сравнение
характеристик
тестируемых
изображений с заранее выбранными порогами;
 если есть доступ к сканеру, то это позволяет более точно выбрать
пороги.
Далее будут рассмотрены атаки с известной стегосистемой, что
подразумевает под собой то, что нам известны алгоритмы погружения и
извлечения
секретной
информации,
но
не
известено
покрывающее
сообщение.
3.2.
Атака вычислением корреляции одинаковых букв текста
При разработке данного метода была использована база тестовых
изображений. В эти изображения с различными скоростями производилось
вложение секретной информации, после чего генерировались новые
изображения, на которых были отмечены изменившиеся пиксели.
Визуальный анализ изображений с отмеченными изменениями не
позволил выявить уникальных изменений, происходивших после вложения
секретной информации.
28
Как известно для использования статистического анализа необходимо
большое количество информации для сбора статистики. Так как мы
исследовали изображения текстовых документов, то в качестве объекта для
сбора статистики было принято решение использовать буквы текста,
наименее подверженные искажениям сканера.
Проведя визуальный анализ, было выявлено, что менее всего
искажениям подвергается буква «Т».
Рисунок 4. Иллюстрация букв подверженных искажениям сканера
На рисунке 4 видно, что две чаще всего встречающиеся буквы русского
алфавита «А» и «И» сильнее подвергаются шумам сканера, а следовательно
обладают более сильным «шумовым компонентом», что усложняет процесс
обнаружения вложения.
Основное предположение при разработке данного метода заключалось
в следующем: после вложения буквы с вложением будут сильнее отличаться
от таких же букв, но без вложения.
29
В качестве порога предпологалось использовать значение средней
корреляции букв «Т» с первой найденной буквой «Т».
Блок – схема алгоритма работы атаки вычислением корреляции
одинаковых букв текста изображена на схеме 6.
Изображение
текстового документа
Выделение букв «Т»
Вычисление
корреляции букв «Т» с
первой найденной «Т»
Принятие решения о
наличие вложения
Аномалии не
обнаружены
Аномалии обнаружены
Есть вложение
Нет вложения
Схема 6. Блок - схема алгоритма работы атаки вычислением корреляции одинаковых букв текста
30
Следует пояснить этап выделения букв «Т». На сегодняшний день
существуют алгоритмы контурного анализа изображения, позволяющие в
автоматическом режиме выделять одинаковые буквы текста.
Процедура выделения контуров включает в себя два этапа. Вначале на
изображениях обнаруживаются яркостные перепады, образующие контуры, а
затем результаты сравниваются с порогом. Если результат обнаружения
превышает порог, то считается, что этот пиксель изображения принадлежит
контуру.
Градиентные методы обнаружения перепадов яркости:
 метод Робертса;
 метод Превитта;
 метод Собела;
 метод пересечения нулевого уровня;
 метод Кирша;
 метод Уоллиса;
 метод Канни.
Затем найденные контуры сравниваются с шаблоном и таким образом
автоматически находятся все схожие контуры.
31
Тест:
Целью данного теста является получение статистики схожести букв
«Т» в изображении текстового документа формата А4 до и после вложения
секретной информации:
 было выбрано три изображения текстовых документов формата
А4;
 из них выделены по 24 первых встретившихся букв «Т», каждая
буква сохранена виде отдельного изображения размером 50 х 50
пикселей;
 произведено совмещение центров букв;
 высчитана корреляция найденных букв «Т» с первой найденной
на изображении;
 те же операции проделаны после вложения в покрывающие
сообщения секретной информации с параметрами n = 20 и
k = 0,01 , что соответствует вложению 8000 – 12000 бит/ на
страницу текста формата А4.
На рисунках 5 и 6 приведены найденные буквы «Т» первого
изображения до и после вложения соответственно.
На рисунках 7 и 8 приведены найденные буквы «Т» второго
изображения до и после вложения соответственно.
На рисунках 9 и 10 приведены найденные буквы «Т» третьего
изображения до и после вложения соответственно.
32
«Т» № 1
«Т» № 2
«Т» № 3
«Т» № 4
«Т» № 5
«Т» № 6
«Т» № 7
«Т» № 8
«Т» № 9
«Т» № 10
«Т» № 11
«Т» № 12
«Т» № 13
«Т» № 14
«Т» № 15
«Т» № 16
«Т» № 17
«Т» № 18
«Т» № 19
«Т» № 20
«Т» № 21
«Т» № 22
«Т» № 23
«Т» № 24
Рисунок 5. 24 первые буквы «Т», найденные в первом изображении
33
«Т» № 1
«Т» № 2
«Т» № 3
«Т» № 4
«Т» № 5
«Т» № 6
«Т» № 7
«Т» № 8
«Т» № 9
«Т» № 10
«Т» № 11
«Т» № 12
«Т» № 13
«Т» № 14
«Т» № 15
«Т» № 16
«Т» № 17
«Т» № 18
«Т» № 19
«Т» № 20
«Т» № 21
«Т» № 22
«Т» № 23
«Т» № 24
Рисунок 6. 24 первые буквы «Т», найденные в первом изображении после вложения
34
«Т» № 1
«Т» № 2
«Т» № 3
«Т» № 4
«Т» № 5
«Т» № 6
«Т» № 7
«Т» № 8
«Т» № 9
«Т» № 10
«Т» № 11
«Т» № 12
«Т» № 13
«Т» № 14
«Т» № 15
«Т» № 16
«Т» № 17
«Т» № 18
«Т» № 19
«Т» № 20
«Т» № 21
«Т» № 22
«Т» № 23
«Т» № 24
Рисунок 7. 24 первые буквы «Т», найденные во втором изображении
35
«Т» № 1
«Т» № 2
«Т» № 3
«Т» № 4
«Т» № 5
«Т» № 6
«Т» № 7
«Т» № 8
«Т» № 9
«Т» № 10
«Т» № 11
«Т» № 12
«Т» № 13
«Т» № 14
«Т» № 15
«Т» № 16
«Т» № 17
«Т» № 18
«Т» № 19
«Т» № 20
«Т» № 21
«Т» № 22
«Т» № 23
«Т» № 24
Рисунок 8. 24 первые буквы «Т», найденные во втором изображении после вложения
36
«Т» № 1
«Т» № 2
«Т» № 3
«Т» № 4
«Т» № 5
«Т» № 6
«Т» № 7
«Т» № 8
«Т» № 9
«Т» № 10
«Т» № 11
«Т» № 12
«Т» № 13
«Т» № 14
«Т» № 15
«Т» № 16
«Т» № 17
«Т» № 18
«Т» № 19
«Т» № 20
«Т» № 21
«Т» № 22
«Т» № 23
«Т» № 24
Рисунок 9. 24 первые буквы «Т», найденные в третьем изображении
37
«Т» № 1
«Т» № 2
«Т» № 3
«Т» № 4
«Т» № 5
«Т» № 6
«Т» № 7
«Т» № 8
«Т» № 9
«Т» № 10
«Т» № 11
«Т» № 12
«Т» № 13
«Т» № 14
«Т» № 15
«Т» № 16
«Т» № 17
«Т» № 18
«Т» № 19
«Т» № 20
«Т» № 21
«Т» № 22
«Т» № 23
«Т» № 24
Рисунок 10. 24 первые буквы «Т» найденные в третьем изображении после вложения
38
В таблице 5 приведены результаты вычисления корреляции для букв
«Т» с первой найденной буквой «Т» для трёх покрывающих сообщений.
Таблица 5. Результаты вычисления корреляции для букв «Т»
ПС 1
ПС 2
ПС 3
Корр. букв «Т»
до влож.
после
до влож.
после
до влож.
после
«Т» № 1 / «Т» № 2
0,8661
0,8485
0,7141
0,857
0,9075
0,9075
«Т» № 1 / «Т» № 3
0,9401
0,9751
0,9558
0,8469
0,9353
0,9353
«Т» № 1 / «Т» № 4
0,8793
0,8565
0,8539
0,8672
0,8276
0,8732
«Т» № 1 / «Т» № 5
0,9439
0,8892
0,927
0,7609
0,9206
0,9162
«Т» № 1 / «Т» № 6
0,9133
0,7301
0,9042
0,7633
0,9483
0,9425
«Т» № 1 / «Т» № 7
0,8362
0,9466
0,8833
0,8557
0,9588
0,9474
«Т» № 1 / «Т» № 8
0,9196
0,7637
0,8361
0,8733
0,8751
0,8552
«Т» № 1 / «Т» № 9
0,8777
0,9015
0,7876
0,8404
0,813
0,8166
«Т» № 1 / «Т» № 10
0,9428
0,8429
0,7177
0,8555
0,9148
0,9148
«Т» № 1 / «Т» № 11
0,8827
0,8919
0,8996
0,8839
0,8911
0,8871
«Т» № 1 / «Т» № 12
0,9586
0,8853
0,7215
0,8689
0,8474
0,814
«Т» № 1 / «Т» № 13
0,9415
0,8356
0,9199
0,8845
0,897
0,8474
«Т» № 1 / «Т» № 14
0,9626
0,8991
0,7429
0,7794
0,9135
0,9093
«Т» № 1 / «Т» № 15
0,9408
0,8784
0,8229
0,7889
0,8672
0,8672
«Т» № 1 / «Т» № 16
0,9159
0,8181
0,8897
0,9241
0,8166
0,8202
«Т» № 1 / «Т» № 17
0,9586
0,873
0,6854
0,9166
0,8633
0,853
«Т» № 1 / «Т» № 18
0,9386
0,8397
0,7662
0,7748
0,853
0,8469
«Т» № 1 / «Т» № 19
0,9196
0,8536
0,9136
0,8264
0,8772
0,8772
«Т» № 1 / «Т» № 20
0,8636
0,7432
0,8341
0,9192
0,9523
0,9523
«Т» № 1 / «Т» № 21
0,9196
0,8048
0,7593
0,8912
0,8413
0,8911
«Т» № 1 / «Т» № 22
0,9493
0,8596
0,7281
0,778
0,8672
0,8352
«Т» № 1 / «Т» № 23
0,8512
0,807
0,9105
0,8755
0,8882
0,8839
«Т» № 1 / «Т» № 24
0,9074
0,8009
0,8284
0,8975
0,9319
0,9272
Средн.
0,914304
0,849752
0,826165
0,849091
0,887313
0,883509
Анализируя полученную статистику, можно сделать заключение о том,
что наше предположение, заключавшееся в том, что после вложения буквы с
вложением будут сильнее отличаться от таких же букв, но без вложения
оказалось ложным даже для скорости вложения равной 8000 – 12000 бит/ на
страницу текста формата А4.
39
Для скоростей вложения менее 8000 бит/ на страницу текста формата
А4 данное предположение тем более оказывается ложным.
Из последней строки таблицы 5, в которой содержатся средние
значения корреляции найденных букв с первой обнаруженной видно, что
после вложения в ПС 2 секретной информации схожесть букв увеличилась
(средняя корреляция до вложения составляла 0,826165, после вложения она
стала равной 0,849091), данный факт привёл нас к выводу о том, что при
вложении со скоростью менее 12000 бит/ на страницу текста формата А4
данный метод не позволяет выбрать порог с высокой степенью обнаружения
вложения секретной информации.
3.3.
Атака выполнением двумерного преобразования Фурье от
сканированных изображений
При фильтрации изображений часто переходят из пространственной
области в частотную, выполняя двумерное преобразование Фурье. Переход в
частотную область обусловлен тем, что шум порождает частотные всплески,
которые можно обнаружить, анализируя спектр Фурье изображения.
Основываясь на этом, появилось следующее предположение: вложение
секретной информации вызовет появление в спектре Фурье изображений
характерных частотных всплесков в области высоких частот.
В качестве порога предполагалось использовать среднее значение
корреляции спектров Фурье изображений букв «Т» со спектром Фурье
изображения первой найденной буквы «Т».
Блок - схема алгоритма работы атаки выполнением двумерного
преобразования Фурье от сканированных текстовых документов изображена
на схеме 7.
40
Пояснения к работе алгоритма:
 Вычисление абсолютного значения каждого элемента массива
производится из-за того, что после выполнения двумерного
преобразования Фурье каждый элемент массива представлен
суммой вещественной и мнимой части;
 Логарифмирование спектра Фурье изображения производится
потому, что динамический диапазон значений спектра весьма
широк (от 0 до 204000);
 Перенос начала координат преобразования в центр частотной
области производится для лучшей наглядности.
41
Изображение текстового
документа
Выполнение
двумерного
преобразования Фурье
Вычисление
абсолютного значения
каждого элемента
массива
Логарифмирование
спектра Фурье
изображения
Перенос начала
координат
преобразования в центр
частотной области
Принятие решения о
наличие вложения
Аномалии не
обнаружены
Обнаружены аномалии
Есть вложение
Нет вложения
Схема 7. Блок - схема алгоритма работы атаки выполнением двумерного преобразования Фурье
42
Тест:
Целью теста является получение статистики схожести спектров Фурье
изображений букв «Т» в изображение текстового документа формата А4 до и
после вложения секретной информации:
 было выбрано три изображения текстовых документов формата
А4;
 из каждого изображения выбраны первые двадцать букв «Т»;
 для каждой буквы «Т» выполнено двумерное преобразование
Фурье;
 вычислено абсолютное значение каждого элемента массива;
 произведено логарифмирование спектра Фурье изображения;
 произведён перенос начал координат в центры частотных
областей;
 те же операции проделаны после вложения в покрывающие
сообщения секретной информации с параметрами n = 20 и
k = 0,01 , что соответствует вложению 8000 – 12000 бит/ на
страницу текста формата А4;
 для каждой пары спектров Фурье изображений рассчитана
корреляция.
На рисунках 11 и 12 приведены спектры Фурье изображений букв «Т»
первого изображения до и после вложения секретной информации
соответственно.
На рисунках 13 и 14 приведены спектры Фурье изображений букв «Т»
второго изображения до и после вложения секретной информации
соответственно.
На рисунках 15 и 16 приведены спектры Фурье изображений букв «Т»
третьего изображения до и после вложения секретной информации.
43
«Т» № 1
«Т» № 2
«Т» № 3
«Т» № 4
«Т» № 5
«Т» № 6
«Т» № 7
«Т» № 8
«Т» № 9
«Т» № 10
«Т» № 11
«Т» № 12
«Т» № 13
«Т» № 14
«Т» № 15
«Т» № 16
«Т» № 17
«Т» № 18
«Т» № 19
«Т» № 20
Рисунок 11. Спектры Фурье изображений букв «Т» первого изображения
44
«Т» № 1
«Т» № 2
«Т» № 3
«Т» № 4
«Т» № 5
«Т» № 6
«Т» № 7
«Т» № 8
«Т» № 9
«Т» № 10
«Т» № 11
«Т» № 12
«Т» № 13
«Т» № 14
«Т» № 15
«Т» № 16
«Т» № 17
«Т» № 18
«Т» № 19
«Т» № 20
Рисунок 12. Спектры Фурье изображений букв «Т» первого изображения после вложения
45
«Т» № 1
«Т» № 2
«Т» № 3
«Т» № 4
«Т» № 5
«Т» № 6
«Т» № 7
«Т» № 8
«Т» № 9
«Т» № 10
«Т» № 11
«Т» № 12
«Т» № 13
«Т» № 14
«Т» № 15
«Т» № 16
«Т» № 17
«Т» № 18
«Т» № 19
«Т» № 20
Рисунок 13. Спектры Фурье изображений букв «Т» второго изображения
46
«Т» № 1
«Т» № 2
«Т» № 3
«Т» № 4
«Т» № 5
«Т» № 6
«Т» № 7
«Т» № 8
«Т» № 9
«Т» № 10
«Т» № 11
«Т» № 12
«Т» № 13
«Т» № 14
«Т» № 15
«Т» № 16
«Т» № 17
«Т» № 18
«Т» № 19
«Т» № 20
Рисунок 14. Спектры Фурье изображений букв «Т» второго изображения после вложения
47
«Т» № 1
«Т» № 2
«Т» № 3
«Т» № 4
«Т» № 5
«Т» № 6
«Т» № 7
«Т» № 8
«Т» № 9
«Т» № 10
«Т» № 11
«Т» № 12
«Т» № 13
«Т» № 14
«Т» № 15
«Т» № 16
«Т» № 17
«Т» № 18
«Т» № 19
«Т» № 20
Рисунок 15. Спектры Фурье изображений букв «Т» третьего изображения
48
«Т» № 1
«Т» № 2
«Т» № 3
«Т» № 4
«Т» № 5
«Т» № 6
«Т» № 7
«Т» № 8
«Т» № 9
«Т» № 10
«Т» № 11
«Т» № 12
«Т» № 13
«Т» № 14
«Т» № 15
«Т» № 16
«Т» № 17
«Т» № 18
«Т» № 19
«Т» № 20
Рисунок 16. Спектры Фурье изображений букв «Т» третьего изображения после вложения
49
Визуальный анализ спектров Фурье изображений букв «Т» не позволил
выявить характерных частотных всплесков.
В таблице 6 приведены результаты вычисления корреляции спектров
Фурье изображений букв «Т» со спектром Фурье изображения первой
найденной буквы «Т» до и после вложения секретной информации.
Таблица 6. Вычисление корреляции спектров Фурье изображений букв «Т» до и после вложения
Корр. букв «Т»
ПС 1
ПС 2
ПС 3
до влож. после до влож. после до влож. после
«Т» № 1 / «Т» № 2
0,6416
0,6467
0,5925
0,6145
0,6301
0,6301
«Т» № 1 / «Т» № 3
0,7183
0,695
0,7569
0,617
0,6885
0,6885
«Т» № 1 / «Т» № 4
0,6753
0,6757
0,6421
0,6181
0,628
0,6296
«Т» № 1 / «Т» № 5
0,7071
0,6918
0,7087
0,5639
0,6638
0,6664
«Т» № 1 / «Т» № 6
0,7007
0,6673
0,6763
0,5926
0,7087
0,7047
«Т» № 1 / «Т» № 7
0,5997
0,6057
0,6821
0,6113
0,7194
0,7063
«Т» № 1 / «Т» № 8
0,6641
0,6684
0,6685
0,6177
0,6777
0,6777
«Т» № 1 / «Т» № 9
0,6329
0,6139
0,6542
0,5894
0,627
0,6446
«Т» № 1 / «Т» № 10
0,687
0,6789
0,7247
0,5948
0,6092
0,6092
«Т» № 1 / «Т» № 11
0,6277
0,592
0,6705
0,6112
0,6492
0,6692
«Т» № 1 / «Т» № 12
0,7857
0,7484
0,6944
0,5872
0,6234
0,5984
«Т» № 1 / «Т» № 13
0,7879
0,7616
0,68
0,5923
0,693
0,6732
«Т» № 1 / «Т» № 14
0,7388
0,707
0,6941
0,6108
0,6173
0,6552
«Т» № 1 / «Т» № 15
0,6747
0,6674
0,6531
0,5876
0,6641
0,6641
«Т» № 1 / «Т» № 16
0,7349
0,6949
0,6813
0,5945
0,5859
0,5748
«Т» № 1 / «Т» № 17
0,7321
0,6855
0,6821
0,6221
0,6339
0,6339
«Т» № 1 / «Т» № 18
0,6575
0,6606
0,6411
0,5847
0,5989
0,5868
«Т» № 1 / «Т» № 19
0,7448
0,7276
0,6992
0,5903
0,6598
0,6598
«Т» № 1 / «Т» № 20
0,6728
0,6635
0,6161
0,6359
0,7564
0,7564
Среднее
0,6938
0,6764
0,6746
0,6018
0,6544
0,6541
Исходя из результатов таблицы 6, мы пришли к следующему выводу:
хотя после вложения секретной информации средняя корреляция спектров
Фурье изображений букв «Т» оказывается меньше, средней корреляции
спектров Фурье изображений букв «Т» до вложения, по результатам
последней строки таблицы 6 (среднее значение корреляции спектров Фурье
50
изображений букв «Т») не представляется возможным выбрать порог с
достаточной степенью обнаружения вложения.
3.4.
Анализ количества единичных выбросов
Визуальный анализ изображений текстовых документов формата А4 с
выделенными
увеличение
изменениями,
числа
появившимися
единичных
выбросов
после
после
вложения,
вложения
выявил
секретной
информации.
Под единичными выбросами понимаются искажения следующих
четырёх видов:
Вверх
Вниз
Вправо
Влево
(ВВЕРХ)
Основное предположение при разработке данного метода заключалось
в следующем: число единичных выбросов у одинакового объёма текста на
странице формата А4, будет схожим, а при вложении их число увеличится,
что даст нам возможность выбрать порог, который бы обеспечил высокую
степень обнаружения вложения секретной информации.
51
Начальные условия:
 для
стегоанализа
предоставлено
одно
или
несколько
изображений;
 для сбора статистики предоставлено некоторое количество
тестовых изображений без вложения с того же самого сканера;
 все изображения должны быть распечатаны на одном и том же
принтере и отсканированы одним и тем же сканером (данное
условие появилось в результате исследований);
 известны алгоритмы погружения и извлечения секретной
информации;
 покрывающее сообщение не известно.
Блок - схема алгоритма работы атаки анализом количества единичных
выбросов изображена на схеме 8.
Пояснения к работе алгоритма:
 база тестовых изображений предназначена для сбора статистики,
необходимой для выбора порогов;
 вычисление количества чёрных пикселей выполняется с целью
определения плотности текста на странице;
 пороги выбираются в соответствии с плотностями текста на
странице (в нашем исследовании шаг выбирался равным 50 000
чёрных пикселей).
52
База тестовых
Изображение для
изображений
стегоанализа
Вычисление количества
единичных выбросов
Вычисление количества
единичных выбросов
Вычисление количества
чёрных пикселей на
странице
Вычисление количества
чёрных пикселей на
странице
Выбор порогов для
различных объёмов
текста
Сравнение
Порог превышен
Порог не превышен
Есть вложение
Нет вложения
Схема 8. Блок – схема алгоритма работы атаки анализом количества единичных выбросов
Как показали тесты, статистика, собранная при использовании одного
принтера и одного сканера, отличается от статистики собранной при замене
принтера или сканера. По этой причине в исследовании были использованы 5
различных принтеров и 2 сканера.
53
Тест № 1:
Целью данного теста является получение статистики прироста
единичных выбросов при вложении секретной информации в изображение
текстового документа формата А4 со следующими параметрами:
 [n = 20, k = 0,01] ;
 [n = 100, k = 0,01] ;
 [n = 100, k = 0,1] .
При таком выборе параметров n и k
в изображение текстового
документа формата А4 в первом случае производится вложение 8000 – 12000
бит секретной информации, при выборе второй пары производится вложение
550 – 600 бит секретной информации, при выборе третьей пары вкладывается
400 – 500 бит секретной информации.
 Текстовый документ, объёмом в 20 страниц был распечатан на
четырёх разных принтерах;
 распечатанные страницы отсканированы на одном сканере;
 во все изображения текстовых документов произведено вложение
секретной информации с указанными ранее параметрами n и k;
 произведен подсчет количества единичных выбросов до и после
вложения.
В таблицах 7, 8, 9 и 10 приведены результаты подсчёта единичных
выбросов для первого принтера до вложения и после вложения с тремя
парами параметров n и k. В таблицах 11, 12, 13 и 14 результаты для второго
принтера, в таблицах 15, 16, 17 и 18 для третьего, в таблицах 19, 20, 21 и 22
для четвёртого.
54
Таблица 7. Количество единичных выбросов для принтера № 1 до вложения
Изображение до вложения
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вверх
462
545
601
637
617
661
607
594
586
554
612
560
627
616
444
560
603
511
533
537
Вниз
509
609
660
701
717
704
678
791
671
632
772
676
721
721
559
649
595
652
721
661
Влево
495
607
695
694
623
625
725
675
725
616
781
625
672
667
512
607
644
531
587
565
Вправо
492
672
555
712
673
587
651
660
663
592
680
608
670
666
465
539
601
531
564
540
ВСЕГО
1958
2433
2511
2744
2630
2577
2661
2720
2645
2394
2845
2469
2690
2670
1980
2355
2443
2225
2405
2303
Таблица 8. Количество единичных выбросов для принтера № 1 после вложения с [n = 20, k = 0,01]
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено бит
8522
9024
10011
10231
9994
10296
10165
10421
9643
9797
9991
9489
9580
10084
8094
9619
9793
9066
9639
9734
Вверх
602
654
743
788
799
818
750
743
728
691
782
696
746
780
565
693
734
591
665
679
Вниз
542
654
713
773
791
770
735
866
728
708
830
726
776
767
622
695
655
705
782
716
55
Влево
649
757
866
851
806
787
862
819
897
761
937
788
782
845
621
778
788
682
748
702
Вправо
720
936
787
951
887
825
903
897
881
815
915
823
885
872
666
764
808
742
790
792
ВСЕГО
2513
3001
3109
3363
3283
3200
3250
3325
3234
2975
3464
3033
3189
3264
2474
2930
2985
2720
2985
2889
Таблица 9. Количество единичных выбросов для принтера № 1 после вложения с [n = 100, k = 0,01]
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено бит
567
584
597
615
616
608
618
613
594
601
611
590
584
611
555
617
589
582
620
609
Вверх
464
551
592
639
627
661
602
595
592
553
609
562
618
609
455
572
614
506
528
528
Вниз
509
611
662
702
721
704
680
794
673
632
775
679
726
721
561
650
595
652
723
665
Влево
495
614
699
698
629
626
732
682
730
624
785
625
679
673
518
614
652
539
598
574
Вправо
493
688
561
720
677
587
657
667
676
603
688
613
674
670
475
545
607
537
578
545
ВСЕГО
1961
2464
2514
2759
2654
2578
2671
2738
2671
2412
2857
2479
2697
2673
2009
2381
2468
2234
2427
2312
Таблица 10. Количество единичных выбросов для принтера № 1 после вложения с [n = 100, k = 0,1]
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено бит
372
439
463
486
470
498
492
489
437
474
440
418
407
435
338
443
480
407
445
439
Вверх
477
544
602
635
622
649
599
600
591
552
615
562
627
623
440
567
606
505
525
537
56
Вниз
509
612
660
700
718
704
678
793
674
635
775
677
723
722
561
654
594
651
722
661
Влево
498
614
700
699
628
631
733
681
732
623
783
629
676
674
520
610
648
533
594
567
Вправо
496
687
561
721
676
597
654
669
669
598
687
608
674
669
472
547
608
540
571
542
ВСЕГО
1980
2457
2523
2755
2644
2581
2664
2743
2666
2408
2860
2476
2700
2688
1993
2378
2456
2229
2412
2307
Таблица 11. Количество единичных выбросов для принтера № 2 до вложения
Изображение до вложения
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вверх
409
428
553
586
511
470
534
559
493
517
520
464
511
497
406
483
452
458
465
474
Вниз
577
578
667
645
654
670
627
688
625
667
700
673
650
622
521
604
600
592
619
646
Влево
466
500
549
623
585
579
612
555
543
574
565
517
501
524
452
511
518
506
481
546
Вправо
493
528
624
579
563
636
562
594
534
547
532
514
508
528
393
526
527
490
560
535
ВСЕГО
1945
2034
2393
2433
2313
2355
2335
2396
2195
2305
2317
2168
2170
2171
1772
2124
2097
2046
2125
2201
Таблица 12. Количество единичных выбросов для принтера № 2 после вложения с [n = 20, k = 0,01]
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено бит
8624
9146
10137
10393
10105
10445
10144
10544
9789
9838
10111
9408
9607
10160
8160
9624
9857
9005
9649
9809
Вверх
521
573
684
657
678
630
669
702
673
607
638
622
666
653
562
608
587
565
583
600
57
Вниз
638
641
759
693
707
739
682
759
682
711
759
727
697
698
585
647
677
641
674
708
Влево
570
644
691
775
724
755
769
716
724
726
720
672
774
687
569
667
662
632
652
677
Вправо
693
765
908
848
793
910
813
824
772
802
801
754
830
794
594
767
775
728
821
753
ВСЕГО
2422
2623
3042
2973
2902
3034
2933
3001
2851
2846
2918
2775
2967
2832
2310
2689
2701
2566
2730
2738
Таблица 13. Количество единичных выбросов для принтера № 2 после вложения с [n = 100, k = 0,01]
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено бит
583
598
588
632
623
629
635
627
596
615
623
603
628
613
540
621
621
593
612
619
Вверх
413
424
558
584
514
472
548
550
497
513
522
461
519
494
421
487
450
454
469
471
Вниз
577
582
675
648
657
671
627
690
630
667
706
675
651
629
523
607
605
593
622
648
Влево
472
509
556
625
591
584
620
563
556
581
567
521
507
536
458
520
525
513
491
550
Вправо
500
543
636
590
577
646
570
605
542
556
536
525
518
539
400
533
536
507
572
539
ВСЕГО
1962
2058
2425
2447
2339
2373
2365
2408
2225
2317
2331
2182
2195
2198
1802
2147
2116
2067
2154
2208
Таблица 14. Количество единичных выбросов для принтера № 2 после вложения с [n = 100, k = 0,1]
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено бит
358
426
479
482
474
485
465
505
448
459
460
444
418
463
329
448
451
402
438
442
Вверх
414
429
559
580
518
478
540
561
495
514
517
454
511
498
400
482
454
459
464
457
58
Вниз
578
582
674
650
657
672
626
692
630
666
702
673
652
629
523
606
602
594
621
647
Влево
468
502
556
624
589
583
616
563
553
580
570
519
502
533
455
524
522
507
486
551
Вправо
497
539
635
586
571
643
568
596
540
556
533
522
516
535
400
534
533
498
567
548
ВСЕГО
1957
2052
2424
2440
2335
2376
2350
2412
2218
2316
2322
2168
2181
2195
1778
2146
2111
2058
2138
2203
Таблица 15. Количество единичных выбросов для принтера № 3 до вложения
Изображение до вложения
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вверх
352
368
429
440
415
445
445
423
386
372
405
370
394
433
353
360
368
332
358
384
Вниз
1097
1062
1223
1224
1241
1265
1239
1246
1143
1105
1203
1139
1093
1127
925
1059
1080
1050
1151
1109
Влево
748
798
887
887
792
889
863
923
824
774
792
750
820
729
643
786
759
703
783
756
Вправо
670
768
827
880
811
835
831
835
792
769
825
718
723
764
643
746
746
667
780
737
ВСЕГО
2867
2996
3366
3431
3259
3434
3378
3427
3145
3020
3225
2977
3030
3053
2564
2951
2953
2752
3072
2986
Таблица 16. Количество единичных выбросов для принтера № 3 после вложения с [n = 20, k = 0,01]
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено бит
8494
8986
9907
10146
9931
10217
10031
10234
9547
9746
9941
9391
9338
9970
7869
9493
9650
8920
9474
9680
Вверх
510
539
599
564
610
631
625
626
550
534
562
524
557
581
505
534
528
493
533
558
59
Вниз
1124
1102
1259
1263
1271
1292
1281
1276
1168
1159
1253
1184
1135
1170
959
1111
1130
1094
1183
1157
Влево
918
985
1071
1089
979
1078
1072
1118
1019
998
981
926
1017
934
791
963
905
859
953
906
Вправо
879
1004
1024
1081
1005
1062
1048
1064
1023
983
1045
922
925
950
829
984
976
868
958
940
ВСЕГО
3431
3630
3953
3997
3865
4063
4026
4084
3760
3674
3841
3556
3634
3635
3084
3592
3539
3314
3627
3561
Таблица 17. Количество единичных выбросов для принтера № 3 после вложения с [n = 100, k = 0,01]
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено бит
562
588
571
605
589
603
626
600
583
580
611
569
587
580
518
614
566
570
582
603
Вверх
348
367
445
434
430
463
458
436
392
378
422
376
405
443
358
374
366
346
367
383
Вниз
1096
1066
1225
1225
1243
1265
1238
1245
1144
1104
1202
1140
1096
1128
929
1059
1080
1053
1153
1112
Влево
752
802
898
895
797
902
883
939
830
793
803
756
833
732
642
798
766
711
786
760
Вправо
679
776
838
886
818
842
843
845
799
778
831
727
727
767
647
759
748
680
789
748
ВСЕГО
2875
3011
3406
3440
3288
3472
3422
3465
3165
3053
3258
2999
3061
3070
2576
2990
2960
2790
3095
3003
Таблица 18. Количество единичных выбросов для принтера № 3 после вложения с [n = 100, k = 0,1]
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено бит
340
410
440
484
445
468
450
458
421
417
427
414
393
415
286
425
426
361
402
412
Вверх
360
376
433
430
417
452
457
425
403
389
419
370
400
440
364
367
375
343
369
389
60
Вниз
1095
1061
1224
1224
1242
1264
1240
1246
1146
1105
1207
1141
1096
1129
928
1061
1081
1050
1152
1111
Влево
751
802
894
902
796
897
875
934
831
783
800
755
827
730
645
791
768
712
793
766
Вправо
674
778
832
883
819
842
838
845
797
777
830
721
729
770
646
750
755
678
787
746
ВСЕГО
2880
3017
3383
3439
3274
3455
3410
3450
3177
3054
3256
2987
3052
3069
2583
2969
2979
2783
3101
3012
Таблица 19. Количество единичных выбросов для принтера № 4 до вложения
Изображение до вложения
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вверх
322
400
402
498
454
438
428
405
418
431
465
387
438
445
401
413
425
406
432
447
Вниз
445
480
548
521
509
568
568
601
539
556
566
569
541
546
431
504
527
501
560
524
Влево
492
580
571
622
574
610
526
595
571
562
556
505
540
548
452
540
507
531
598
553
Вправо
484
544
565
576
547
571
564
583
555
541
543
526
480
562
468
524
560
479
526
545
ВСЕГО
1743
2004
2086
2217
2084
2187
2086
2184
2083
2090
2130
1987
1999
2101
1752
1981
2019
1917
2116
2069
Таблица 20. Количество единичных выбросов для принтера № 4 после вложения с [n = 20, k = 0,01]
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено бит
8673
9034
9987
10209
10060
10409
10223
10483
9823
9882
10132
9571
9549
10084
8087
9712
9903
9015
9648
9713
Вверх
497
549
577
663
643
648
590
589
562
627
634
543
583
638
557
567
579
593
608
649
61
Вниз
513
535
594
583
568
641
617
652
595
612
637
625
608
596
480
560
608
554
621
588
Влево
626
723
708
789
731
783
683
784
734
753
719
652
671
744
589
706
645
673
740
723
Вправо
697
808
816
856
823
828
838
828
799
777
812
752
732
833
690
776
814
720
793
798
ВСЕГО
2333
2615
2695
2891
2765
2900
2728
2853
2690
2769
2802
2572
2594
2811
2316
2609
2646
2540
2762
2758
Таблица 21. Количество единичных выбросов для принтера № 4 после вложения с [n = 100, k = 0,01]
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено бит
604
595
605
626
606
623
631
631
600
616
615
595
618
613
576
597
613
578
609
606
Вверх
322
403
406
505
465
437
440
415
431
452
474
396
439
454
407
422
437
402
444
457
Вниз
445
484
556
521
513
573
576
602
541
557
569
574
545
549
434
508
533
502
560
529
Влево
322
403
406
505
465
437
440
415
431
452
474
396
439
454
407
422
437
402
444
457
Вправо
484
553
573
583
553
577
572
591
568
548
551
536
494
569
478
533
570
481
536
553
ВСЕГО
1573
1843
1941
2114
1996
2024
2028
2023
1971
2009
2068
1902
1917
2026
1726
1885
1977
1787
1984
1996
Таблица 22. Количество единичных выбросов для принтера № 4 после вложения с [n = 100, k = 0,1]
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено бит
364
440
482
501
469
503
483
476
459
437
482
451
421
485
334
457
461
399
460
460
Вверх
333
401
401
508
460
451
434
405
422
441
472
393
440
453
405
421
433
414
442
460
62
Вниз
448
483
552
522
510
573
572
601
540
558
568
571
543
550
432
506
530
502
561
526
Влево
496
585
580
633
579
618
529
603
579
570
562
514
545
560
456
549
511
539
605
563
Вправо
487
554
571
587
556
580
570
590
567
548
552
536
487
569
474
531
566
488
536
552
ВСЕГО
1764
2023
2104
2250
2105
2222
2105
2199
2108
2117
2154
2014
2015
2132
1767
2007
2040
1943
2144
2101
Визуальный
анализ
позволил
выявить
увеличение
количества
единичных выбросов после вложения секретной информации.
Из таблиц 7 – 22 видно, что при вложении секретного сообщения со
скоростью 8000 – 12000 бит/ на страницу текста формата А4, прирост
количества единичных выбросов составляет 500 – 600 выбросов.
При вложении секретного сообщения со скоростями 550 – 600 и 400 –
500 бит/ на страницу текста формата А4 прирост не превышает 30 выбросов.
Из таблиц 7 – 22 также видно, что задача выбора универсального
порога, который бы обеспечил высокую надёжность обнаружения для всех
принтеров оказывается довольно трудной (для одного и того же текстового
документа, распечатанного на различных принтерах разброс в количестве
единичных выбросов доходит до 800 выбросов);
63
Тест № 2:
Целью второго теста является оценка эффективности обнаружения
вложения секретной информации с различными скоростями вложения
методом анализа количества единичных выбросов.
 Текстовый документ, объёмом в 80 страниц был распечатан на
пятом принтере;
 распечатанные документы формата А4 отсканированы на одном
сканере;
 первые двадцать изображений были использованы для сбора
статистики и последующего выбора порогов;
 вложение проводилось со следующими парами параметров:
o [n = 20, k = 0,01];
o [n = 100, k = 0,01];
o [n = 100, k = 0,1].
 каждая пара параметров была использована для вложения в пять,
выбранных произвольным образом, изображений;
 произведён поиск изображений с вложениями.
В таблице 23 представлен результат подсчёта количества чёрных
пикселей и единичных выбросов в 20 тестовых изображениях.
В таблице 24 представлены пороги, выбранные на основе статистики
собранной по 20 тестовым изображениям.
64
Таблица 23. Статистика 20 тестовых изображений
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вверх
431
430
524
520
566
533
509
532
523
500
492
486
438
512
476
430
488
519
448
489
Вниз
449
560
639
700
618
670
606
694
649
699
710
616
643
626
616
659
605
611
636
704
Влево Вправо ВСЕГО
495
455
1830
670
622
2282
709
742
2614
713
684
2617
737
668
2589
699
759
2661
751
732
2598
736
705
2667
638
637
2447
735
710
2644
723
684
2609
602
673
2377
694
615
2390
683
617
2438
608
603
2303
705
646
2440
660
637
2390
666
652
2448
669
656
2409
651
634
2478
Количество чёрных пикселей
630132
755554
876796
874908
856913
863559
868162
904780
810166
865220
849712
811326
805208
836235
761816
801786
817163
804599
812757
823540
Таблица 24. Выбранные пороги
Количество чёрных пикселей
Пороги для количества выбросов
600000 – 650000
1950
650000 – 700000
2150
700000 – 750000
2350
750000 – 800000
2550
800000 – 850000
2750
850000 – 900000
2950
900000 – 950000
3150
65
Пояснение к выбору порогов:
 находится диапазон количества чёрных пикселей с наибольшим
числом тестовых изображений;
 к максимальному количеству выбросов внутри диапазона
прибавляется 150, это значение и становится порогом;
 далее выбираются пороги для остальных диапазонов, прибавляя
или отнимая 200 от порога, выбранного для диапазона с
наибольшим количеством тестовых изображений.
В
таблице
25
содержатся
номера
изображений,
в
которые
производилось вложение, количество вложенной информации, а так же
параметр difference, показывающий какое количество пикселей изменилось в
исходном изображении после вложения.
66
Таблица 25. Изображения с вложениями
№ изображения
Вложено, бит
Difference
Вложение с параметрами [n = 20, k = 0,01]
45
11220
5623
51
9400
4698
57
9644
4836
73
9978
5033
79
10275
5198
Вложение с параметрами [n = 100, k = 0,01]
23
608
315
27
581
272
42
621
303
48
640
326
50
618
294
Вложение с параметрами [n = 100, k = 0,1]
41
519
256
56
453
207
62
391
192
67
497
238
80
519
276
Таблица 26. Результаты обнаружения
Изобр. Вверх Вниз Влево Вправо ВСЕГО
21
513
639
724
694
2570
22
503
651
680
643
2477
23
466
653
632
712
2463
24
453
529
622
665
2269
25
434
608
640
650
2332
26
405
572
609
652
2238
27
439
563
653
631
2286
28
426
573
660
651
2310
29
422
606
625
589
2242
30
426
498
666
641
2231
31
366
480
548
589
1983
32
394
501
570
639
2104
33
443
507
534
546
2030
34
420
649
648
661
2378
35
386
596
614
600
2196
36
402
520
645
624
2191
37
413
453
555
531
1952
38
391
505
576
535
2007
39
464
642
720
727
2553
40
409
593
715
597
2314
41
501
669
753
718
2641
67
Колич. черн. пикс.
850509
841826
798781
857146
870794
848059
804339
843928
806678
829630
731521
803243
783133
864319
813422
789239
744120
761440
874263
752405
877083
Рез. анализа
ОК
ОК
ПРОПУСК
ОК
ОК
ОК
ПРОПУСК
ОК
ОК
ОК
ОК
ОК
ОК
ОК
ОК
ОК
ОК
ОК
ОК
ОК
ПРОПУСК
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
508
539
519
795
485
481
508
465
507
601
500
568
534
554
505
672
467
369
494
526
467
498
582
530
532
499
492
496
511
551
500
740
520
531
485
544
557
718
591
659
677
606
775
640
662
684
648
644
719
624
665
689
729
660
708
595
525
657
642
560
639
647
687
706
666
623
637
698
714
646
748
661
655
564
709
695
748
754
733
740
764
998
736
769
813
727
759
850
724
763
793
857
713
890
647
666
707
758
676
750
793
783
783
825
809
785
741
825
689
992
803
800
758
809
881
1007
895
698
706
737
1091
721
762
710
683
747
937
729
759
766
814
709
940
747
561
681
691
661
711
769
794
839
791
742
732
760
813
683
1079
773
795
707
834
812
1128
823
2598
2662
2626
3659
2582
2674
2715
2523
2657
3107
2577
2755
2782
2954
2587
3210
2456
2121
2539
2617
2364
2598
2791
2794
2860
2781
2666
2650
2710
2903
2518
3559
2757
2781
2514
2896
2945
3601
3063
851749
849087
843551
946030
851785
885231
885834
841536
850749
810658
828440
883668
910328
924754
813280
829337
833376
728304
822035
837684
754718
863169
911449
871635
903199
874827
832504
843952
824490
915807
789339
859889
858867
837569
742726
902449
897774
895940
907919
ПРОПУСК
ОК
ОК
ВЛОЖЕНИЕ
ОК
ОК
ПРОПУСК
ОК
ПРОПУСК
ВЛОЖЕНИЕ
ОК
ОК
ОК
ОК
ПРОПУСК
ВЛОЖЕНИЕ
ОК
ОК
ОК
ОК
ПРОПУСК
ОК
ОК
ОК
ОК
ПРОПУСК
ОК
ОК
ОК
ОК
ОК
ВЛОЖЕНИЕ
ОК
ЛОЖНАЯ ТРЕВОГА
ЛОЖНАЯ ТРЕВОГА
ОК
ОК
ВЛОЖЕНИЕ
ПРОПУСК
В таблице 26 приведены результаты обнаружения стегоизображений.
Столбец с количеством изменённых пикселей в таблице 25 объясняет
почему прирост при скоростях вложения равных 550 – 600 и 400 – 500 бит/
на страницу текста формата А4 не превышает 30. Это связано с тем, что
68
количество пикселей, которые будут изменены после вложения, составляет
около 50% процентов от количества вкладываемых бит секретной
информации.
Результаты обнаружения СИ из таблицы 26 при выборе порогов
согласно таблице 24:
 Обнаружены 5 из 5 СИ со скоростью вложения 8000 – 12000 бит/
на страницу текста формата А4;
 пропущены 5 из 5 СИ со скоростью вложения 550 – 600 бит/ на
страницу текста формата А4;

пропущены 5 из 5 СИ со скоростью вложения 400 – 500 бит/ на
страницу текста формата А4;
 2 ложные тревоги.
Данный метод позволил со 100% вероятностью обнаружить СИ со
скоростью вложения 8000 – 12000 бит/ на страницу текста формата А4 (при
известных принтере и сканере).
Предложенный метод также позволил бы обнаруживать СИ и с
меньшими скоростями вложения, для этого необходимо совершенствовать
метод оценки плотности текста на странице. Как было сказано в главе 2,
имитация шумов сканера осуществляется за счёт того, что изменению могут
быть подвергнуты только пиксели, находящиеся на границе чёрного с белым.
Подсчёт количества чёрных пикселей на странице, использованный нами,
считает не только граничные пиксели, пригодные для изменения, но и
внутренние, которые не пригодны для изменения.
По этой причине внутри шага выбранных нами порогов флуктуации
количества единичных выбросов могут достигать 400 – 450 выбросов, что
означает, что если прирост количества таких выбросов окажется менее 500
метод начнёт давать сбои в виде пропусков СИ или ложных тревог.
69
Это утверждение справедливо и для метода обнаружения стегосистемы
подсчётом количества единичных углублений.
Обнаружение СИ с низкими скоростями вложения по рассмотренным
признакам не представляется возможным.
3.5.
Анализ количества единичных углублений
Визуальный анализ изображений текстовых документов формата А4 с
выделенными изменениями, появившимися после вложения, выявил, что на
ряду с увеличением числа единичных выбросов после вложения секретной
информации также увеличивается число единичных углублений.
Под единичными углублениями понимаются искажения следующих
четырёх видов:
Основное предположение при разработке данного метода заключалось
в следующем: число единичных углублений у одинакового объёма текста на
странице формата А4, будет схожим, а при вложении их число увеличится,
что даст нам возможность выбрать порог, который обеспечит высокую
степень обнаружения вложения секретной информации.
70
Начальные условия:
 для
стегоанализа
предоставлено
одно
или
несколько
изображений;
 для сбора статистики предоставлено некоторое количество
тестовых изображений без вложения с того же самого сканера;
 все изображения должны быть распечатаны на одном и том же
принтере и отсканированы одним и тем же сканером (данное
условие появилось в результате исследований);
 известны алгоритмы погружения и извлечения секретной
информации;
 покрывающее сообщение не известно.
Пояснения к работе алгоритма:
 база тестовых изображений предназначена для сбора статистики,
необходимой для выбора порогов;
 вычисление количества чёрных пикселей выполняется с целью
определения плотности текста на странице;
 пороги выбираются в соответствии с плотностями текста на
странице (в нашем исследовании шаг выбирался равным 50 000
чёрных пикселей).
71
Блок - схема алгоритма работы атаки анализом количества единичных
углублений изображена на схеме 9.
База тестовых
Изображение для
изображений
стегоанализа
Вычисление количества
единичных углублений
Вычисление количества
единичных углублений
Вычисление количества
чёрных пикселей на
странице
Вычисление количества
чёрных пикселей на
странице
Выбор порогов для
различных объёмов
текста
Сравнение
Порог превышен
Порог не превышен
Есть вложение
Нет вложения
Схема 9. Блок – схема алгоритма работы атаки анализом количества единичных углублений
72
Тест № 1:
Целью первого теста является получение статистики прироста
единичных углублений при вложении секретной информации в изображение
текстового документа формата А4 со следующими параметрами:
 [n = 20, k = 0,01] ;
 [n = 100, k = 0,01] ;
 [n = 100, k = 0,1] .
При таком выборе параметров n и k
в изображение текстового
документа формата А4 в первом случае производится вложение 8000 – 12000
бит секретной информации, при выборе второй пары производится вложение
550 – 600 бит секретной информации, при выборе третьей пары вкладывается
400 – 500 бит секретной информации.
 Текстовый документ, объёмом в 20 страниц был распечатан на
четырёх разных принтерах;
 распечатанные страницы отсканированы на одном сканере;
 во все изображения текстовых документов произведено вложение
секретной информации с указанными ранее параметрами n и k;
 произведен подсчет количества единичных углублений до и
после вложения.
В таблицах 27, 28, 29 и 30 приведены результаты подсчёта единичных
углублений для первого принтера до вложения и после вложения с тремя
парами параметров n и
k соответственно. В таблицах 31, 32, 33 и 34
результаты для второго принтера, в таблицах 35, 36, 37 и 38 для третьего, в
таблицах 39, 40, 41 и 42 для четвёртого.
73
Таблица 27. Количество единичных углублений для принтера № 1 до вложения
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Сверху
483
599
631
628
667
666
640
679
630
578
686
622
654
670
526
605
588
551
597
591
Снизу
582
611
697
777
758
767
753
782
719
710
804
743
781
758
579
685
685
693
751
674
Слева
630
747
875
899
780
807
889
853
896
797
965
781
869
827
612
715
750
662
753
730
Справа
672
864
841
953
895
873
969
886
885
770
926
856
879
920
612
751
808
745
737
810
ВСЕГО
2367
2821
3044
3257
3100
3113
3251
3200
3130
2855
3381
3002
3183
3175
2329
2756
2831
2651
2838
2805
Таблица 28. Количество единичных углублений для принтера № 1 после вложения с n = 20, k = 0,01
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено, бит
8522
9024
10011
10231
9994
10296
10165
10421
9643
9797
9991
9489
9580
10084
8094
9619
9793
9066
9639
9734
Сверху
1021
1093
1157
1176
1205
1247
1162
1220
1140
1149
1197
1115
1148
1155
991
1078
1111
969
1116
1092
74
Снизу
609
648
732
842
815
816
791
825
755
760
828
777
824
788
629
723
711
753
805
715
Слева
1205
1365
1625
1605
1487
1524
1549
1543
1580
1481
1657
1411
1505
1549
1110
1399
1408
1266
1438
1400
Справа
757
970
945
1066
1002
975
1086
999
973
891
1061
945
980
1022
689
856
913
829
821
932
ВСЕГО
3592
4076
4459
4689
4509
4562
4588
4587
4448
4281
4743
4248
4457
4514
3419
4056
4143
3817
4180
4139
Таблица 29. Количество единичных углублений для принтера № 1 после вложения с n = 100, k = 0,01
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено, бит
567
584
597
615
616
608
618
613
594
601
611
590
584
611
555
617
589
582
620
609
Сверху
490
620
641
629
687
672
653
689
649
605
702
635
675
681
563
613
610
554
603
595
Снизу
582
613
700
778
764
769
754
783
719
715
804
747
786
760
580
687
684
699
758
674
Слева
631
775
911
933
810
815
934
885
930
825
991
816
888
867
634
752
788
693
793
766
Справа
672
869
846
958
900
873
987
890
892
777
929
858
882
926
616
754
813
750
740
812
ВСЕГО
2375
2877
3098
3298
3161
3129
3328
3247
3190
2922
3426
3056
3231
3234
2393
2806
2895
2696
2894
2847
Таблица 30. Количество единичных углублений для принтера № 1 после вложения с n = 100, k = 0,1
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено, бит
358
426
479
482
474
485
465
505
448
459
460
444
418
463
329
448
451
402
438
442
Сверху
509
601
640
625
680
680
648
685
646
600
697
625
671
682
543
610
607
552
591
591
75
Снизу
582
612
698
779
763
770
752
782
719
714
801
746
784
760
580
689
686
697
756
675
Слева
648
778
897
919
810
840
922
895
928
815
988
802
881
856
626
740
780
688
778
739
Справа
675
866
845
959
898
878
874
890
884
777
931
857
882
921
614
753
814
748
740
812
ВСЕГО
2414
2857
3080
3282
3151
3168
3196
3252
3177
2906
3417
3030
3218
3219
2363
2792
2887
2685
2865
2817
Таблица 31. Количество единичных углублений для принтера № 2 до вложения
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Сверху
448
480
604
642
552
578
600
651
540
586
573
585
588
614
474
542
545
499
524
595
Снизу
548
488
675
605
609
580
675
659
575
601
611
590
644
591
468
560
611
569
596
605
Слева
548
622
674
719
773
787
705
708
723
722
780
682
644
691
569
724
679
651
658
728
Справа
448
480
604
642
552
578
600
651
540
586
573
585
588
614
474
542
545
499
524
595
ВСЕГО
1992
2070
2557
2608
2486
2523
2580
2669
2378
2495
2537
2442
2464
2510
1985
2368
2380
2218
2302
2523
Таблица 32. Количество единичных углублений для принтера № 2 после вложения с n = 20, k = 0,01
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено, бит
8624
9146
10137
10393
10105
10445
10144
10544
9789
9838
10111
9408
9607
10160
8160
9624
9857
9005
9649
9809
Сверху
1019
1038
1248
1269
1167
1220
1218
1234
1176
1192
1103
1158
1172
1166
937
1060
1109
1064
1072
1132
76
Снизу
579
549
731
686
656
633
730
689
630
642
660
622
703
635
510
607
667
618
647
651
Слева
1103
1206
1372
1488
1496
1455
1351
1383
1374
1468
1467
1336
1409
1367
1115
1411
1315
1332
1286
1342
Справа
758
770
944
961
893
939
939
990
889
879
926
902
967
871
671
825
851
792
860
879
ВСЕГО
3459
3563
4295
4404
4212
4247
4238
4296
4069
4181
4156
4018
4251
4039
3233
3903
3942
3806
3865
4004
Таблица 33. Количество единичных углублений для принтера № 2 после вложения с n = 100, k = 0,01
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено, бит
583
598
588
632
623
629
635
627
596
615
623
603
628
613
540
621
621
593
612
619
Сверху
470
502
638
682
578
603
626
668
567
612
593
596
617
629
496
561
558
521
548
595
Снизу
549
490
677
606
611
587
675
661
577
606
614
591
650
594
472
563
613
572
599
607
Слева
576
646
704
744
808
824
730
740
752
766
812
711
677
720
582
764
708
686
696
742
Справа
683
667
831
856
785
856
812
892
784
758
807
800
776
761
571
722
743
685
741
773
ВСЕГО
2278
2305
2850
2888
2782
2870
2843
2961
2680
2742
2826
2698
2720
2704
2121
2610
2622
2464
2584
2717
Таблица 34. Количество единичных углублений для принтера № 2 после вложения с n = 100, k = 0,1
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено, бит
358
426
479
482
474
485
465
505
448
459
460
444
418
463
329
448
451
402
438
442
Сверху
463
496
630
659
567
606
617
674
553
609
587
591
599
628
487
554
555
519
543
607
77
Снизу
548
490
677
605
611
587
676
660
578
602
614
589
646
592
471
562
611
573
597
608
Слева
569
638
689
752
800
807
724
737
743
754
800
713
662
712
582
762
703
677
691
753
Справа
683
665
830
852
783
851
811
892
782
754
809
795
774
761
571
722
743
684
739
778
ВСЕГО
2263
2289
2826
2868
2761
2851
2828
2963
2656
2719
2810
2688
2681
2693
2111
2600
2612
2453
2570
2746
Таблица 35. Количество единичных углублений для принтера № 3 до вложения
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Сверху
486
551
575
581
615
672
636
668
598
636
647
595
670
621
523
637
594
563
562
626
Снизу
738
786
900
892
902
936
921
945
911
744
887
791
800
840
659
863
854
802
861
786
Слева
692
723
843
827
785
820
770
878
828
751
821
785
759
709
697
734
764
687
760
784
Справа
662
734
833
926
896
877
907
923
850
831
869
756
805
829
680
789
836
767
914
839
ВСЕГО
2578
2794
3151
3226
3198
3305
3234
3414
3187
2962
3224
2927
3034
2999
2559
3023
3048
2819
3097
3035
Таблица 36. Количество единичных углублений для принтера № 3 после вложения с n = 20, k = 0,01
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено, бит
8494
8986
9907
10146
9931
10217
10031
10234
9547
9746
9941
9391
9338
9970
7869
9493
9650
8920
9474
9680
Сверху
825
975
963
922
1000
1051
1012
1078
977
990
1035
937
983
938
804
963
907
911
902
947
78
Снизу
762
818
921
922
927
948
947
980
938
771
929
812
826
860
683
882
860
824
875
825
Слева
1285
1312
1509
1544
1521
1512
1447
1603
1453
1427
1533
1412
1407
1371
1219
1398
1416
1260
1422
1451
Справа
728
840
906
1028
995
980
1007
1042
954
948
967
850
888
927
746
880
942
850
1010
946
ВСЕГО
3600
3945
4299
4416
4443
4491
4413
4703
4322
4136
4464
4011
4104
4096
3452
4123
4125
3845
4209
4169
Таблица 37. Количество единичных углублений для принтера № 3 после вложения с n = 100, k = 0,01
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено, бит
562
588
571
605
589
603
626
600
583
580
611
569
587
580
518
614
566
570
582
603
Сверху
494
565
594
581
620
700
668
699
611
656
672
608
700
625
542
652
597
575
574
640
Снизу
741
788
903
892
903
939
922
945
909
744
888
792
794
842
659
863
852
800
863
786
Слева
712
747
872
859
824
855
802
903
851
776
847
820
787
717
711
778
782
724
783
817
Справа
664
736
835
930
899
885
911
924
852
835
873
760
808
830
682
793
837
775
917
843
ВСЕГО
2611
2836
3204
3262
3246
3379
3303
3471
3223
3011
3280
2980
3089
3014
2594
3086
3068
2874
3137
3086
Таблица 38. Количество единичных углублений для принтера № 3 после вложения с n = 100, k = 0,1
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено, бит
340
410
440
484
445
468
450
458
421
417
427
414
393
415
286
425
426
361
402
412
Сверху
492
567
587
580
619
691
652
685
606
649
668
601
684
627
536
652
600
575
571
635
79
Снизу
738
786
902
891
903
936
921
946
912
746
889
792
799
838
655
863
852
799
862
787
Слева
703
736
862
866
822
844
809
902
844
776
845
804
779
729
705
764
789
709
781
814
Справа
663
738
832
925
898
882
910
924
851
833
871
757
805
830
682
789
840
772
916
841
ВСЕГО
2596
2827
3183
3262
3242
3353
3292
3457
3213
3004
3273
2954
3067
3024
2578
3068
3081
2855
3130
3077
Таблица 39. Количество единичных углублений для принтера № 4 до вложения
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Сверху
431
463
568
567
519
568
509
565
546
533
552
492
516
553
441
518
501
491
518
513
Снизу
430
460
548
531
554
603
584
541
527
519
544
556
516
534
425
498
500
551
544
508
Слева
631
651
732
867
709
752
704
851
721
759
765
654
733
744
629
675
655
681
728
748
Справа
679
665
823
823
777
812
786
824
751
768
774
702
723
764
615
729
752
698
776
785
ВСЕГО
2171
2239
2671
2788
2559
2735
2583
2781
2545
2579
2635
2404
2488
2595
2110
2420
2408
2421
2566
2554
Таблица 40. Количество единичных углублений для принтера № 4 после вложения с n = 20, k = 0,01
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено, бит
8673
9034
9987
10209
10060
10409
10223
10483
9823
9882
10132
9571
9549
10084
8087
9712
9903
9015
9648
9713
Сверху
941
1004
1151
1188
1166
1164
1118
1163
1129
1122
1164
1077
1115
1101
954
1053
1093
1039
1112
1094
80
Снизу
494
517
600
595
625
651
644
605
583
571
605
607
559
575
469
549
559
596
589
558
Слева
1191
1333
1444
1641
1398
1529
1413
1623
1404
1441
1481
1342
1394
1466
1201
1330
1348
1266
1423
1401
Справа
759
777
946
948
901
922
906
959
889
870
886
795
834
886
712
852
867
809
896
890
ВСЕГО
3385
3631
4141
4372
4090
4266
4081
4350
4005
4004
4136
3821
3902
4028
3336
3784
3867
3710
4020
3943
Таблица 41. Количество единичных углублений для принтера № 4 после вложения с n = 100, k = 0,01
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено, бит
604
595
605
626
606
623
631
631
600
616
615
595
618
613
576
597
613
578
609
606
Сверху
439
496
588
589
555
602
544
591
573
587
595
527
550
578
484
562
535
503
555
550
Снизу
431
461
554
531
555
604
590
548
531
521
550
558
516
537
427
498
506
552
546
512
Слева
636
685
783
896
751
794
743
887
759
785
805
691
764
781
659
706
695
683
776
784
Справа
679
669
830
825
781
813
789
825
757
772
776
708
729
770
617
730
753
698
779
792
ВСЕГО
2185
2311
2755
2841
2642
2813
2666
2851
2620
2665
2726
2484
2559
2666
2187
2496
2489
2436
2656
2638
Таблица 42. Количество единичных углублений для принтера № 4 после вложения с n = 100, k = 0,1
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено, бит
364
440
482
501
469
503
483
476
459
437
482
451
421
485
334
457
461
399
460
460
Сверху
450
491
585
594
545
595
533
585
567
574
579
516
545
569
473
548
526
522
543
549
81
Снизу
430
460
550
531
555
604
585
544
528
521
548
558
514
537
426
500
503
553
546
509
Слева
657
677
774
906
745
780
730
888
740
781
791
689
766
776
653
704
682
696
771
771
Справа
681
667
829
824
781
816
790
825
756
769
774
707
726
769
618
731
754
707
781
789
ВСЕГО
2218
2295
2738
2855
2626
2795
2638
2842
2591
2645
2692
2470
2551
2651
2170
2483
2465
2478
2641
2618
Из таблиц 27 – 42 видно, что при вложении секретного сообщения со
скоростью 8000 – 12000 бит/ на страницу текста формата А4 прирост
количества единичных углублений составляет 1200 – 1400 углублений.
При вложении секретного сообщения со скоростями 550 – 600 и 400 –
500 бит/ на страницу текста формата А4 для принтеров 1, 3 и 4 прирост не
превышает 60.
Для второго принтера при вложении секретного сообщения со
скоростями 550 – 600 и 400 – 500 бит/ на страницу текста формата А4
прирост не превышает 250.
82
Тест № 2:
Целью второго теста является получение статистики прироста
единичных углублений при вложении секретной информации в изображение
текстового документа формата А4 со следующими параметрами:
 [n = 25, k = 0,1] ;
 [n = 27, k = 0,1] ;
 [n = 30, k = 0,1] ;
 [n = 50, k = 0,01] .
При таком выборе параметров n и k
в изображение текстового
документа формата А4 в первом случае производится вложение 4500 - 6000
бит секретной информации, при выборе второй пары производится вложение
4000 - 4500 бит секретной информации, при выборе третьей пары
вкладывается 3500 - 4000 бит секретной информации, четвёртой 2000 – 2200
бит.
 Для теста были использованы пять изображений текстовых
документов распечатанных на принтере № 1;
 в эти пять изображений производилось вложение секретной
информации с параметрами n и k, выбранными ранее;
 для
каждого
изображения
было
высчитано
количество
единичных углублений до и после вложений.
В таблицах 43, 44, 45, 46 и 47 приведены результаты подсчёта
единичных углублений для первого принтера до и после вложения с
четырьмя парами параметров n и k соответственно.
83
Таблица 43. Количество единичных углублений для принтера № 1 до вложения
Изображение
1
2
3
4
5
Сверху
483
599
631
628
667
Снизу
582
611
697
777
758
Слева
630
747
875
899
780
Справа
672
864
841
953
895
ВСЕГО
2367
2821
3044
3257
3100
Таблица 44. Количество единичных углублений для принтера № 1 после вложения с [n = 25, k = 0,1]
Изображение
1
2
3
4
5
Вложено, бит
4453
4717
5018
5223
5122
Сверху
802
862
924
918
967
Снизу
589
616
717
792
772
Слева
931
1109
1233
1298
1180
Справа
723
922
900
1004
945
ВСЕГО
3045
3509
3774
4012
3864
Таблица 45. Количество единичных углублений для принтера № 1 после вложения с [n = 27, k = 0,1]
Изображение
1
2
3
4
5
Вложено, бит
3927
3966
4380
4516
4432
Сверху
733
823
859
855
928
Снизу
593
623
707
790
768
Слева
891
1040
1199
1197
1100
Справа
714
908
907
1013
947
ВСЕГО
2931
3394
3672
3855
3743
Таблица 46. Количество единичных углублений для принтера № 1 после вложения с [n = 30, k = 0,1]
Изображение
1
2
3
4
5
Вложено, бит
3254
3661
3727
3826
3817
Сверху
711
828
853
844
881
Снизу
592
615
702
779
767
Слева
855
1013
1163
1170
1052
Справа
703
902
879
991
939
ВСЕГО
2861
3358
3597
3784
3639
Таблица 47. Количество единичных углублений для принтера № 1 после вложения с [n = 50, k = 0,01]
Изображение
1
2
3
4
5
Вложено, бит
1983
2080
2216
2262
2214
Сверху
605
706
754
707
799
84
Снизу
587
616
703
784
763
Слева
715
877
996
1037
898
Справа
689
886
854
976
912
ВСЕГО
2596
3085
3307
3504
3372
Из таблиц 43 – 47 видно, что при вложении секретного сообщения со
скоростью 4500 – 6000 бит/ на страницу текста формата А4 прирост
количества единичных углублений составляет около 700 углублений.
При вложении секретного сообщения со скоростью 4000 – 4500 бит/ на
страницу текста формата А4 прирост количества единичных углублений
составляет около 600 углублений.
При вложении секретного сообщения со скоростью 3500 – 4000 бит/ на
страницу текста формата А4 прирост количества единичных углублений
составляет около 500 углублений.
При вложении секретного сообщения со скоростью 2000 – 2200 бит/ на
страницу текста формата А4 прирост количества единичных углублений
составляет около 200 - 250 углублений.
85
Тест № 3:
Целью третьего теста является оценка эффективности обнаружения
вложения секретной информации с различными скоростями вложения
методом анализа количества единичных углублений.
 Текстовый документ, объёмом в 80 страниц был распечатан на
пятом принтере;
 распечатанные документы формата А4 отсканированы на одном
сканере;
 первые двадцать изображений были использованы для сбора
статистики и последующего выбора порогов;
 вложение проводилось со следующими парами параметров;
o [n = 25, k = 0,1] ;
o [n = 100, k = 0,01] ;
o [n = 100, k = 0,1].
 каждая пара параметров была использована для вложения в пять,
выбранных произвольным образом, изображений;
 произведён поиск изображений с вложениями.
В таблице 48 представлен результат подсчёта количества чёрных
пикселей и единичных углублений в 20 тестовых изображениях.
86
Таблица 48. Статистика 20 тестовых изображений
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Сверху Снизу Слева Справа ВСЕГО Количество чёрных пикселей
429
400
588
644
2061
630132
486
447
758
724
2415
755554
633
580
905
947
3065
876796
582
575
848
897
2902
874908
583
566
829
862
2840
856913
578
569
822
903
2872
863559
558
590
880
856
2884
868162
621
603
958
920
3102
904780
512
555
772
846
2685
810166
589
649
854
895
2987
865220
631
625
879
851
2986
849712
534
557
736
788
2615
811326
515
503
796
793
2607
805208
561
546
807
827
2741
836235
527
512
726
774
2539
761816
522
546
747
729
2544
801786
585
523
765
832
2705
817163
533
520
773
832
2658
804599
543
554
780
869
2746
812757
564
543
820
798
2725
823540
В таблице 49 представлены пороги, выбранные на основе статистики
собранной по 20 тестовым изображениям.
Таблица 49. Выбранные пороги
Количество чёрных пикселей
600000 – 650000
650000 – 700000
700000 – 750000
750000 – 800000
800000 – 850000
850000 – 900000
900000 – 950000
Пороги для количества углублений
2200
2300
2400
2600
3000
3100
3200
87
В
таблице
50
содержатся
номера
изображений,
в
которые
производилось вложение и количество вложенной информации.
Таблица 50. Изображения с вложениями
№ изображения
Вложено, бит
Вложение с параметрами [n = 25, k = 0,1]
45
1090
51
902
57
970
73
1014
79
988
Вложение с параметрами [n = 27, k = 0,1]
23
816
27
820
42
958
48
921
50
954
Вложение с параметрами [n = 30, k = 0,1]
41
872
56
897
62
758
67
917
80
991
В таблице 51 приведены результаты обнаружения стегоизображений по
выбранным порогам.
Таблица 51. Результаты обнаружения
Изобр.
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Сверху Снизу Слева Справа ВСЕГО Колич. черн. пикс.
586
586
845
888
2905
850509
581
546
812
760
2699
841826
816
524
972
870
3182
797697
563
493
704
742
2502
857146
490
526
730
714
2460
870794
471
490
641
717
2319
848059
820
555
935
736
3046
803207
556
565
763
820
2704
843928
503
531
663
700
2397
806678
548
508
718
736
2510
829630
454
396
586
662
2098
731521
446
492
592
702
2232
803243
462
468
634
627
2191
783133
484
548
672
759
2463
864319
88
Рез. анализа
ОК
ОК
ВЛОЖЕНИЕ
ОК
ОК
ОК
ВЛОЖЕНИЕ
ОК
ОК
ОК
ОК
ОК
ОК
ОК
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
448
464
437
436
598
472
872
958
595
541
1090
602
584
921
564
954
902
543
592
618
602
897
970
529
503
568
590
758
605
598
582
564
917
565
559
550
637
554
1014
604
577
505
604
626
988
991
508
492
419
485
615
462
612
597
563
546
628
576
590
636
564
593
611
597
611
630
678
585
589
575
502
546
546
542
618
564
626
607
597
605
595
592
681
579
569
567
580
464
590
636
631
636
602
659
560
604
830
815
1027
1178
809
843
1320
767
834
1139
816
1194
1198
738
831
915
864
951
1127
748
716
770
777
909
819
850
881
864
1108
827
777
801
843
751
1217
815
805
748
908
851
1313
1093
695
673
636
677
872
741
815
885
808
901
978
828
915
894
886
907
821
843
915
945
920
823
906
869
729
885
798
831
855
918
873
860
920
851
835
877
945
788
974
857
829
809
937
999
987
940
2253
2288
2052
2202
2915
2490
3326
3618
2775
2831
4016
2773
2923
3590
2830
3648
3532
2721
2949
3108
3064
3256
3592
2721
2450
2769
2711
3040
2897
2930
2962
2895
3542
2848
2766
2820
3106
2672
3774
2843
2791
2526
3039
3112
3919
3660
89
813422
789239
744120
761440
874263
752405
875871
850369
849087
843551
947416
851785
885231
884670
841536
849600
811790
828440
883668
910328
924754
812272
830607
833376
728304
822035
837684
753756
863169
911449
871635
903199
873734
832504
843952
824490
915807
789339
861138
858867
837569
742726
902449
897774
897435
906858
ОК
ОК
ОК
ОК
ОК
ОК
ВЛОЖЕНИЕ
ВЛОЖЕНИЕ
ОК
ОК
ВЛОЖЕНИЕ
ОК
ОК
ВЛОЖЕНИЕ
ОК
ВЛОЖЕНИЕ
ВЛОЖЕНИЕ
ОК
ОК
ОК
ОК
ВЛОЖЕНИЕ
ВЛОЖЕНИЕ
ОК
ЛОЖНАЯ ТР.
ОК
ОК
ВЛОЖЕНИЕ
ОК
ОК
ОК
ОК
ВЛОЖЕНИЕ
ОК
ОК
ОК
ОК
ЛОЖНАЯ ТР.
ВЛОЖЕНИЕ
ОК
ОК
ЛОЖНАЯ ТР.
ОК
ЛОЖНАЯ ТР.
ВЛОЖЕНИЕ
ВЛОЖЕНИЕ
Результаты обнаружения СИ из таблицы 51 при выборе порогов
согласно таблице 49:
 Обнаружены 5 из 5 СИ со скоростью вложения 4500 – 6000 бит/
на страницу текста формата А4;
 обнаружены 5 из 5 СИ со скоростью вложения 4000 – 4500 бит/
на страницу текста формата А4;
 обнаружены 5 из 5 СИ со скоростью вложения 3500 – 4000 бит/
на страницу текста формата А4;
 4 ложные тревоги.
Данный метод позволил со 100% вероятностью обнаружить СИ со
скоростью вложения до 3500 бит/ на страницу текста формата А4 (при
известных принтере и сканере).
90
Глава 4. Результаты
обнаружения
стегосистем,
предложенными методами
Как показали тесты, проводимые в главе 3, атака вычислением
корреляции одинаковых букв текста и атака выполнением двумерного
преобразования Фурье от сканированных изображений не позволяют выбрать
порог с высокой степенью обнаружения вложения даже при вложении более
10000 бит на страницу.
4.1.
Атака анализом количества единичных выбросов
Для проверки работоспособности этого метода текстовые документы,
распечатанные на пятом принтере, были отсканированы сканером № 2. В
качестве порогов были выбраны пороги из таблицы 24 (пороги, выбранные
для сканера № 1).
В таблице 52 приведены номера изображений с вложениями и
количество вложенных бит.
Таблица 52. Изображения с вложениями
№ изображения
Вложено, бит
Вложение с параметрами [n = 20, k = 0,01]
21
9987
35
9488
44
10025
Вложение с параметрами [n = 25, k = 0,1]
22
5377
57
5165
79
5627
Вложение с параметрами [n = 27, k = 0,1]
33
4407
61
4530
80
5029
Вложение с параметрами [n = 30, k = 0,1]
29
3706
39
4140
66
4069
Результаты обнаружения приведены в таблице 53.
91
Таблица 53. Результаты обнаружения
Изобр.
u
Вниз
Влево
Вправо
ВСЕГО
Колич. черн. Пикс.
Рез. анализа
21
748
795
1068
1167
3778
883435
ВЛОЖЕНИЕ
22
645
790
956
942
3333
873347
ВЛОЖЕНИЕ
23
601
722
781
770
2874
832170
ЛОЖНАЯ ТРЕВОГА
24
570
734
781
708
2793
889713
ОК
25
689
742
817
814
3062
902462
ОК
26
545
707
837
780
2869
879691
ОК
27
588
641
818
707
2754
834356
ЛОЖНАЯ ТРЕВОГА
28
551
753
836
768
2908
876017
ОК
29
587
733
839
801
2960
837536
ВЛОЖЕНИЕ
30
564
752
778
738
2832
859857
ОК
31
452
606
746
686
2490
762036
ОК
32
630
725
838
712
2905
831148
ЛОЖНАЯ ТРЕВОГА
33
652
697
844
810
3003
811432
ВЛОЖЕНИЕ
34
643
709
842
810
3004
894496
ЛОЖНАЯ ТРЕВОГА
35
660
768
971
1038
3437
844958
ВЛОЖЕНИЕ
36
603
674
772
690
2739
819415
ОК
37
449
655
854
707
2665
773082
ЛОЖНАЯ ТРЕВОГА
38
508
609
759
727
2603
789048
ЛОЖНАЯ ТРЕВОГА
39
678
778
1016
996
3468
905607
ВЛОЖЕНИЕ
40
505
688
821
767
2781
783721
ЛОЖНАЯ ТРЕВОГА
41
648
887
932
945
3412
913483
ЛОЖНАЯ ТРЕВОГА
42
650
812
961
854
3277
884532
ЛОЖНАЯ ТРЕВОГА
43
682
878
877
846
3283
880442
ЛОЖНАЯ ТРЕВОГА
44
721
851
1068
1124
3764
872999
ВЛОЖЕНИЕ
45
684
941
1024
1004
3653
987756
ЛОЖНАЯ ТРЕВОГА
46
648
811
927
919
3305
887484
ЛОЖНАЯ ТРЕВОГА
47
607
926
923
895
3351
919089
ЛОЖНАЯ ТРЕВОГА
48
643
784
951
906
3284
919912
ЛОЖНАЯ ТРЕВОГА
49
649
818
918
813
3198
873210
ЛОЖНАЯ ТРЕВОГА
50
656
839
949
833
3277
885511
ЛОЖНАЯ ТРЕВОГА
51
617
837
887
796
3137
846541
ЛОЖНАЯ ТРЕВОГА
52
636
816
902
822
3176
860922
ЛОЖНАЯ ТРЕВОГА
53
634
867
986
908
3395
917798
ЛОЖНАЯ ТРЕВОГА
54
671
923
938
953
3485
945069
ЛОЖНАЯ ТРЕВОГА
55
689
902
1054
887
3532
946068
ЛОЖНАЯ ТРЕВОГА
56
685
836
1106
1021
3648
965877
ЛОЖНАЯ ТРЕВОГА
57
686
781
1035
978
3480
847437
ВЛОЖЕНИЕ
58
628
848
944
878
3298
863666
ЛОЖНАЯ ТРЕВОГА
59
619
795
929
893
3236
865307
ЛОЖНАЯ ТРЕВОГА
60
491
683
797
738
2709
758224
ЛОЖНАЯ ТРЕВОГА
61
716
796
1030
1026
3568
854990
ВЛОЖЕНИЕ
62
620
774
938
906
3238
874424
ЛОЖНАЯ ТРЕВОГА
63
559
716
794
803
2872
784341
ЛОЖНАЯ ТРЕВОГА
92
64
637
834
967
924
3362
898501
ЛОЖНАЯ ТРЕВОГА
65
731
865
979
915
3490
945038
ЛОЖНАЯ ТРЕВОГА
66
711
838
1053
1071
3673
908217
ВЛОЖЕНИЕ
67
666
830
1097
975
3568
939965
ЛОЖНАЯ ТРЕВОГА
68
707
914
946
968
3535
910133
ЛОЖНАЯ ТРЕВОГА
69
550
833
945
844
3172
865622
ЛОЖНАЯ ТРЕВОГА
70
612
770
952
957
3291
876726
ЛОЖНАЯ ТРЕВОГА
71
672
812
965
968
3417
859613
ЛОЖНАЯ ТРЕВОГА
72
718
911
1159
980
3768
955506
ЛОЖНАЯ ТРЕВОГА
73
578
762
860
859
3059
821510
ЛОЖНАЯ ТРЕВОГА
74
587
820
1009
897
3313
896127
ЛОЖНАЯ ТРЕВОГА
75
691
848
1026
924
3489
891283
ЛОЖНАЯ ТРЕВОГА
76
634
866
1049
947
3496
873383
ЛОЖНАЯ ТРЕВОГА
77
591
733
943
866
3133
774731
ЛОЖНАЯ ТРЕВОГА
78
635
840
1077
938
3490
938105
ЛОЖНАЯ ТРЕВОГА
79
795
909
1099
1134
3937
929901
ВЛОЖЕНИЕ
80
817
844
1140
1173
3974
930703
ВЛОЖЕНИЕ
По результатам таблицы 53 можно сделать вывод о том, что пороги
выбранные на основе статистики собранной на сканере № 1, оказались
пригодными для анализа изображений, полученных со сканера № 2.
В результате данного теста были обнаружены все 12 СИ с скоростями
вложения от 4000 до 10000 бит на страницу текста А4.
Необходимо отметить большое число ложных тревог. Как отмечалось в
главе 3, для уточнения порога необходим доступ к сканеру.
Уточним пороги, собрав статистику для сканера № 2.
Статистика, собранная по 20 тестовым изображениям приведена в
таблице 54.
93
Таблица 54. Статистика 20 тестовых изображений (выбросы)
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
u
481
565
731
708
673
686
659
699
581
636
626
601
609
623
546
583
538
555
556
565
Вниз
655
662
864
911
862
860
918
851
827
910
801
759
784
784
737
765
809
843
722
829
Влево
589
726
825
802
938
871
834
853
811
869
851
826
841
813
774
794
825
847
835
844
Вправо
619
641
824
816
759
825
824
791
779
841
822
753
742
709
717
794
774
744
780
803
ВСЕГО
2344
2594
3244
3237
3232
3242
3235
3194
2998
3256
3100
2939
2976
2929
2774
2936
2946
2989
2893
3041
Колич. чёрн. пикс.
652222
782652
909697
908065
890648
898544
900217
938429
838872
902138
885619
844421
834398
867660
792740
834695
849086
835210
844354
858496
На основе статистики, собранной в таблице 54 уточним пороги.
Уточнённые пороги представлены в таблице 55.
Таблица 55. Уточненные пороги (выбросы)
Количество чёрных пикселей
650000 – 700000
700000 – 750000
750000 – 800000
800000 – 850000
850000 – 900000
900000 – 950000
Порог для количества выбросов
2600
2800
3000
3200
3400
3600
Результаты обнаружения по уточненным порогам представлены в
таблице 56.
94
Таблица 56. Результаты обнаружения (выбросы) уточненные пороги
Изобр.
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
u Вниз Влево Вправо ВСЕГО Колич. чёрн. пикс.
748 795
1068
1167
3778
883435
645 790
956
942
3333
873347
601 722
781
770
2874
832170
570 734
781
708
2793
889713
689 742
817
814
3062
902462
545 707
837
780
2869
879691
588 641
818
707
2754
834356
551 753
836
768
2908
876017
587 733
839
801
2960
837536
564 752
778
738
2832
859857
452 606
746
686
2490
762036
630 725
838
712
2905
831148
652 697
844
810
3003
811432
643 709
842
810
3004
894496
660 768
971
1038
3437
844958
603 674
772
690
2739
819415
449 655
854
707
2665
773082
508 609
759
727
2603
789048
678 778
1016
996
3468
905607
505 688
821
767
2781
783721
648 887
932
945
3412
913483
650 812
961
854
3277
884532
682 878
877
846
3283
880442
721 851
1068
1124
3764
872999
684 941
1024
1004
3653
987756
648 811
927
919
3305
887484
607 926
923
895
3351
919089
643 784
951
906
3284
919912
649 818
918
813
3198
873210
656 839
949
833
3277
885511
617 837
887
796
3137
846541
636 816
902
822
3176
860922
634 867
986
908
3395
917798
671 923
938
953
3485
945069
689 902
1054
887
3532
946068
685 836
1106
1021
3648
965877
686 781
1035
978
3480
847437
628 848
944
878
3298
863666
619 795
929
893
3236
865307
491 683
797
738
2709
758224
716 796
1030
1026
3568
854990
620 774
938
906
3238
874424
95
Результат анализа
ВЛОЖЕНИЕ
ПРОПУСК
ОК
ОК
ОК
ОК
ОК
ОК
ПРОПУСК
ОК
ОК
ОК
ПРОПУСК
ОК
ВЛОЖЕНИЕ
ОК
ОК
ОК
ПРОПУСК
ОК
ОК
ОК
ОК
ВЛОЖЕНИЕ
ОК
ОК
ОК
ОК
ОК
ОК
ОК
ОК
ОК
ОК
ОК
ОК
ВЛОЖЕНИЕ
ОК
ОК
ОК
ВЛОЖЕНИЕ
ОК
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
559
637
731
711
666
707
550
612
672
718
578
587
691
634
591
635
795
817
Сбор
716
834
865
838
830
914
833
770
812
911
762
820
848
866
733
840
909
844
794
967
979
1053
1097
946
945
952
965
1159
860
1009
1026
1049
943
1077
1099
1140
статистики
803
924
915
1071
975
968
844
957
968
980
859
897
924
947
866
938
1134
1173
позволил
2872
3362
3490
3673
3568
3535
3172
3291
3417
3768
3059
3313
3489
3496
3133
3490
3937
3974
784341
898501
945038
908217
939965
910133
865622
876726
859613
955506
821510
896127
891283
873383
774731
938105
929901
930703
уточнить
пороги,
ОК
ОК
ОК
ВЛОЖЕНИЕ
ОК
ОК
ОК
ОК
ЛОЖНАЯ ТРЕВОГА
ОК
ОК
ОК
ЛОЖНАЯ ТРЕВОГА
ЛОЖНАЯ ТРЕВОГА
ЛОЖНАЯ ТРЕВОГА
ОК
ВЛОЖЕНИЕ
ВЛОЖЕНИЕ
что
привело
к
значительному уменьшению количества ложных тревог, но в тоже время это
привело к появлению пропусков. Как было отмечено в главе 3 для
эффективной работы данного метода необходимо, чтобы прирост количества
единичных выбросов был не менее 500, такое значение достигается при
скорости вложения равной 8000 – 12000 бит/ на страницу текста формата А4
(см. тесты в главе 3), а это означает что при меньшей скорости вложения
появление пропусков было ожидаемым.
96
4.2.
Атака анализом количества единичных углублений
Для проверки работоспособности этого метода текстовые документы,
распечатанные на пятом принтере, были отсканированы сканером № 2. В
качестве порогов были выбраны пороги из таблицы 49 (пороги, выбранные
для сканера № 1).
В таблице 52 приведены номера изображений с вложениями и
количество вложенных бит.
Результаты обнаружения приведены в таблице 57.
Таблица 57. Результаты обнаружения (углубления)
Изобр. Сверху Снизу Слева Справа ВСЕГО Колич. черн. пикс.
21
1331
696
1598
1088
4713
883435
22
1044
602
1214
880
3740
873347
23
602
585
802
801
2790
832170
24
611
658
728
777
2774
889713
25
665
584
756
793
2798
902462
26
610
583
693
771
2657
879691
27
567
559
744
680
2550
834356
28
647
627
765
756
2795
876017
29
829
610
968
768
3175
837536
30
622
612
669
759
2662
859857
31
508
527
654
693
2382
762036
32
654
575
723
711
2663
831148
33
934
572
982
790
3278
811432
34
701
624
819
852
2996
894496
35
1219
669
1349
860
4097
844958
36
601
604
714
734
2653
819415
37
567
533
699
691
2490
773082
38
546
524
676
714
2460
789048
39
1044
679
1166
1002
3891
905607
40
605
566
825
765
2761
783721
41
700
686
862
884
3132
913483
42
689
710
910
887
3196
884532
43
651
733
842
910
3136
880442
44
1294
745
1561
1027
4627
872999
45
724
736
1014
975
3449
987756
46
661
690
911
963
3225
887484
47
685
763
937
939
3324
919089
48
649
661
923
956
3189
919912
49
672
717
866
863
3118
873210
97
Рез. анализа
ВЛОЖЕНИЕ
ВЛОЖЕНИЕ
ОК
ОК
ОК
ОК
ОК
ОК
ВЛОЖЕНИЕ
ОК
ОК
ОК
ВЛОЖЕНИЕ
ОК
ВЛОЖЕНИЕ
ОК
ОК
ОК
ВЛОЖЕНИЕ
ЛОЖНАЯ ТР.
ЛОЖНАЯ ТР.
ЛОЖНАЯ ТР.
ЛОЖНАЯ ТР.
ВЛОЖЕНИЕ
ЛОЖНАЯ ТР.
ЛОЖНАЯ ТР.
ЛОЖНАЯ ТР.
ОК
ЛОЖНАЯ ТР.
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
668
682
658
665
759
675
686
1005
628
608
531
1018
658
557
672
769
997
682
702
623
659
722
788
637
664
649
599
590
697
1149
1061
686
702
696
709
769
741
678
643
693
656
573
682
612
560
712
744
746
714
732
701
626
679
715
606
655
655
718
628
645
750
721
878
807
845
915
927
1049
1035
1102
863
861
754
1189
843
812
934
970
1159
987
937
937
864
823
949
846
922
895
874
789
914
1317
1273
859
860
882
906
976
950
995
851
882
888
773
904
835
824
943
1009
987
974
923
915
895
887
960
879
871
867
836
853
973
1067
1065
3091
3051
3081
3195
3431
3415
3394
3601
3066
3013
2631
3793
2948
2753
3261
3492
3889
3357
3294
3176
3044
3111
3412
2968
3112
3066
3027
2860
3229
4283
4120
885511
846541
860922
917798
945069
946068
965877
847437
863666
865307
758224
854990
874424
784341
898501
945038
908217
939965
910133
865622
876726
859613
955506
821510
896127
891283
873383
774731
938105
929901
930703
ОК
ЛОЖНАЯ ТР.
ОК
ОК
ЛОЖНАЯ ТР.
ЛОЖНАЯ ТР.
ОК
ВЛОЖЕНИЕ
ОК
ОК
ЛОЖНАЯ ТР.
ВЛОЖЕНИЕ
ОК
ЛОЖНАЯ ТР.
ЛОЖНАЯ ТР.
ЛОЖНАЯ ТР.
ВЛОЖЕНИЕ
ЛОЖНАЯ ТР.
ЛОЖНАЯ ТР.
ЛОЖНАЯ ТР.
ОК
ЛОЖНАЯ ТР.
ОК
ОК
ЛОЖНАЯ ТР.
ОК
ОК
ЛОЖНАЯ ТР.
ЛОЖНАЯ ТР.
ВЛОЖЕНИЕ
ВЛОЖЕНИЕ
По результатам таблицы 57 можно сделать вывод о том, что пороги
выбранные на основе статистики собранной на сканере № 1, оказались
пригодными для анализа изображений, полученных со сканера № 2.
В результате данного теста были обнаружены все 12 СИ с скоростями
вложения от 4000 до 10000 бит на страницу текста А4.
Необходимо отметить большое число ложных тревог. Как отмечалось в
главе 3, для уточнения порога необходим доступ к сканеру.
Уточним пороги, собрав статистику для сканера № 2.
98
Статистика, собранная по 20 тестовым изображениям приведена в
таблице 58.
Таблица 58. Статистика 20 тестовых изображений (углубления)
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Сверху
515
542
710
665
675
721
716
744
607
694
690
614
677
622
609
632
615
607
621
588
Снизу
519
560
718
699
717
752
774
712
651
693
691
670
650
702
600
651
661
737
583
640
Слева Справа ВСЕГО
625
715
2374
721
751
2574
917
939
3284
883
931
3178
896
922
3210
910
971
3354
944
927
3361
922
925
3303
861
864
2983
965
973
3325
928
982
3291
877
869
3030
877
849
3053
845
803
2972
817
837
2863
809
835
2927
862
857
2995
859
863
3066
880
864
2948
857
849
2934
Колич. чёрн. пикс.
652222
782652
909697
908065
890648
898544
900217
938429
838872
902138
885619
844421
834398
867660
792740
834695
849086
835210
844354
858496
На основе статистики, собранной в таблице 58 уточним пороги.
Уточнённые пороги представлены в таблице 59.
Таблица 59. Уточненные пороги (углубления)
Количество чёрных пикселей
650000 – 700000
700000 – 750000
750000 – 800000
800000 – 850000
850000 – 900000
900000 – 950000
Порог для количества углублений
2600
2800
3000
3200
3500
3700
Результаты обнаружения приведены в таблице 60.
99
Таблица 60. Результаты обнаружения (углубления) уточненные пороги
Изобр.
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Сверху Снизу Слева Справа ВСЕГО Колич. чёрн. пикс. Результат анализа
1331
696
1598
1088
4713
883435
ВЛОЖЕНИЕ
1044
602
1214
880
3740
873347
ВЛОЖЕНИЕ
602
585
802
801
2790
832170
ОК
611
658
728
777
2774
889713
ОК
665
584
756
793
2798
902462
ОК
610
583
693
771
2657
879691
ОК
567
559
744
680
2550
834356
ОК
647
627
765
756
2795
876017
ОК
829
610
968
768
3175
837536
ПРОПУСК
622
612
669
759
2662
859857
ОК
508
527
654
693
2382
762036
ОК
654
575
723
711
2663
831148
ОК
934
572
982
790
3278
811432
ВЛОЖЕНИЕ
701
624
819
852
2996
894496
ОК
1219
669
1349
860
4097
844958
ВЛОЖЕНИЕ
601
604
714
734
2653
819415
ОК
567
533
699
691
2490
773082
ОК
546
524
676
714
2460
789048
ОК
1044
679
1166
1002
3891
905607
ВЛОЖЕНИЕ
605
566
825
765
2761
783721
ОК
700
686
862
884
3132
913483
ОК
689
710
910
887
3196
884532
ОК
651
733
842
910
3136
880442
ОК
1294
745
1561
1027
4627
872999
ВЛОЖЕНИЕ
724
736
1014
975
3449
987756
ОК
661
690
911
963
3225
887484
ОК
685
763
937
939
3324
919089
ОК
649
661
923
956
3189
919912
ОК
672
717
866
863
3118
873210
ОК
668
686
878
859
3091
885511
ОК
682
702
807
860
3051
846541
ОК
658
696
845
882
3081
860922
ОК
665
709
915
906
3195
917798
ОК
759
769
927
976
3431
945069
ОК
675
741
1049
950
3415
946068
ОК
686
678
1035
995
3394
965877
ОК
1005
643
1102
851
3601
847437
ВЛОЖЕНИЕ
628
693
863
882
3066
863666
ОК
608
656
861
888
3013
865307
ОК
531
573
754
773
2631
758224
ОК
1018
682
1189
904
3793
854990
ВЛОЖЕНИЕ
658
612
843
835
2948
874424
ОК
557
560
812
824
2753
784341
ОК
672
712
934
943
3261
898501
ОК
100
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
769
997
682
702
623
659
722
788
637
664
649
599
590
697
1149
1061
744
746
714
732
701
626
679
715
606
655
655
718
628
645
750
721
970
1159
987
937
937
864
823
949
846
922
895
874
789
914
1317
1273
1009
987
974
923
915
895
887
960
879
871
867
836
853
973
1067
1065
3492
3889
3357
3294
3176
3044
3111
3412
2968
3112
3066
3027
2860
3229
4283
4120
945038
908217
939965
910133
865622
876726
859613
955506
821510
896127
891283
873383
774731
938105
929901
930703
ОК
ВЛОЖЕНИЕ
ОК
ОК
ОК
ОК
ОК
ОК
ОК
ОК
ОК
ОК
ОК
ОК
ВЛОЖЕНИЕ
ВЛОЖЕНИЕ
Уточнение порогов привело к тому, что ложные тревоги вообще
исчезли, но появился один пропуск. Пропущено одно СИ со скоростью
вложения равной 3500 бит/ на страницу. При такой скорости вложения
прирост единичных углублений составляет около 500 углублений на
страницу текста формата А4, что как уже было отмечено является на данный
момент нижней границей эффективной работы метода.
Для изображений, полученных со сканера № 2, были собраны
статистики приростов количества единичных выбросов и единичных
углублений в зависимости от скорости вложения.
В таблицах 61 и 62 приведены результаты подсчёта количества
единичных выбросов до и после вложения для текстовых документов,
распечатанных на принтере № 1 и отсканированных сканером № 2.
В таблицах 63 и 64 приведены результаты подсчёта количества
единичных выбросов до и после вложения для текстовых документов,
распечатанных на принтере № 2 и отсканированных сканером № 2.
101
В таблицах 65 и 66 приведены результаты подсчёта количества
единичных выбросов до и после вложения для текстовых документов,
распечатанных на принтере № 3 и отсканированных сканером № 2.
В таблицах 67 и 68 приведены результаты подсчёта количества
единичных выбросов до и после вложения для текстовых документов,
распечатанных на принтере № 4 и отсканированных сканером № 2.
Из таблиц 61 – 68 видно, что прирост единичных выбросов, при
вложении в ПС, полученные со сканера № 2, секретной информации со
скоростью 8000 – 12000 бит/ на страницу текста формата А4 составляет
500 – 600 единичных выбросов.
В таблицах 69 и 70 приведены результаты подсчёта количества
единичных углублений до и после вложения для текстовых документов,
распечатанных на принтере № 1 и отсканированных сканером № 2.
В таблицах 71 и 72 приведены результаты подсчёта количества
единичных углублений до и после вложения для текстовых документов,
распечатанных на принтере № 2 и отсканированных сканером № 2.
В таблицах 73 и 74 приведены результаты подсчёта количества
единичных углублений до и после вложения для текстовых документов,
распечатанных на принтере № 3 и отсканированных сканером № 2.
В таблицах 75 и 76 приведены результаты подсчёта количества
единичных углублений до и после вложения для текстовых документов,
распечатанных на принтере № 4 и отсканированных сканером № 2.
Из таблиц 69 – 76 видно, что прирост единичных углублений, при
вложении в ПС, полученные со сканера № 2, секретной информации со
скоростью 8000 – 12000 бит/ на страницу текста формата А4 составляет
1200 - 1400 единичных углублений.
102
Таким образом при одинаковой скорости вложения метод анализа
количества единичных углублений окажется эффективнее метода анализа
количества единичных выбросов, так как прирост единичных углублений
более чем в два раза превышает прирост количества единичных выбросов для
одинаковой скорости вложения.
Таблица 61. Количество единичных выбросов для принтера № 1 до вложения
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вверх
600
736
781
849
784
847
811
895
765
797
815
733
832
837
660
721
782
679
685
743
Вниз
628
738
877
961
939
912
947
948
920
874
987
956
936
982
781
893
914
819
853
858
Влево
669
681
743
872
830
776
803
821
775
756
915
716
795
857
612
766
776
677
709
718
103
Вправо
543
660
668
762
661
706
768
718
782
683
832
761
719
757
557
696
677
656
626
614
ВСЕГО
2440
2815
3069
3444
3214
3241
3329
3382
3242
3110
3549
3166
3282
3433
2610
3076
3149
2831
2873
2933
Таблица 62. Количество единичных выбросов для принтера № 1 после вложения с [n = 20, k = 0,01]
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено, бит
8777
9035
10076
10335
10085
10381
10209
10410
9803
9933
10048
9478
9419
10179
8108
9651
9812
9051
9693
9778
Вверх
741
817
913
955
949
956
895
973
833
934
903
841
909
927
721
841
910
777
798
859
Вниз
705
784
932
1035
1015
968
999
997
975
929
1050
1006
1004
1041
827
949
962
869
912
904
Влево
788
808
906
1008
996
905
969
1002
904
899
1066
882
950
1019
726
936
927
838
853
867
Вправо
759
912
908
1000
899
970
1034
974
1022
916
1073
994
934
998
787
917
904
880
869
853
ВСЕГО
2993
3321
3659
3998
3859
3799
3897
3946
3734
3678
4092
3723
3797
3985
3061
3643
3703
3364
3432
3483
Таблица 63. Количество единичных выбросов для принтера № 2 до вложения
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вверх
587
592
677
618
678
736
708
700
584
554
653
621
609
629
594
599
573
573
595
587
Вниз
780
726
892
784
811
848
807
873
773
767
834
757
833
818
683
761
789
714
717
777
Влево
616
637
681
661
612
656
653
686
539
668
635
603
593
637
563
567
620
547
574
641
104
Вправо
606
638
669
746
590
658
621
682
599
633
699
546
616
590
504
576
654
556
606
586
ВСЕГО
2589
2593
2919
2809
2691
2898
2789
2941
2495
2622
2821
2527
2651
2674
2344
2503
2636
2390
2492
2591
Таблица 64. Количество единичных выбросов для принтера № 2 после вложения с [n = 20, k = 0,01]
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено, бит
8692
9332
9920
10288
9969
10353
10298
10452
9700
10013
10134
9602
9472
10105
8026
9682
9871
9206
9826
9856
Вверх
666
702
776
761
777
830
856
834
690
675
785
751
703
786
678
763
704
712
721
716
Вниз
824
783
947
863
867
921
876
950
816
824
898
804
886
856
733
803
853
784
788
835
Влево
742
788
837
816
779
795
825
846
690
847
808
760
752
810
685
729
766
676
722
796
Вправо
862
899
936
1014
871
942
913
989
837
914
950
779
863
864
720
838
948
813
848
835
ВСЕГО
3094
3172
3496
3454
3294
3488
3470
3619
3033
3260
3441
3094
3204
3316
2816
3133
3271
2985
3079
3182
Таблица 65. Количество единичных выбросов для принтера № 3 до вложения
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вверх
481
524
500
633
555
551
560
605
545
574
535
482
497
550
448
452
471
487
469
529
Вниз
1498
1510
1611
1669
1769
1734
1646
1714
1535
1611
1689
1484
1481
1589
1331
1420
1460
1499
1478
1599
105
Влево
955
1015
1053
1030
1034
1008
1054
1102
1022
955
1010
913
978
962
810
915
960
860
890
930
Вправо
481
524
500
633
555
551
560
605
545
574
535
482
497
550
448
452
471
487
469
529
ВСЕГО
3415
3573
3664
3965
3913
3844
3820
4026
3647
3714
3769
3361
3453
3651
3037
3239
3362
3333
3306
3587
Таблица 66. Количество единичных выбросов для принтера № 3 после вложения с [n = 20, k = 0,01]
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено, бит
8533
8975
9935
10201
9969
10182
10105
10327
9578
9614
9897
9351
9430
9955
7860
9659
9666
8849
9528
9656
Вверх
606
644
646
760
701
714
708
752
697
688
734
625
663
671
560
595
590
624
674
718
Вниз
1532
1562
1652
1705
1818
1753
1680
1743
1566
1624
1719
1497
1512
1631
1352
1470
1499
1547
1521
1636
Влево
1117
1202
1231
1217
1222
1226
1249
1285
1221
1154
1187
1115
1178
1186
988
1106
1129
1058
1105
1091
Вправо
1058
1054
1173
1173
1172
1207
1168
1270
1175
1094
1090
1018
1070
1039
914
1065
1022
990
995
1078
ВСЕГО
4313
4462
4702
4855
4913
4900
4805
5050
4659
4560
4730
4255
4423
4527
3814
4236
4240
4219
4295
4523
Таблица 67. Количество единичных выбросов для принтера № 4 до вложения
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вверх
497
529
570
623
599
572
613
671
598
564
638
560
572
602
471
585
550
577
629
656
Вниз
604
601
689
704
691
771
700
795
706
636
696
648
726
693
627
637
693
683
729
676
106
Влево
538
601
671
716
653
701
671
653
657
631
689
649
632
695
538
603
660
573
650
678
Вправо
522
622
650
666
690
662
629
631
591
585
681
563
627
594
540
619
595
550
604
673
ВСЕГО
2161
2353
2580
2709
2633
2706
2613
2750
2552
2416
2704
2420
2557
2584
2176
2444
2498
2383
2612
2683
Таблица 68. Количество единичных выбросов для принтера № 4 после вложения с [n = 20, k = 0,01]
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено, бит
8717
9193
10286
10505
10212
10481
10306
10723
9817
9977
10172
9562
9588
10310
9225
9709
9919
9224
9877
9971
Вверх
628
664
737
817
741
740
791
855
743
729
821
698
720
764
584
709
724
722
784
775
Вниз
657
664
755
788
770
840
751
861
790
692
765
705
784
765
676
696
745
748
806
732
Влево
660
724
849
883
834
871
836
814
844
791
863
785
788
828
658
775
817
715
790
815
Вправо
756
891
939
957
929
918
906
897
857
866
939
794
879
882
754
858
849
814
844
920
ВСЕГО
2701
2943
3280
3445
3274
3369
3284
3427
3234
3078
3388
2982
3171
3239
2672
3038
3135
2999
3224
3242
Таблица 69. Количество единичных углублений для принтера № 1 до вложения
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Сверху
611
815
788
809
728
812
771
863
770
744
838
753
848
800
636
727
742
688
734
755
Снизу
599
760
920
956
909
934
881
891
922
888
971
856
865
939
736
827
858
795
846
860
107
Слева
699
846
924
1037
935
843
1004
1021
960
893
1052
827
910
985
721
810
879
767
770
859
Справа
684
831
946
967
903
893
952
1007
996
875
1007
954
955
933
749
844
887
800
830
891
ВСЕГО
2593
3252
3578
3769
3475
3482
3608
3782
3648
3400
3868
3390
3578
3657
2842
3208
3366
3050
3180
3365
Таблица 70. Количество единичных углублений для принтера № 1 после вложения с [n = 20, k = 0,01]
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено, бит
8777
9035
10076
10335
10085
10381
10209
10410
9803
9933
10048
9478
9419
10179
8108
9651
9812
9051
9693
9778
Сверху
1155
1255
1309
1361
1272
1410
1319
1379
1308
1320
1359
1222
1336
1302
1094
1226
1311
1125
1275
1257
Снизу
658
799
987
1016
956
1009
938
933
982
939
1025
892
905
972
757
871
896
838
896
910
Слева
1239
1472
1570
1737
1608
1502
1663
1656
1568
1509
1689
1465
1593
1612
1290
1456
1528
1395
1391
1481
Справа
777
933
1056
1071
1018
1012
1077
1090
1100
993
1109
1069
1063
1048
846
940
998
903
954
1026
ВСЕГО
3829
4459
4922
5185
4854
4933
4997
5058
4958
4761
5182
4648
4897
4934
3987
4493
4733
4261
4516
4674
Таблица 71. Количество единичных углублений для принтера № 2 до вложения
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Сверху
607
602
652
645
673
695
708
730
648
614
731
660
680
666
568
654
605
622
644
647
Снизу
671
645
774
801
760
840
715
798
706
682
768
727
678
701
668
701
669
683
707
728
108
Слева
672
645
787
801
727
802
784
798
693
807
795
721
729
750
648
700
740
647
735
774
Справа
776
788
863
885
856
904
854
860
785
802
871
782
903
759
691
753
836
755
744
837
ВСЕГО
2726
2680
3076
3132
3016
3241
3061
3186
2832
2905
3165
2890
2990
2876
2575
2808
2850
2707
2830
2986
Таблица 72. Количество единичных углублений для принтера № 2 после вложения с [n = 20, k = 0,01]
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено, бит
8692
9332
9920
10288
9969
10353
10298
10452
9700
10013
10134
9602
9472
10105
8026
9682
9871
9206
9826
9856
Сверху
1131
1167
1355
1305
1353
1405
1386
1402
1263
1259
1378
1205
1264
1252
1046
1255
1222
1173
1206
1254
Снизу
705
705
822
845
814
912
794
849
743
733
832
783
714
747
706
737
718
740
771
792
Слева
1281
1217
1524
1529
1422
1580
1463
1482
1378
1510
1538
1349
1440
1439
1231
1371
1408
1219
1427
1483
Справа
868
912
968
1007
973
1014
998
987
882
919
973
909
1013
899
784
878
965
850
842
936
ВСЕГО
3985
4001
4669
4686
4562
4911
4641
4720
4266
4421
4721
4246
4431
4337
3767
4241
4313
3982
4246
4465
Таблица 73. Количество единичных углублений для принтера № 3 до вложения
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Сверху
561
611
653
740
723
768
699
775
719
728
759
701
691
729
539
677
683
631
664
707
Снизу
994
1015
1081
1120
1134
1213
1137
1135
1093
1095
1164
986
1089
1109
920
1031
1093
1074
1087
1070
109
Слева
743
765
900
882
842
888
939
939
835
864
955
887
856
838
709
793
856
773
790
858
Справа
803
814
927
944
911
934
961
937
860
930
938
892
898
862
767
827
869
820
851
923
ВСЕГО
3101
3205
3561
3686
3610
3803
3736
3786
3507
3617
3816
3466
3534
3538
2935
3328
3501
3298
3392
3558
Таблица 74. Количество единичных углублений для принтера № 3 после вложения с [n = 20, k = 0,01]
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Вложено, бит
8533
8975
9935
10201
9969
10182
10105
10327
9578
9614
9897
9351
9430
9955
7860
9659
9666
8849
9528
9656
Сверху
912
1041
1119
1173
1157
1184
1128
1225
1065
1078
1168
1062
1064
1037
915
1042
1049
1012
1042
1112
Снизу
1022
1043
1120
1149
1175
1226
1163
1180
1120
1114
1186
1022
1118
1131
922
1055
1109
1084
1103
1110
Слева
1313
1385
1594
1626
1585
1639
1599
1587
1498
1558
1658
1533
1515
1520
1263
1396
1524
1369
1443
1499
Справа
915
898
1033
1055
1011
1063
1069
1053
954
1034
1046
994
1011
952
845
913
973
929
947
1032
ВСЕГО
4162
4367
4866
5003
4928
5112
4959
5045
4637
4784
5058
4611
4708
4640
3945
4406
4655
4394
4535
4753
Таблица 75. Количество единичных углублений для принтера № 4 до вложения
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Сверху
540
583
676
644
658
643
648
731
654
638
643
589
643
700
508
621
619
575
644
694
Снизу
553
575
712
630
683
710
671
682
691
621
663
628
678
683
548
635
654
655
708
686
110
Слева
674
720
808
886
821
871
792
825
837
784
863
788
813
819
638
722
811
734
852
822
Справа
767
743
865
881
834
903
812
852
807
805
894
797
747
739
686
759
811
720
851
877
ВСЕГО
2534
2621
3061
3041
2996
3127
2923
3090
2989
2848
3063
2802
2881
2941
2380
2737
2895
2684
3055
3079
Таблица 76. Количество единичных углублений для принтера № 4 после вложения с [n = 20, k = 0,01]
Изображение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
4.3.
Вложено, бит
8717
9193
10286
10505
10212
10481
10306
10723
9817
9977
10172
9562
9588
10310
9225
9709
9919
9224
9877
9971
Сверху
1118
1164
1253
1280
1267
1281
1255
1352
1210
1273
1296
1133
1224
1237
1011
1222
1282
1100
1214
1270
Снизу
602
638
773
709
756
765
724
752
726
673
725
676
732
728
605
698
698
707
768
733
Слева
1316
1301
1476
1566
1540
1585
1486
1519
1518
1440
1583
1441
1458
1439
1191
1404
1526
1385
1484
1461
Справа
859
851
1002
1013
944
1005
917
975
920
916
1002
901
829
854
776
860
920
828
942
993
ВСЕГО
3895
3954
4504
4568
4507
4636
4382
4598
4374
4302
4606
4151
4243
4258
3583
4184
4426
4020
4408
4457
Возможные улучшения методов вложения и обнаружения
Из изложенного выше не трудно видеть, что основным недостатком
стегосистемы, имитирующей шумы сканера является прирост единичных
выбросов и единичных углублений, после вложения секретной информации.
Есть два решения этой проблемы:
 уменьшить скорость вложения;
 усовершенствовать алгоритм вложения секретной информации.
Наиболее простой – уменьшение скорости вложения, что уменьшит
прирост единичных выбросов и единичных углублений и соответственно
усложнит процесс обнаружения вложения секретной информации
Для того чтобы сохранить приемлемую скорость вложения и в то же
время повысить секретность необходимо усовершенствовать алгоритм
вложения. Для этого после разбиения ПС на области
111
A должен
производиться анализ каждой пригодной для вложения области с целью
выявления оптимальных мест для вложения. На пример в области может
производиться поиск единичных выбросов и единичных углублений,
которые являются «шумовыми компонентами», появившимися после
сканирования. И, следовательно, добавление рядом или удаление единичного
выброса или единичного углубления приведет к уменьшению прироста
единичных выбросов и единичных углублений. Таким образом сохраняется
высокая скорость вложения и повышается сложность обнаружения.
Основным
недостатком
методов
обнаружения
стегосистемы,
имитирующей шумы сканера, анализом количества единичных выбросов и
количества единичных углублений является критерий определяющий
плотность текста на странице.
Решение проблемы - подсчёт количества граничных чёрных пикселей;
Подсчёт общего числа чёрных пикселей на странице считает кроме
граничных пикселей, которые могут быть изменены, внутренние пиксели,
которые не могут быть изменены. Считая же только граничные пиксели, мы
получили бы более точный показатель количества единичных выбросов и
единичных углублений.
112
Заключение
В
данной
дипломной
работе
была
рассмотрена
стегосистема,
имитирующая шумы сканера.
В процессе выполнения дипломной работы были предложены и
исследованы методы обнаружения стегосистемы, основанной на имитации
шумов сканера.
Произведены
теоретические
и
экспериментальные
оценки
эффективности методов, показавшие, что при скорости вложения менее 2000
бит/ на страницу текста формата А4 данную стегосистему можно считать
устойчивой к предложенным методам стегоанализа. При скорости вложения
менее 1000 бит/ на страницу текста формата А4, данную стегосистему можно
считать идеальной, так как на фоне 9000000 пикселей отследить изменение
200 – 500 пикселей не представляется возможным.
Метод анализа количества единичных выбросов позволяет производить
надёжное обнаружение вложений со скорость до 10000 бит/ на страницу
текста формата А4 (при известных принтере и сканере), метод анализа
количества
единичных
углублений
позволяет
производить
надёжное
обнаружаение вложений со скоростью до 4000 бит/ на страницу текста
формата А4 (при известных принтере и сканере).
Была
разработана
программа,
выполняющая
поиск
и
подсчет
количества единичных выбросов и единичных углублений. Исходный код
приведён в приложении № 1.
В ближайшем будущем будет разработана демо – версия программы,
реализующей предложенные методы стегоанализа, а именно методы анализа
единичных выбросов и углублений.
113
Предложены методы улучшения как самой стегосистемы, так и
методов обнаружения вложения секретной информации.
114
Список литературы
1. Коржик, В.И. «Основы стеганографии», Курс лекций, www.ibts-sut.ru;
2. Cole, Eric. «Hiding in Plain Sight: Steganography and the Art of Covert
Communication», Wiley Publishing, Inc. , April 11, 2003;
3. Международная
свободная
энциклопедия
Статья:
«Википедия».
«Стеганография». http://ru.wikipedia.org/wiki/Стеганография.
4. Kipper,
Greg.
«Investigator`s
Guide
to
Steganography»,
Auerbach
Publications, 2004;
5. Wayner,
Peter.
«Disappearing
cryptography:
Information
hiding:
Steganography & watermarking» - 3rd edition, Elsevier Inc. , 2009;
6. Ingemar J. Cox, Matthew L. Miller, Jeffrey A. Bloom, Jessica Fridrich, Ton
Kalker. «Digital Watermarking and Steganography, Second Edition», Morgan
Kaufmann Publishers, 2008;
7. Solomon Chris, Toby Breckon. «Fundamentals of Digital Image Processing. A
Practical Approach with Examples in Matlab», A John Wiley & Sons, Ltd.,
PUblication, 2011;
8. Gonzales R.C., Woods R.E. «Digital Image Processing», Prentice – Hall, Inv.,
2002;
9. Editor Anderson, Ross. «Information Hiding: First International Workshop»,
Proceedings (Lecture Notes in Computer Science), Cambridge, U.K., May 30 June 1, 1996.
10. Лебедев, М. А., дипломная работа на тему «Исследование методов
противодействия
использованию
стегосистем
в
интересах
террористических и криминальных групп», СПбГУТ, 2011.
11. Коржик, В. И., Лабораторные работы по курсу «Основы стеганографии»,
СПбГУТ.
12. Cadenhead, Rogers; Lemay, Laura. «Java 6 in 21 days», Sams Publishing ,
2007.
115
13. Flanagan, David. «Java Examples in a nutshell», O`Reilly & Associates Inc.,
2000.
14. Эккель, Б. «Философия Java. Библиотека программиста» - 4-е издание,
Питер, 2009.
116
Приложение № 1
Исходный
код
программы,
реализующей
подсчёт
количества
единичных выбросов и единичных углублений, также реализующей
стегосистему, основаную на погружении скрытых сообщений в шумы
сканера, написанный на языке Java.
Программа состоит из 20 классов, собранных в java archive.
Main.java // запускает графическую оболочку программы;
package sut.image;
import java.awt.EventQueue;
import javax.swing.JFrame;
import sut.image.gui.MainFrame;
public class Main {
public static void main(String[] args) {
final JFrame frame = new MainFrame("Image magic");
EventQueue.invokeLater(new Runnable() {
public void run() {
frame.pack();
frame.setVisible(true);
}
});
}
}
117
MaskParser.java // анализатор маски поиска;
package sut.image;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class MaskParser {
public int[][] parseFileToMask(File file) throws MaskParseException,
FileNotFoundException, IOException {
if (!file.exists()) {
throw new FileNotFoundException();
}
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
118
int firstLineLength = 0;
int rowsNumber = 0;
StringBuilder content = new StringBuilder();
boolean isfirstLineRead = false;
while ((line = br.readLine())!=null) {
if (!isfirstLineRead) {
firstLineLength = line.length();
isfirstLineRead = true;
}
if (line.length() != firstLineLength) {
throw new MaskParseException();
}
content.append(line+"|");
rowsNumber++;
}
StringTokenizer st = new StringTokenizer(content.toString(),
"|");
int[][] mask = new int[rowsNumber][firstLineLength];
for (int i=0; st.hasMoreTokens(); i++) {
String next = st.nextToken();
119
for (int j=0; j<firstLineLength; j++) {
int pix = Integer.valueOf(next.charAt(j)+"");
if (pix == 1) {
mask[i][j] = -1;
} else {
mask[i][j] = -16777216;
}
}
}
return mask;
}
}
MaskParserExceptions.java // указывает на неправильность
маски;
package sut.image;
public class MaskParseException extends Exception {
}
Constant.java // содержит статические размеры окон;
package sut.image;
120
import java.awt.Dimension;
public class Constant {
public
static
final
Dimension
MAIN_WINDOW
=
new
HALF_FIELD
=
new
Dimension(800,700);
public
static
final
Dimension
Dimension(200,20);
public
static
final
Dimension
MESSAGE_AREA
Dimension(200,250);
}
Graphical User Interface
BasePanel.java // создание панели;
package sut.image.gui;
import java.awt.Color;
import java.awt.GridBagLayout;
import java.io.File;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.filechooser.FileFilter;
public abstract class BasePanel extends JPanel {
protected JLabel infoLabel = new JLabel("Ok");
public BasePanel() {
121
=
new
setLayout(new GridBagLayout());
setBackground(Color.LIGHT_GRAY);
}
protected void sendNotification(String msg) {
infoLabel.setText(msg);
}
protected class ImageFileFilter extends FileFilter {
private final String[] validExtendions = {
".png", ".jpeg", ".jpg", ".bmp", ".gif"
};
@Override
public boolean accept(File f) {
boolean valid = false;
for (String ext : validExtendions) {
if (f.getName().endsWith(ext) || f.isDirectory())
valid = true;
}
return valid;
}
@Override
122
public String getDescription() {
return "Image files";
}
}
}
ImageMaskFinder.java // создает окно поиска единичных
выбросов и единичных углублений;
package sut.image.gui;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
123
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
private File[] loadedFiles;
public ImageMaskFinder() {
// init intro
intro.setPreferredSize(new Dimension(540,80));
intro.setBackground(Color.WHITE);
// init buttons
openImages.addActionListener(new
OpenImagesButtonListener());
openMask.addActionListener(new OpenMaskButtonListener());
calculate.addActionListener(new CalculateButtonListener());
// init table
infoTable = new JTable(new ImageParserTableModel());
JScrollPane scrollTable = new JScrollPane(infoTable);
scrollTable.setPreferredSize(new Dimension(300, 300));
// init mask area
JScrollPane scrollMask = new JScrollPane(maskArea);
124
scrollMask.setPreferredSize(new Dimension(100,100));
// layout
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 2;
c.weightx = 1;
c.weighty = 0.2;
add(intro, c);
c.fill = GridBagConstraints.NONE;
c.gridy = 1;
c.gridwidth = 1;
c.weightx = 0.7;
c.weighty = 0.1;
add(openImages, c);
c.gridx = 1;
c.weightx = 0.3;
add(openMask, c);
c.fill = GridBagConstraints.BOTH;
125
c.gridx = 0;
c.gridy = 2;
c.gridheight = 2;
c.weightx = 0.7;
c.weighty = 0.6;
add(scrollTable, c);
c.fill = GridBagConstraints.NONE;
c.gridx = 1;
c.gridheight = 1;
c.weightx = 0.3;
c.weighty = 0.5;
add(scrollMask, c);
c.gridx = 1;
c.gridy = 3;
c.gridheight = 1;
c.weighty = 0.1;
add(calculate, c);
c.fill = GridBagConstraints.BOTH;
c.gridy = 4;
c.gridx = 0;
126
c.gridwidth = 2;
c.weightx = 1;
c.weighty = 0.1;
add(infoLabel, c);
setVisible(true);
}
class OpenImagesButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
JFileChooser fc = new JFileChooser();
FileFilter ff = new ImageFileFilter();
fc.setFileFilter(ff);
fc.setAcceptAllFileFilterUsed(false);
fc.setMultiSelectionEnabled(true);
int status = fc.showOpenDialog(ImageMaskFinder.this);
if (status == JFileChooser.APPROVE_OPTION) {
File[] choosenFiles = fc.getSelectedFiles();
fillTableWithFiles(choosenFiles);
sendNotification(choosenFiles.length + " files
opened");
127
} else if (status == JFileChooser.ERROR_OPTION) {
sendNotification("error opening image file(s)");
}
}
}
class OpenMaskButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
JFileChooser fc = new JFileChooser();
fc.setMultiSelectionEnabled(false);
int status = fc.showOpenDialog(ImageMaskFinder.this);
if (status == JFileChooser.APPROVE_OPTION) {
File choosenFile = fc.getSelectedFile();
boolean valid = fillMaskTextArea(choosenFile);
if (valid) sendNotification("mask loaded");
} else if (status == JFileChooser.ERROR_OPTION) {
sendNotification("error opening mask file");
}
}
128
}
class CalculateButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
if (loadedFiles != null &&
!maskArea.getText().isEmpty()) {
int[][] premask = null;
try {
premask =
ImageUtils.validateAndReturnMask(maskArea.getText());
premask =
ImageUtils.convertBitmapToImage(premask);
} catch (MaskParseException e1) {
sendNotification("wrong mask format");
return;
}
final int[][] mask = premask;
ThreadGrou tg = new
ThreadGrou("working_threads");
Thread[] threads = new Thread[loadedFiles.length];
int i = 0;
129
for (final File file : loadedFiles) {
Thread t = new Thread(new Runnable() {
public void run() {
SubImageProcessor finder =
new SubImageProcessor();
Integer row = null;
for (int i=0;
i<infoTable.getModel().getRowCount(); i++) {
if
(infoTable.getValueAt(i, 0).equals(file.getName())) {
row = i;
}
}
if (row == null) {
return;
}
try {
int found =
finder.findSubImage(ImageUtils.fileToImage(file), mask);
infoTable.setValueAt(found, row, 1);
} catch (IOException e) {
130
infoTable.setValueAt("error", row, 1);
e.printStackTrace();
}
}
});
threads[i] = t;
i++;
}
tg.enumerate(threads);
for (Thread t : threads) {
t.start();
}
} else {
sendNotification("please fill calculation data");
}
}
}
private void fillTableWithFiles(File[] files) {
131
System.out.println("table: clearing");
((ImageParserTableModel)infoTable.getModel()).clear();
loadedFiles = files;
int rowIndexCounter = 0;
for (File file : files) {
infoTable.getModel().setValueAt(file.getName(),
rowIndexCounter, 0);
infoTable.getModel().setValueAt("unknown",
rowIndexCounter, 1);
rowIndexCounter++;
}
System.out.println("table: rows:
"+infoTable.getModel().getRowCount());
}
private boolean fillMaskTextArea(File file) {
boolean valid = false;
try {
int[][] mask = ImageUtils.fileToMask(file);
maskArea.setText(ImageUtils.convertMaskToString(mask));
valid = true;
} catch (FileNotFoundException e) {
132
sendNotification("mask file not found");
e.printStackTrace();
} catch (IOException e) {
sendNotification("error opening mask");
e.printStackTrace();
} catch (MaskParseException e) {
sendNotification("wrong mask format");
}
return valid;
}
}
ImageParserTableModel.java // создаёт таблицу вывода
результатов поиска;
package sut.image.gui;
import javax.swing.table.AbstractTableModel;
import sut.image.logic.PrintUtils;
public class ImageParserTableModel extends AbstractTableModel {
private String[] columnNames = {"Image file", "Occurence number"}
private Object[][] data;
public ImageParserTableModel() {
133
data = new Object[1][2];
}
@Override
public String getColumnName(int col) {
return columnNames[col];
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public int getRowCount() {
return data.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return data[rowIndex][columnIndex];
}
@Override
134
public synchronized void setValueAt(Object value, int rowIndex, int
columnIndex) {
System.out.println("set value: " + rowIndex + " " +
columnIndex + " value: " + value.toString());
if (data.length < (rowIndex+1)) {
Object[][] newData = new Object[rowIndex+1][2];
for (int i=0; i<rowIndex; i++) {
newData[i][0] = data[i][0];
newData[i][1] = data[i][1];
}
data = newData;
}
data[rowIndex][columnIndex] = value;
fireTableDataChanged();
}
public void clear() {
data = new Object[1][2];
}
}
135
ImageStegoInsert.java // создает панель, реализующую
алгоритм вложения секретной информации;
package sut.image.gui;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
136
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.border.TitledBorder;
import javax.swing.filechooser.FileFilter;
import sut.image.Constant;
import sut.image.gui.ImageStegoMaster.Size;
import sut.image.logic.AreaVO;
import sut.image.logic.ImageUtils;
import sut.image.logic.InsertBitsProcessor;
import sut.image.logic.StringUtils;
public class ImageStegoInsert extends BasePanel {
private JButton openImage = new JButton("Open Image");
private JLabel openedImage = new JLabel();
private JLabel l_coeficient = new JLabel("k");
private JTextField t_coeficient = new JTextField("0.1");
private JLabel l_subImageSize = new JLabel("size");
private JTextField t_subImageSize = new JTextField("20");
private JLabel l_message = new JLabel("msg");
private JEditorPane t_message = new JEditorPane();
private JButton testAvailableBits = new JButton("Test");
137
private JLabel l_availableBits = new JLabel("can insert 0 bits");
private JButton insertBits = new JButton("Insert");
private File loadedFile;
private int[][] loadedImageBitmap;
public ImageStegoInsert() {
setLayout(new GridBagLayout());
setBackground(Color.LIGHT_GRAY);
TitledBorder title = BorderFactory.createTitledBorder("Insert
bits");
setBorder(title);
// init buttons
openImage.addActionListener(new
OpenImageButtonListener());
testAvailableBits.addActionListener(new
TestButtonListener());
insertBits.addActionListener(new InsertBitsButtonListener());
// init input fields
openedImage.setPreferredSize(Constant.HALF_FIELD);
t_coeficient.setPreferredSize(Constant.HALF_FIELD);
t_subImageSize.setPreferredSize(Constant.HALF_FIELD);
JScrollPane st_message = new JScrollPane(t_message);
138
st_message.setPreferredSize(Constant.MESSAGE_AREA);
st_message.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONT
AL_SCROLLBAR_NEVER);
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.NONE;
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 1;
c.weightx = Size.wLeft;
c.weighty = Size.hVerySmall;
add(openImage, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
c.gridwidth = 2;
c.weightx = Size.wRight;
add(openedImage, c);
c.fill = GridBagConstraints.NONE;
c.gridx = 0;
c.gridy = 2;
c.gridwidth = 1;
139
c.weightx = Size.wLeft;
add(l_coeficient, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
c.gridwidth = 2;
c.weightx = Size.wRight;
add(t_coeficient, c);
c.fill = GridBagConstraints.NONE;
c.gridx = 0;
c.gridy = 3;
c.gridwidth = 1;
c.weightx = Size.wLeft;
add(l_subImageSize, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
c.gridwidth = 2;
c.weightx = Size.wRight;
add(t_subImageSize, c);
c.fill = GridBagConstraints.NONE;
c.gridx = 0;
140
c.gridy = 4;
c.gridwidth = 1;
c.weightx = Size.wLeft;
add(l_message, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
c.gridwidth = 2;
c.weightx = Size.wRight;
add(st_message, c);
c.gridx = 0;
c.gridy = 5;
c.gridwidth = 1;
c.weightx = Size.wLeft;
c.weighty = Size.hNormal;
add(testAvailableBits, c);
double mid = 0.3;
c.fill = GridBagConstraints.HORIZONTAL;
c.anchor = GridBagConstraints.CENTER;
c.gridx = 1;
c.weightx = Size.wRight - 0.3;
141
add(l_availableBits, c);
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.CENTER;
c.gridx = 2;
c.weightx = mid;
add(insertBits, c);
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.CENTER;
c.gridx = 0;
c.gridwidth = 3;
c.gridy = 6;
add(infoLabel, c);
setVisible(true);
}
class OpenImageButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
JFileChooser fc = new JFileChooser();
FileFilter ff = new ImageFileFilter();
fc.setFileFilter(ff);
142
fc.setAcceptAllFileFilterUsed(false);
fc.setMultiSelectionEnabled(false);
try {
int status =
fc.showOpenDialog(ImageStegoInsert.this);
if (status == JFileChooser.APPROVE_OPTION) {
File choosenFile = fc.getSelectedFile();
loadedFile = choosenFile;
openedImage.setText(choosenFile.getAbsolutePath());
int[][] image =
ImageUtils.fileToImage(choosenFile);
loadedImageBitmap =
ImageUtils.convertImageToBitmap(image);
sendNotification("File opened");
} else if (status ==
JFileChooser.ERROR_OPTION) {
sendNotification("error opening image
file(s)");
}
} catch (IOException e) {
sendNotification("error reading file");
}
143
}
}
class InsertBitsButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// validate coef && size
ThreadGrou tg = new ThreadGrou("working_threads");
final int[][] bitmap = loadedImageBitmap;
final double coeficient;
final int borderSize;
if (loadedImageBitmap == null) {
sendNotification("No image is opened"); return;
}
try {
coeficient =
Double.valueOf(t_coeficient.getText());
borderSize =
Integer.valueOf(t_subImageSize.getText());
} catch (NumberFormatException ex) {
144
sendNotification("Input data incorrect format");
return;
}
if (!((coeficient > 0) && (coeficient < 1))) {
sendNotification("Value of \"k\" should be from 0
to 1"); return;
}
final int[] message =
StringUtils.toIntArray(t_message.getText());
List<AreaVO> areas =
ImageUtils.getListOfAvailableAreas(bitmap, borderSize, coeficient);
Thread[] threads = new Thread[message.length];
InsertBitsProcessor.setBitmap(bitmap);
int i=0;
for (final AreaVO area : areas) {
if (area.getNumber() >= message.length) {
break;
}
Thread t = new Thread(new Runnable() {
public void run() {
InsertBitsProcessor processor = new
InsertBitsProcessor();
145
int msg = message[area.getNumber()];
processor.insertBit(area, borderSize,
coeficient, msg);
}
});
threads[i] = t;
i++;
}
tg.enumerate(threads);
for (Thread t : threads) {
t.start();
}
System.out.println("thread: " + threads.length);
sendNotification("Thread grou finished.");
BufferedImage img = new
BufferedImage(loadedImageBitmap[0].length, loadedImageBitmap.length,
BufferedImage.TYPE_INT_RGB);
int[][] normalBitmap =
ImageUtils.convertBitmapToImage(InsertBitsProcessor.getBitmap());
//
int[] normallist =
ImageUtils.convertBitArrayToList(normalBitmap);
//
img.getRaster().setDataElements(0, 0, normalBitmap);
146
for (i=0;i<loadedImageBitmap.length;i++) {
for (int j=0;j<loadedImageBitmap[0].length;j++) {
img.setRGB(j, i, normalBitmap[i][j]);
}
}
int extensionIndex =
loadedFile.getAbsolutePath().lastIndexOf(".");
String dir = loadedFile.getAbsolutePath().substring(0,
extensionIndex);
String format =
loadedFile.getAbsolutePath().substring(extensionIndex);
File out = new File(dir+"_st"+format);
//
int[] rgb = new int[213*137];
//
img.getRGB(0, 0, loadedImage[0].length,
loadedImage.length,
//
//
rgb, 0, 1);
img.setRGB(0, 0, loadedImage[0].length,
loadedImage.length,
//
//
//
rgb, 0, 1);
for (i=0; i<rgb.length;i++)
System.out.print(rgb[i]);
147
try {
ImageIO.write(img, "bmp", out);
} catch (IOException e1) {
sendNotification("Error rendering image.");
}
}
}
private class TestButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
if (loadedImageBitmap == null) {
return;
}
final int[][] bitmap = loadedImageBitmap;
final double coeficient =
Double.valueOf(t_coeficient.getText());
final int borderSize =
Integer.valueOf(t_subImageSize.getText());
List<AreaVO> areas =
ImageUtils.getListOfAvailableAreas(bitmap, borderSize, coeficient);
148
l_availableBits.setText("can insert " + areas.size() + "
bits");
}
}
}
ImageStegoMaster.java // создает панель, реализующую
сиегосистему, основанную на погружении скрытых сообщений
в шумы сканера;
package sut.image.gui;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
public class ImageStegoMaster extends JPanel {
private JPanel intro = new IntroPanel("intro_tab2.png");
public ImageStegoMaster() {
setLayout(new GridBagLayout());
setBackground(Color.LIGHT_GRAY);
149
// init intro
intro.setPreferredSize(new Dimension(550, 80));
intro.setBackground(Color.WHITE);
ImageStegoInsert LeftPane = new ImageStegoInsert();
ImageStegoRetrieve RightPane = new ImageStegoRetrieve();
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 2;
c.weightx = 1;
c.weighty = 0.2;
add(intro, c);
c.gridx = 0;
c.gridy = 1;
c.gridwidth = 1;
c.weightx = 0.5;
c.weighty = 0.8;
add(LeftPane, c);
c.gridx = 1;
150
add(RightPane, c);
setVisible(true);
}
protected class Size {
protected static final double wLeft = 0.05;
protected static final double wRight = 1 - wLeft;
protected static final double hVerySmall = 0.05;
protected static final double hNormal = 0.2;
}
}
ImageStegoRetrive.java // создает панель, реализующую
алгоритм извлечения секретной информации;
package sut.image.gui;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
151
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.border.TitledBorder;
import javax.swing.filechooser.FileFilter;
import sut.image.Constant;
import sut.image.gui.ImageStegoMaster.Size;
import sut.image.logic.AreaVO;
import sut.image.logic.ImageUtils;
import sut.image.logic.StringUtils;
public class ImageStegoRetrieve extends BasePanel {
private JButton openImage = new JButton("Open Image");
private JLabel openedImage = new JLabel();
152
private JLabel l_coeficient = new JLabel("k");
private JTextField t_coeficient = new JTextField();
private JLabel l_subImageSize = new JLabel("size");
private JTextField t_subImageSize = new JTextField();
private JLabel l_message = new JLabel("msg");
private JEditorPane t_message = new JEditorPane();
private JButton retrieveBits = new JButton("Retrieve");
private int[][] loadedImage;
public ImageStegoRetrieve() {
setLayout(new GridBagLayout());
setBackground(Color.LIGHT_GRAY);
TitledBorder title = BorderFactory.createTitledBorder("Retrieve
message");
setBorder(title);
// init buttons
openImage.addActionListener(new
OpenImageButtonListener());
retrieveBits.addActionListener(new
RetrieveBitsButtonListener());
// init input fields
openedImage.setPreferredSize(Constant.HALF_FIELD);
153
t_coeficient.setPreferredSize(Constant.HALF_FIELD);
t_subImageSize.setPreferredSize(Constant.HALF_FIELD);
t_message.setText("unnown");
JScrollPane st_message = new JScrollPane(t_message);
st_message.setPreferredSize(Constant.MESSAGE_AREA);
st_message.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORI
ZONTAL_SCROLLBAR_NEVER);
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.NONE;
c.gridx = 0;
c.gridy = 0;
c.weightx = Size.wLeft;
c.weighty = Size.hVerySmall;
add(openImage, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
c.gridwidth = 2;
c.weightx = Size.wRight;
add(openedImage, c);
c.fill = GridBagConstraints.NONE;
154
c.gridx = 0;
c.gridy = 1;
c.gridwidth = 1;
c.weightx = Size.wLeft;
add(l_coeficient, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
c.gridwidth = 2;
c.weightx = Size.wRight;
add(t_coeficient, c);
c.fill = GridBagConstraints.NONE;
c.gridx = 0;
c.gridy = 2;
c.gridwidth = 1;
c.weightx = Size.wLeft;
add(l_subImageSize, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
c.gridwidth = 2;
c.weightx = Size.wRight;
155
add(t_subImageSize, c);
c.fill = GridBagConstraints.NONE;
c.gridx = 0;
c.gridy = 3;
c.gridwidth = 1;
c.weightx = Size.wLeft;
add(l_message, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
c.gridwidth = 2;
c.weightx = Size.wRight;
add(st_message, c);
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.EAST;
c.gridx = 2;
c.gridy = 4;
c.gridwidth = 1;
c.weightx = 1;
c.weighty = Size.hNormal;
156
add(retrieveBits, c);
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.CENTER;
c.gridx = 0;
c.gridwidth = 3;
c.gridy = 5;
add(infoLabel, c);
setVisible(true);
}
class OpenImageButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
JFileChooser fc = new JFileChooser();
FileFilter ff = new ImageFileFilter();
fc.setFileFilter(ff);
fc.setAcceptAllFileFilterUsed(false);
fc.setMultiSelectionEnabled(false);
try {
157
int status =
fc.showOpenDialog(ImageStegoRetrieve.this);
if (status == JFileChooser.APPROVE_OPTION) {
File choosenFile = fc.getSelectedFile();
openedImage.setText(choosenFile.getAbsolutePath());
int[][] image =
ImageUtils.fileToImage(choosenFile);
loadedImage =
ImageUtils.convertImageToBitmap(image);
sendNotification("File opened");
} else if (status ==
JFileChooser.ERROR_OPTION) {
sendNotification("error opening image
file(s)");
}
} catch (IOException e) {
sendNotification("error reading file");
}
}
}
class RetrieveBitsButtonListener implements ActionListener {
158
@Override
public void actionPerformed(ActionEvent e) {
final int[][] bitmap = loadedImage;
final double coeficient;
final int borderSize;
if (loadedImage == null) {
sendNotification("No image is opened"); return;
}
try {
coeficient =
Double.valueOf(t_coeficient.getText());
borderSize =
Integer.valueOf(t_subImageSize.getText());
} catch (NumberFormatException ex) {
sendNotification("Input data incorrect format");
return;
}
if (!((coeficient > 0) && (coeficient < 1))) {
sendNotification("Value of \"k\" should be from 0
to 1"); return;
}
159
List<AreaVO> areas =
ImageUtils.getListOfAvailableAreas(bitmap, borderSize, coeficient);
final int[] message = new int[areas.size()];
for (final AreaVO area : areas) {
boolean isEvenBlackBits = area.getBlackBits() % 2
== 0;
message[area.getNumber()] = isEvenBlackBits ? 0
: 1;
}
t_message.setText(StringUtils.toStringFromArray(message));
sendNotification(message.length + " bits successfully
retrieved");
}
}
}
ImageTableVO.java // хранит данные обнаружения;
package sut.image.gui;
public class ImageTableVO {
private String image;
private String occurence;
public ImageTableVO(String image, String occurence) {
160
suer();
this.image = image;
this.occurence = occurence;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getOccurence() {
return occurence;
}
public void setOccurence(String occurence) {
this.occurence = occurence;
}
}
IntroPanel.java // панель приветствия;
package sut.image.gui;
import java.awt.Color;
161
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class IntroPanel extends JPanel {
private BufferedImage image;
public IntroPanel(String filename) {
setBackground(Color.GRAY);
try {
InputStream is =
getClass().getResourceAsStream("/"+filename);
image = ImageIO.read(is);
} catch (IOException ex) {
// do not handle
}
}
@Override
public void paintComponent(Graphics g) {
162
g.drawImage(image, 0, 0, null); // see javadoc for more info on
the
}
}
MainFrame.java // создает общую структуру графической
оболочки;
package sut.image.gui;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
163
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.filechooser.FileFilter;
import sut.image.Constant;
import sut.image.logic.MaskParseException;
import sut.image.logic.ImageUtils;
import sut.image.logic.SubImageProcessor;
public class MainFrame extends JFrame {
public MainFrame(String name) {
suer(name);
setPreferredSize(Constant.MAIN_WINDOW);
setLocation(100,50);
Container cp = this.getContentPane();
cp.setBackground(Color.LIGHT_GRAY);
// tab pane
164
JTabbedPane tab = new JTabbedPane();
tab.setPreferredSize(Constant.MAIN_WINDOW);
JComponent tab1 = new ImageMaskFinder();
JComponent tab2 = new ImageStegoMaster();
tab.addTab("Mask finder", tab1);
tab.addTab("Insert bits", tab2);
cp.add(tab);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
}
}
Logical Classes
AreaVO.java // хранит данные об областях A;
package sut.image.logic;
public class AreaVO {
public AreaVO(int x, int y) {
suer();
this.x = x;
this.y = y;
}
165
private int x;
private int y;
private int number;
private int type;
private int blackBits;
public int getBlackBits() {
return blackBits;
}
public void setBlackBits(int blackBits) {
this.blackBits = blackBits;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public int getX() {
return x;
}
166
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
}
ImageUtils.java // производит считывание и проверку
масок, преобразование изображений в массивы бит и обратно,
поиск областей пригодных для вложения, подсчёт количества
чёрных пикселей внутри бластей;
package sut.image.logic;
167
import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;
import javax.imageio.ImageIO;
public class ImageUtils {
public static int[][] fileToMask(File file) throws MaskParseException,
FileNotFoundException, IOException {
if (!file.exists()) {
throw new FileNotFoundException();
}
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
StringBuilder content = new StringBuilder();
168
String line = "";
while ((line = br.readLine())!=null) {
content.append(line+"\n");
}
int[][] mask = validateAndReturnMask(content.toString());
return mask;
}
public static int[][] fileToImage(File imgFile) throws IOException {
BufferedImage bi = ImageIO.read(imgFile);
int w = bi.getWidth();
int h = bi.getHeight();
System.out.println(w+" "+h);
int[][] pixels = new int[h][w];
for (int i=0; i<h; i++) {
for (int j=0; j<w; j++) {
pixels[i][j] = bi.getRGB(j, i);
}
}
return pixels;
}
169
public static int[][] validateAndReturnMask(String stringMask)
throws MaskParseException {
if (stringMask.isEmpty()) {
throw new MaskParseException();
}
String line;
int firstLineLength = 0;
int rowsNumber = 0;
StringTokenizer st = new StringTokenizer(stringMask, "\n");
boolean isfirstLineRead = false;
while (st.hasMoreTokens()) {
line = st.nextToken();
if (!isfirstLineRead) {
firstLineLength = line.length();
isfirstLineRead = true;
}
if (line.length() != firstLineLength) {
throw new MaskParseException();
}
rowsNumber++;
170
}
st = new StringTokenizer(stringMask, "\n");
int[][] mask = new int[rowsNumber][firstLineLength];
for (int i=0; st.hasMoreTokens(); i++) {
String next = st.nextToken();
for (int j=0; j<firstLineLength; j++) {
int pix = Integer.valueOf(next.charAt(j)+"");
System.out.print(next.charAt(j)+"");
if (pix != 0 && pix != 1) {
throw new MaskParseException();
} else {
mask[i][j] = pix;
}
}
}
return mask;
}
public static int[][] convertBitmapToImage(int[][] bitmap) {
int[][] image = new int[bitmap.length][bitmap[0].length];
for (int i=0; i<bitmap.length; i++) {
171
for (int j=0; j<bitmap[0].length; j++) {
if (bitmap[i][j] == 0) {
image[i][j] = -1;
} else {
image[i][j] = -16777216;
}
}
}
return image;
}
public static int[] convertBitArrayToList(int[][] array) {
int[] list = new int[array.length*array[0].length];
for (int i=0; i<array.length; i++) {
for (int j=0; j<array[0].length; j++) {
list[i*array[0].length+j] = array[i][j];
}
}
return list;
}
public static int[][] convertImageToBitmap(int[][] image) {
172
int[][] bitmap = new int[image.length][image[0].length];
for (int i=0; i<image.length; i++) {
for (int j=0; j<image[0].length; j++) {
if (image[i][j] == -1) {
bitmap[i][j] = 0;
} else {
bitmap[i][j] = 1;
}
}
}
return bitmap;
}
public static String convertMaskToString(int[][] mask) {
StringBuilder builder = new StringBuilder();
for (int i=0; i<mask.length; i++) {
if (i != 0) {
builder.append("\n");
}
for (int j=0; j<mask[i].length; j++) {
builder.append(mask[i][j]);
173
}
}
return builder.toString();
}
public static List<AreaVO> getListOfAvailableAreas(int[][] bitmap,
int borderSize, double coeficient) {
List<AreaVO> list = new LinkedList<AreaVO>();
List<AreaVO> AllAreasList = splitBitmapOnAreas(bitmap,
borderSize);
int currentNumber = 0;
int currentType = -1;
for (AreaVO area : AllAreasList) {
currentType = recognizeType(area, bitmap, borderSize,
coeficient);
if (currentType == 0 || currentType == 1 || currentType ==
2) {
area.setNumber(currentNumber);
area.setType(currentType);
list.add(area);
currentNumber++;
}
174
}
return list;
}
private static List<AreaVO> splitBitmapOnAreas(int[][] bitmap, int
borderSize) {
List<AreaVO> list = new LinkedList<AreaVO>();
Dimension areas = countNumberOfAllAreas(bitmap,
borderSize);
for (int i=0; i< areas.height; i++) {
for (int j=0; j< areas.width; j++) {
int x = j*borderSize;
int y = i*borderSize;
list.add(new AreaVO(x,y));
}
}
return list;
}
private static Dimension countNumberOfAllAreas(int[][]
bitmap, int borderSize) {
int h = bitmap.length;
if (h == 0) {
175
return new Dimension(0,0);
}
int w = bitmap[0].length;
int _w = Math.round(w/borderSize);
int _h = Math.round(h/borderSize);
return new Dimension(_w, _h);
}
private static int recognizeType(AreaVO area, int[][] bitmap, int
borderSize, double coeficient) {
int type = -1;
int blackBits = countNumberBlackBits(area, bitmap,
borderSize);
area.setBlackBits(blackBits);
if (blackBits == Math.round((1 coeficient)*(borderSize*borderSize))) {
type = 1;
} else if (blackBits ==
Math.round(coeficient*(borderSize*borderSize))) {
type = 2;
} else if ((blackBits > coeficient*(borderSize*borderSize))
&& (blackBits < (1 coeficient)*(borderSize*borderSize))) {
176
type = 0;
}
return type;
}
private static int countNumberBlackBits(AreaVO area, int[][]
bitmap, int borderSize) {
int count = 0;
for (int i=area.getY(); i<area.getY()+borderSize; i++) {
for (int j=area.getX(); j<area.getX()+borderSize; j++) {
if (bitmap[i][j] == 1) count++;
}
}
return count;
}
}
InserBitsProcessor.java // производит вложение секретной
информации;
package sut.image.logic;
public class InsertBitsProcessor {
private static int[][] bitmap;
177
public void insertBit(AreaVO area, int borderSize, double coefficient,
int msg) {
int type = area.getType();
int blackBits = area.getBlackBits();
System.out.println("area "+area+" type="+type + " msg="+msg
+ " m="+blackBits + " l="+coefficient*(borderSize*borderSize)+" r="+(1 coefficient)*(borderSize*borderSize));
// insert bits
boolean isEvenBalckBits = blackBits % 2 == 0;
switch (type) {
case 0: {
boolean inserted = false;
if ((Integer.valueOf(msg).equals(0) &&
!isEvenBalckBits)
|| (Integer.valueOf(msg).equals(1) &&
isEvenBalckBits)) {
System.out.println("***");
for (int i=area.getY()+1; i<area.getY()+borderSize1; i++) {
for (int j=area.getX()+1;
j<area.getX()+borderSize-1; j++) {
if (bitmap[i][j] == 0) {
178
if (changeBit(i,j,1,0))
{inserted=true; break;}
} else if (bitmap[i][j] == 1) {
if (changeBit(i,j,0,1))
{inserted=true; break;}
}
}
if (inserted) break;
}
}
break; }
case 1: {
boolean inserted = false;
if (msg == 0 && !isEvenBalckBits || msg == 1 &&
isEvenBalckBits) {
for (int i=area.getY()+1; i<area.getY()+borderSize;
i++) {
for (int j=area.getX()+1;
j<area.getX()+borderSize; j++) {
if (bitmap[i][j] == 0) {
if (changeBit(i,j,1,0))
{inserted=true; break;}
179
}
}
if (inserted) break;
}
}
break; }
case 2: {
boolean inserted = false;
if (msg == 0 && !isEvenBalckBits || msg == 1 &&
isEvenBalckBits) {
for (int i=area.getY()+1; i<area.getY()+borderSize;
i++) {
for (int j=area.getX()+1;
j<area.getX()+borderSize; j++) {
if (bitmap[i][j] == 1) {
if (changeBit(i,j,0,1))
{inserted=true; break;}
}
}
if (inserted) break;
}
180
}
break; }
}
}
private boolean changeBit(int i, int j, int bit, int onBit) {
if (bitmap[i][j-1] == bit) {bitmap[i][j-1] = onBit; return true;}
if (bitmap[i-1][j] == bit) {bitmap[i-1][j] = onBit; return true;}
if (bitmap[i+1][j] == bit) {bitmap[i+1][j] = onBit; return true;}
if (bitmap[i][j+1] == bit) {bitmap[i][j+1] = onBit; return true;}
return false;
}
public static void setBitmap(int[][] bitmap) {
InsertBitsProcessor.bitmap = bitmap;
}
public static int[][] getBitmap() {
return bitmap;
}
}
181
MaskParseException // используется при обнаружении
ошибок ввода маски;
package sut.image.logic;
public class MaskParseException extends Exception {
}
PrintUtils.java // вывод значений массива;
package sut.image.logic;
public class PrintUtils
public static void printObjectMatrix(Object[][] matrix) {
for (int i=0; i<matrix.length; i++) {
for (int j=0; j<matrix[i].length; j++) {
System.out.println(matrix[i][j]+" ");
}
System.out.println();
}
}
}
StringUtils.java // используется для работы со строками;
package sut.image.logic;
public class StringUtils {
182
public static int[] toIntArray(String st) {
int[] res = new int[st.length()];
for (int i=0; i<st.length(); i++) {
res[i] = Integer.valueOf(st.substring(i, i+1));
}
return res;
}
public static String toStringFromArray(int[] ar) {
StringBuilder sb = new StringBuilder();
for (int i=0; i<ar.length; i++) {
sb.append(ar[i]);
}
return sb.toString();
}
}
SubImageProcessor.java // поиск количества совпадений
маски с изображением;
package sut.image.logic;
public class SubImageProcessor {
183
public int findSubImage(int[][] parentImagePix, int[][] subImagePix)
{
int counter = 0;
int parentH = parentImagePix.length;
int parentW = parentImagePix[0].length;
int subH = subImagePix.length;
int subW = subImagePix[0].length;
for (int parentImageH=0; parentImageH<parentH-subH;
parentImageH++) {
for (int parentImageW=0; parentImageW<parentWsubW; parentImageW++) {
boolean countThis = true;
for (int subImageH=0; subImageH<subH;
subImageH++) {
for (int subImageW=0; subImageW<subW;
subImageW++) {
// main compare logic
if
(subImagePix[subImageH][subImageW] !=
parentImagePix[parentImageH+subImageH][parentImageW+subImageW]) {
countThis = false;
}
184
}
}
if (countThis) {
counter++;
}
}
}
return counter;
}
}
185
Скачать