Стеганография звука методом LSB

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


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

Назначение программы

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

Условия применения

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

Программа работает на ПК с ОС Windows.
Система состоит из следующих компонентов:

  1. Модуль внесения данных в звук
  2. Модуль получения данных из звука

Модули реализованы в среде MathCAD 14.

Требования к техническим средствам

Требуется компьютер со следующими параметрами:

  • X86 совместимый процессор – 700 МГц и выше
  • 512 МБ RAM и более.

Требования к программному обеспечению

Требуется установленный программный продукт MathCAD 14, а так же сопутствующее программное обеспечение:

  • Windows XP Home или Professional, Windows XP Professional x64, или Windows Vista; рекомендуется Windows XP SP3, XP-x64 SP2, или Vista.
  • Windows Installer 3.0 или старше.
  • Microsoft .NET Framework® 3.5 или старше
  • MSXML 4.0 SP2 Parser and SDK
  • Microsoft Data Access Components (MDAC) 2.8 или старше
  • Internet Explorer 5.0 или старше.
  • Adobe Reader 5.0 или старше.

Описание задачи

Решаемые задачи

Сокрытие и извлечение информации в/из контейнера WAV – программа позволяет произвести сокрытие информации в контейнере и ее извлечение из контейнера. Алгоритм ограничен размерами контейнера.

Используемые решения

Последовательность для записи данных берется из файла, стего записывается методом LSB, последовательно в каждый байт сообщения.

Входные и выходные данные

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

На вход алгоритма подаются данные, не превышающие размер конкретного аудио-файла, исполняющего роль контейнера.

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

На выходе алгоритма кодирования получаем контейнер с зашифрованными данными. На выходе алгоритма декодирования получаем данные.

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

Введение

Область применения:
Данная программа предназначена для осуществления скрытой передачи данных в контейнере WAV.
Краткое описание возможностей:
Основными возможностями программы являются:

  • Сокрытие информации в контейнере WAV
  • Извлечение информации из контейнера WAV

Назначение и условия применения

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

  • Занесение данных в аудио-файл
  • Извлечение данных из аудио-файла

Требования к системе:

  • X86 совместимый процессор - 700 МГц или выше
  • 512Мб RAM и выше.
  • MathCAD 14
  • ОС Microsoft® Windows® XP/Vista/7 (32 или 64bit)

Подготовка к работе

Состав дистрибутива:

  • LSB_in.xmcd
  • LSB_out.xmcd

Запуск системы:
Запустить ПО MathCAD 14 и открыть оба файла в вышеприведенном порядке

Описание операций

Подготовительные действия:

  • Создание файла data.txt
  • Выбор будущего контейнера для стего

Основные действия:

  • Запись данных в контейнер
  • Занесение шума в контейнер с данными

Заключительные действия:

  • Сохранение контейнера в виде файла в папке с программой
  • Сохранение зашумленного контейнера в папке с программой

Внесение данных в аудио-файл

Подготовительные действия:

  • Генерация данных для внесения
  • Создание аудио-файла audio.wav

Основные действия:
Открыть файл LSB_in.xmcd и дождаться завершения всех вычислений
Заключительные действия:

  • Запись контейнера со стего audio1.wav
  • Запись зашумленного контейнера со стего audio2.wav

Извлечение данных

Подготовительные действия:

  • Открытие файла LSB_out.xmcd в MathCAD 14
  • Открытие в файле MathCAD-а контейнера со стего audio1.wav
  • Открытие в файле MathCAD-а зашумленного контейнера со стего audio2.wav

Основные действия:
Дождаться выполнения всех вычислений в файле LSB_out.xmcd

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

Задание:

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

Исходные данные: произвольный звук в файле audio.wav и произвольное стегосообщение в файле data.txt.
Выходные данные: звук с внедренным стего в файле audio1.wav и зашумленный контейнер со стего в файле audio2.wav.
Откроем контейнер: Audio := READWAV("audio.wav") // Сам контейнер AudioInfo := READWAV("audio.wav") // Информация о контейнере Откроем данные: Data :=READBIN("data.txt , "byte") Размер контейнера: N :=rows(Audio) Размер данных: M :=rows(Data) = 38 Функция записи данных в контейнер методом LSB.
Для это берем каждый байт данных:

Рис.1.Функция записи данных в контейнер методом LSB


WRITEWAV("audio1.wav", AudioInfo1, AudioInfo2):= Audio3 //Сохраним контейнер со стего Запишем шум в контейнер со стего: NoizeBytes := 3000 // Число зашумляемых байтов NoizeLevel := 255 // Уровень шума Функция занесения шума в контейнер Рис.2.Функция занесения шума в контейнер
Занесем шум в контейнер со стего: Audio4 := Noize Сохраним зашумленный контейнер со стего: WRITEWAV("audio2.wav", AudioInfo1, AudioInfo2) := Audio4

Извлечение стего из звукового контейнера

Задание:

  1. Восстановить стего по известному ключу.
  2. Промоделировать фильтрацию с помощью полосового фильтра низких частот.
  3. Качественно оценить влияние шума и его фильтрации на восстановленное стего.

