Изучение влияния шума на метод LSB с помощью функции rnd()

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

Техническое задание

Описание используемого метода

Данная работа представляет собой реализацию метода сокрытия информации произвольного происхождения в аудиофайлах формата .wav при использовании младшего значащего бита (Least Significant Bit, LSB).
Настоящая реализация предусматривает генерацию псевдослучайной последовательности расположений используемых байт, младшие биты которых будут использованы на основе равномерного распределения, зависящего в свою очередь от размера скрываемой информации. Канал (в случае стерео аудиофайла-контейнера) выбирается также псевдослучайно.
Ключом при сокрытии и извлечении информации является инициализирующее значение генератора псевдослучайной последовательности, что гарантирует невозможность раскрытия сокрытой информации.

Использование реализованной модели

Модель реализована с использованием возможностей программы Mathcad (Версия 14) в файле lukinykh.xmcd. Все последующие файлы располагаются в одной директории с файлом модели lukinykh.xmcd.
Входные данные:

  • аудиофайл SOURCE_NAME [cont.wav] - аудиофайл, используемый в последующем в качестве контейнера для хранения скрываемой информации;
  • файл данных INFO_NAME [info.txt] - файл, содержащий скрываемую информацию;
  • ключ KEY - некоторое натуральное число, задается в тексте модели - значение ключа, используемого для сокрытия.

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

  • аудиофайл STEGO_NAME [stego.wav] - аудиофайл, содержащий сокрытую методом LSB информацию;
  • файл данных EXTRA_NAME [extra.txt] - файл, содержащий информацию, извлеченную из файла STEGO_NAME в соответствии с используемым методом LSB;
  • аудиофайл NOISE_STEGO_NAME [noise.wav] - аудиофайл, содержащий сокрытую методом LSB информацию, после моедлирования воздействия случайного шума;
  • файл данных NOISE_EXTRA_NAME [noise.txt] - файл, содержащий информацию, извлеченную из файла NOISE_STEGO_NAME в соответствии с используемым методом LSB.

Описание результатов выполнения задачи

Извлечение информации после сокрытия весьма затруднительно в случае неизвестного ключа. С увеличением размера скрываемой информации увеличивается количество возникающих ошибок при восстановлении. Данное поведение может быть обусловлено использованием функций округления, приближения или же отсечения дробной части. В данной реализации - tranc(). Но даже при достаточно больших размерах входных данных (не превышающих 0.125 от размера файла SOURCE_NAME), слух солиста хора МГТУ им.Н.Э.Баумана не может отличить использованный контейнер до внесения скрываемой информации и после использования метода LSB.
Как и следовало ожидать, метод LSB крайне неустойчив к воздействию шума в канале. Данный факт качественно оценивается высокой степенью искажения извлеченной информации даже при малых значениях "коэффициента искажения", задаваемого в модели переменной NOISE_K. Увеличение данного коэффициента не влияет на степень "правдоподобности" восстановленной информации, но при этом значительно ухудшает качество столь достойной аудиозаписи.

Текст кода программы – занесение и извлечение стегосообщения

Задача:

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

Входные данные для сокрытия информации в звуковой файл:

  • ключ;
  • имя файла, который в дальнейшем будет являться контейнером;
  • скрываемое сообщение.

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

  • стего.

KEY := 29061986 SOURCE_NAME := "info.txt" INFO_NAME := "info.txt" STEGO_NAME := "stego.wav" Получаем контейнер и информацию о нем: SOURCE := READWAV(SOURCE_NAME) SOURCE_INFO := GETWAVINFO(SOURCE_NAME) colsSRC := cols(SOURCE) = 2

Фрагмент кода


Открываем файл, содержащий скрываемую информацию: INFO := READBIN(INFO_NAME, "byte")

Фрагмент кода


Подготовим стего. Для этого очистим входной файл от псевдослучайно заданных младших бит, установив инициализирующее значение генератора. Побитно запишем информацию в полученный контейнер: sd := Seed(KEY) //Устанавливается ключ

Фрагмент кода


Записываем полученный аудиофайл со скрытой информацией:

Фрагмент кода


KEY := 29061986 EXTRA_LENGTH := rowsINFO EXTRA_NAME := "extra.txt" STEGO_NAME := "stego.wav" Открываем файл, содержащий сокрытый текст: STEGO := READWAV(STEGO_NAME) STEGO_INFO := GETWAVINFO(STEGO_NAME) colsSTG := cols(STEGO) rowsSTG := rows(STEGO) Извлечем сокрытую информацию: проинициализируем генератор псевдослучайных чисел имеющимся ключом, а затем побитово получим искомую информацию. sd := Seed(KEY) //Устанавливается ключ

Фрагмент кода


Записываем извлеченную информацию: WRITEBIN(EXTRA_NAME, "byte" ,0) := EXTRA Промоделируем влияние шума на восстановление стего: NOISE_K := 0.05 NOISE_EXTRA_NAME := "noise.txt" NOISE_STEGO_NANE := "noise.wav" Имеем файл, содержащий сокрытую информацию: STEGO := READWAV(STEGO_NAME) STEGO_INFO := GETWAVINFO(STEGO_NAME) colsSTG := cols(STEGO) rowsSTG := rows(STEGO) j := 0..colsSTG - 1 i := 0..rowsSTG - 1 Внесем равномерный такой шум:

Фрагмент кода
Фрагмент кода


Извлечем сокрытую информацию: проинициализируем генератор псевдослучайных чисел имеющимся ключом, а затем побитово получим искомую информацию. sd := Seed(KEY) //Устанавливается ключ

Фрагмент кода


Записываем извлеченную информацию и аудиофайл с шумом: WRITEBIN(NOISE_EXTRA_NAME, "byte" ,0) := NOISE_EXTRA

Фрагмент кода


Аудиофайлы

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





stego.wav - файл с занесенным стегосообщением





noise.wav - файл с занесенным стегосообщением и шумом



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