Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Стеганография(Конахович)_FULL.doc
Скачиваний:
533
Добавлен:
09.12.2018
Размер:
11.37 Mб
Скачать

5.5. Скрытие данных в тексте

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

Наиболее сложным объектом для скрытия данных по многим причинам является электронная (файловая) версия текста. В отличие от текстового файла его "жесткая" копия (например, бумажная) может быть обработана как высокоструктурированное изображение и поэтому является относительно легко поддающейся разнообразным методам скрытия, таким как незначительные изменения формата текстовых шаблонов, регулирование расстояния между определенными парами символов (кернинг), расстояния между строками и т.п. В значительной степени такая ситуация вызвана относительным дефицитом в текстовом файле избыточной информации, особенно в сравнении с графическими или, например, звуковыми файлами. В то время как в большинстве случаев существует возможность внести незаметные глазу и неощутимые на слух модификации в изображение и звук, даже дополнительная буква или знак пунктуации в тексте могут быть легко распознаны случайным читателем.

Скрытие данных в тексте требует поиска таких модификаций, которые были бы незаметными подавляющему большинству читателей. Авторы [14] рассматривают три группы методов, которые получили наибольшее распространение при встраивании скрываемых данных в текст:

• методы произвольного интересна, которые осуществляют встраивание путем манипуляции с пробельными символами (свободным местом на печатной полосе);

• синтаксические методы, которые работают с пунктуацией;

• семантические методы, в основу алгоритмов которых положено манипулирование словами, зависимое от скрываемых бит данных.

5.5.1. Методы произвольного интервала

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

В [14] предложено три метода, которые для скрытия данных используют свободное место в тексте. Указанные методы оперируют с интервалами между предложениями, пропусками в конце текстовых строк и интервалами между словами в тексте, выровненном по ширине.

5.5.1.1. Метод изменения интервала между предложениями

Метод изменения интервала между предложениями позволяет встраивать в текст сообщение, имеющее двоичный формат, путем размещения одного или двух пробелов после каждого символа завершения предложения. В качестве символов окончания предложения могут служить, к примеру, точки в обычном тексте, точки с запятой для кода программ на языке C++ и т.п. При этом единичным пробелом может кодироваться бит "1", двойным - бит "0".

Кроме несомненной простоты, данный метод имеет и ряд недостатков. Во-первых, он не эффективен, поскольку для встраивания незначительного количества бит требуется текст значительного объема. В частности, один бит, который возможно скрыть в одном предложении, эквивалентен скорости передачи данных, соответствующей приблизительно одному биту на 160 байт текстового контейнера, при условии, что в среднем предложение представляет собой две строки по 80 символов каждая.

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

В-третьих, существуют текстовые редакторы, которые автоматически устанавливают после точки в конце предложения один-два пробела (так называемое автозавершение). И, наконец, как отмечается в [14], непоследовательное и противоречивое использование свободных мест может оказаться достаточно заметным для читателя.

Приведем пример реализации данного метода в MathCAD.

Шаг1

Пусть в качестве контейнера используется текст, фрагмент которого приведен на рис. 5.94 (С := READBIN("C.txt", "byte")), а скрываемое сообщение имеет следующее содержание: М := "Алгоритм".

Рис. 5.94. Фрагмент оригинала текста-контейнера, используемого для скрытия данных

Шаг 2

Переменной (точка + пробел) пометим фрагмент контейнера, который будет сигнализировать об окончании предложений. В ASCII-кодировке данная переменная отображается вектором str2vec()T = (46 32).

Проверку достаточности количества предложений в тексте для скрытия заданного количества бит сообщения (LM = 8·strlen(M), LM = 64 бита) выполним с помощью программного модуля (М.128), который подсчитывает количество элементов в выбранном в качестве контейнера тексте.

Для представленного на рис. 5.94 фрагмента = 8, что является достаточным для скрытия одного символа сообщения (8 бит).

Шаг 3

Стеганографическое скрытие рассматриваемым методом выполняет программный модуль (М.129). В начале модуля (М.129) строка символов М преобразовывается в вектор двоичных данных Mvec_bin. Для каждого элемента вектора Mvec_bin про водится поиск элемента (конца предложения) в массиве исходного текста С’, представленном в ASCII-кодах. Параллельно формируется стеганограмма S, путем дописывания в ее конец 1-го элемента массива С’

В случае нахождения фрагмента массива С, который отвечает вектору , про исходит сохранение оставшейся части текста как немодифицированной (переопределение переменной С) и в зависимости от значения текущего элемента Mvec_bin к стеганограмме S дописывается один или два пробела (ASCII-код которых равен 32).

Для предотвращения возможного возникновения неоднозначности в тех случаях, когда в оригинальном тексте предложения отделялись между собой точкой и произвольным количеством пробелов, в модуле (М.129) также предусмотрено удаление возможных лишних пробелов в начале немодифицированного фрагмента С.

По окончании встраивания всех бит сообщения, к стеганограмме S приписывается фрагмент текста, оставшийся без изменений (С).

Результат скрытия первого символа сообщения М (символа "А"), ASCII-код которого в двоичном представлении: D2B(str2vec("A"))T = (0LSB 0 0 0 0 0 1 1MSB), представлен на рис. 5.95.

Рис. 5.95. Фрагмент текстового контейнера, заполненного методом изменения интервала между предложениями

Шаг 4

Излечение скрытой информации проводится программным модулем (М.130) при S*=S, .

Алгоритм действий следующий: выполняется поиск конца предложения (элемента *) в представленном в ASCII-кодах тексте S*. В случае нахождения, анализируется количество пробелов после точки, на основании чего делается вывод о значении текущего извлекаемого бита сообщения. В конце модуля вектор двоичных данных преобразовывается в текстовую строку символов.