Исходные данные: звук с внедренными данными в файле audio1.wav, зашумленный звук с внедренными данными в файлах audio2.wav.
Выходные данные: звук в файлах audio_filtered.wav, audio_filterd1.wav и audio_filtered2.wav, извлеченное стегосообщение в файлах data_out.txt, data_out_noized.txt, data_out_filtered.txt, data_out_filtered1.txt, data_out_filtered2.txt
Результаты: cтегосообщение успешно восстанавливается в случае, если на контейнер не было оказано сторонних воздействий. Невозможность восстановления стегосообщения после применения фильтра низких полосовых частот (с различными параметрами) подтверждает крайнюю неустойчивость метода LSB к сторонним воздействиям.
В начале попробуем извлечь сообщение из незашумленного контейнера.
Открываем контейнер: Audio := READWAV("audio1.wav") // Сам контейнер AudioInfo := GETWAVINFO("audio1.wav") // Информация о контейнере M := 38 //Длина считываемого сообщения N := rows(Audio) //Длина контейнера n := 1..N m := 0..M - 1 Data1m := 0 bit := 0 Функция извлечения данных из контейнера.

Рис.2 Функция извлечения данных из контейнера

Извлечем данные из незашумленного контейнера: Data2 :=LSB_out(Audio) Запишем полученные данные в файл: WRITEBIN("data_out.txt", "byte" ,0) := Data2

Попробуем проделать то же самое с зашумленным контейнером. Откроем зашумленный контейнер: AudioNew := READWAV("audio2.wav") AudioNewInfo := GETWAVINFO("audio2.wav") Попробуем извлечь из него данные: Data3 := LSB_out(AudioNew) Запишем их в файл: WRITEBIN("data_out_noize.txt", "byte" ,0) := Data3 Как видно из файла, данные не были успешно восстановлены.
Попробуем использовать фильтр.
Для реализации фильтра используем БПФ:

N := rows(AudioNew) = 3.725*10000 Расширим массив, дополнив его нулями до длины, кратной 216: NewLenght := 65536 //Новая длина контейнера k :=0..NewLenght - 1 N_Arrayk := 0 //Массив под новый, расширенный контейнер q := 0..N - 1 N_Arrayq := AudioNewq //Перепишем в начало нового массива контейнер F_A := fft(N_Array) rows(F_A) = 3.277*10000 Попытаемся подобрать диапазон частот для оптимальной фильтрации, которые будем обрезать: fg := 21000..rows(F_A) - 1 lg := 0..7000

Рис.1 Параметры фильтра №1

Применяем фильтр: F_Afg := 0 F_Alg := 0 I_A := ifft(F_A) //Полученный после фильтрации контейнер II_Aq := floor(I_Aq) //Избавляемся от нулей, которыми расширяли исходный контейнер Запишем отфильтрованный контейнер в файл: WRITEWAV("audio_filtered.wav", AudioInfo1, AudioInfo2):= II_A Попробуем извлечь из него данные: Data4 := LSB_out(II_A) Запишем извлеченные данные в файл: WRITEBIN("data_out_filtered.txt", "byte" ,0) := Data4 Как видно из файла, данные не были успешно восстановлены.
Попробуем использовать другие параметры фильтра: F_A := fft(N_Array) fg := 29555..rows(F_A) - 1

Рис.2 Параметры фильтра №2

Применяем фильтр: F_Afg := 0 I_A := ifft(F_A) //Полученный после фильтрации контейнер II_Aq := floor(I_Aq) //Избавляемся от нулей, которыми расширяли исходный контейнер Запишем отфильтрованный контейнер в файл: WRITEWAV("audio_filtered1.wav", AudioInfo1, AudioInfo2):= II_A Попробуем извлечь из него данные: Data5 := LSB_out(II_A) Запишем извлеченные данные в файл: WRITEBIN("data_out_filtered1.txt", "byte" ,0) := Data5 Как видно из файла, данные не были успешно восстановлены.
Попробуем использовать другие параметры фильтра: F_A := fft(N_Array) fg := 25000..rows(F_A) - 1 lg := 0..5000

Рис.3 Параметры фильтра №3

Применяем фильтр: F_Afg := 0 F_Alg := 0 I_A := ifft(F_A) //Полученный после фильтрации контейнер II_Aq := floor(I_Aq) //Избавляемся от нулей, которыми расширяли исходный контейнер

F_Afg := 0 I_A := ifft(F_A) //Полученный после фильтрации контейнер II_Aq := floor(I_Aq) //Избавляемся от нулей, которыми расширяли исходный контейнер Запишем отфильтрованный контейнер в файл: WRITEWAV("audio_filtered2.wav", AudioInfo1, AudioInfo2):= II_A Попробуем извлечь из него данные: Data6 := LSB_out(II_A) Запишем извлеченные данные в файл: WRITEBIN("data_out_filtered2.txt", "byte" ,0) := Data6 Как видно из файла, данные не были успешно восстановлены.

Аудио файлы

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


audio1.wav - файлы с занесенным белым шумом




audio2.wav - файлы с занесенным белым шумом


audio_filtered.wav - файл после фильтрации




audio_filtered1.wav -


audio_filtered2.wav -

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