Занесение и извлечения стего в звуковом контейнере методом LSB

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

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

Данный документ содержит руководство пользователя к приложенному файлу системы MathCad для обработки аудиофайлов с целью стеганографии. В рамках текущей работы необходимо открыть в среде Mathcad файл stego.xmcd. Результаты записи больших объемов текста можно найти в папке «Результаты анализа». При последующем использовании для корректной работы алгоритмов в папку с файлом stego.xmcd необходимо поместить следующие файлы

  • input.wav – аудиофайл формата WAV, закодированный с помощью PCM-кодека. По требованию ТЗ файл не прикладывается к работе.
  • plain.txt – открытый текст, предназначенный для занесения в качестве стеганограммы.

В результате работы система Mathcad создаст следующие файлы:

  • output.wav – аудиофайл, содержащий внесенный в него открытый текст
  • output.txt – открытый текст, полученный в результате извлечения из стегоконтейнера.

Ограничения на исходные данные:

  • Аудио-файл: PCM-stereo. Объем не более 3 Мбайт.
  • Открытый текст: при размере аудиофайла в 3МБ максимальный объем стегосообщения может достигать 90 кбайт.

Занесение стего в звуковой контейнер

Задание:

  1. В произвольно выбранном контейнере в виде сэмпла звукового файла управляемого объема записать произвольно выбранное стего методом LSB.
  2. Восстановить стего по известному ключу.
  3. Промоделировать занесение Гауссовского шума в файл, содержащий стегосообщение с помощью функции rnоrm().
  4. Качественно оценить влияние шума и параметров нормального распределения плотности вероятности шума на восстановленное стего.

Постановка задачи кодирования/декодирования:
Входные данные:

  • произвольная аудио-запись wav-формата, закодированная с помощью PCM-кодека, в файле input.wav
  • произвольный открытый текст в файле plain.txt

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

  • при внесении стего: аудио-файл output.wav
  • при извлечении: текстовый файл output.txt

Условие корректности работы алгоритма: Ключи, используемые при внесении и извлечении стегозаписи должны совпадать.
Постановка задачи моделирования шума:
Входные данные:

  • аудио-запись wav-формата, закодированная с помощью PCM-кодека, в файле output.wav, содержащая стегозапись с известным ключем

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

  • по полученному файлу определяется влияние шума на стегозапись

Решение задачи

  • Определим некоторые вспомогательные функции, необходимые для алгоритмов занесения и извлечения стего-данных.

Функции, необходимые для проверки корректности алгоритмов

Преобразование массива бит в десятичное число:

Рис.1.Преобразование массива бит в десятичное число


Преобразование десятичного числа в массив бит:

Рис.2.Преобразование десятичного числа в массив бит


  • Вспомогательные функции, используемые в алгоритмах:

Двоичный сдвиг вправо (выполняется над десятичным представлением числа):

Рис.3.


Замена младшего бита числа:

Рис.4.


Рис.5.
Длина числа в битах:

Рис.6.


Функция внесения стегозаписи в аудиоданные

Входные параметры:

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

На выходе алгоритма имеем модифицированные аудиоданные

Описание алгоритма работы:

  • ключ представляет собой модуль, по которому производится модификация данных массива аудиоданных
  • если элемент массива аудиоданных подходит ключу, то производится занесение в его младший бит бита открытого текста, после чего производится сдвиг байта текста вправо для последующего считывания
  • данная операция повторяется для всех слов открытого текста, также в массив открытого текста добавляется маркер конца данных в виде байта "255"
Рис.7.


Функция внесения стегозаписи в аудиоданные

Входные параметры:

  • аудиоданные в виде массива амплитуд по семплам
  • ключ, по которому производилось занесение данных

На выходе алгоритма имеем выделенный открытый текст из аудиоданных
Описание алгоритма работы:

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


Функция внесения стегозаписи в аудиоданные

Входные параметры:

  • аудиоданные в виде массива амплитуд по семплам
  • ключ, по которому производилось занесение данных

На выходе алгоритма имеем выделенный открытый текст из аудиоданных
Описание алгоритма работы:

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

Алгоритм останавливается при считывании указанного количества байт открытого текста.

Рис.9.


Программа, демонстрирующую запись стего

1. Для начала зададим исходные данные: input := "input.wav" plaintext := "plain.txt" (output := "output.wav) 2. Прочитаем аудио и текст: audio_data := READWAV(input) audio_size := rows(audio_data) audio_info := GETWAVINFO(input) plain_data := READBIN(plaintext, "byte") plan_size := rows (plain_data) 2. Проведем запись стего в аудиоданные, предварительно задав для этого ключ и глубину записи: key := 1 d := 0 audio_out := lsb_encypher(audio_data, plain_data, key, d) audio_out^{1} := audio_out^{0} Проверим, что запись выполнена audio_out := audio_data = 0 3. Запишем полученные данные в файл

LSBs10-1.PNG


Рис.11.

Рис.12.

Программа, демонстрирующую извлечение стего

1. Прочитаем полученный на предыдущем этапе аудиофайл audio_stego_data := READWAV(output) audio_stego_size := rows(audio_stego_data) audio_info := GETWAVINFO(output) 2. Выполним извлечение с тем же ключем: extracted := lsb_decypher (audio_stego_data,key, d) Проверим целостность извлеченных данных extracted := plain_data = 1

Данные совпали.

3. Запишем извлеченные данные в файл WRIEBIN("output.txt" , "byte", 0) := extraxted

Рис.13.

Рис.14.
Проведем анализ влияния шума на стегозапись

  • Рассмотрим стандартное нормальное распределение с матожиданием в нуле и среднеквадратичным отклонением 1 на 10 точках:

Рис.15.Нормальное распределение с матожиданием в нуле и среднеквадратичным отклонением 1 на 10 точках

  • запишем параметры шума, предназначенного для внесения в стего-контейнер.

По характеру данных, представляющих нормальное распределение, минимальное влияние на аудиоданные окажет стандартное нормальное распределение n := rows*audio_stego_data) = 7.734 * 10^5 - количество точек µ := 0 - матожидание σ := 1 - среднеквадратичное отклонение

  • произведем запись шума в стего-контейнер и оценим изменения:

N: =rows(audio_stego_data) - 1 ix: = 0...N audio_noise_data:= audio_stego_data audio_noise_data<0>:= audio_noise_data<0>+ rnorm(N + 1, µ,σ) audio_stego_data - audio_noise_data Заметим, что изменения в основном коснулись нецелых частей амплитуд, а также, что в исходных аудиоданных все амплитуды представлены целыми числами. Из этого можно сделать предположение, что подобный шум плохо отразится на стегозаписи.

  • Произведем извлечение открытого текста из стего-контейнера с шумом и оценим повреждения

Заметим, что так как внесенный шум искажает терминальный байт "255", то придется воспользоваться упрощенным алгоритмом декодировани extracted_noise:= lsb_decypher2(audio_noise_data,key,50) Рис.16. Рис.16.
Как видно из сильно отличающихся результатов, даже минимально возможный шум искажает данные настолько сильно, что успешное декодирование невозможно. На основании этого можно поставить необходимое условие передачи по каналу стегоконтейнера в виде аудиоданных: необходима передача, гарантирующая исправление ошибок.

Заключение по работе

Внесение и извлечение стегосообщения

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

Влияние глубины записи на различимость наличия стегосообщения человеческим ухом

  • В первой части работы также было произведено исследование влияния глубины записи открытого текста на искажение аудиозаписи. Были получены следующие результаты:
Глубина записи стего, бит Слуховые ощущения
0 – 5 бит Наличие стегосообщения не заметно
5 – 9 бит Стегосообщение едва заметно в виде высокочастотного шума
10 – 14 бит Явно слышно присутствие стего в виде высокочастотного шума и «хрипа»
15 и более бит Аудиозапись почти не различима на фоне шума
  • Приложенные примеры для глубины в 0, 10 и 15 бит можно найти в папке «Результаты анализа», как представляющие наибольший интерес.
  • По полученным результатам можно сделать вывод, что допустимой глубиной записи стегосообщения будет 0 – 5 бит аудиоданных. Идеальный результат достигается при записи стего только в младшие биты аудиоданных


Влияние шума на стегосообщение

  • Во второй части работы было продемонстрировано влияние Гауссовского шума на возможность восстановления стегозаписи. В качестве эталонных параметров использовались параметры стандартного нормального распределения:


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

Аудио файлы

Input.wav – контейнер


Output.wav -№1 файлы со стего




Output_0.wav -№2 файлы со стего


Output_10.wav -№3 файлы со стего




Output_15.wav -№3 файлы со стего





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