Стеганография изображения методом LSB

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

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

  • Шайдуллин.xmcd - программные операторы системы MATLAB, алгоритмы и комментарии.
  • Das.bmp - исходный файл (первичное изображение)
  • M.txt - исходный файл (текст)
  • new_das.bmp - файл со скрытым сообщением
  • M_dec.txt - файл, в который записало декодированное сообщение.

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

Алгоритмы встраивают скрываемые данные (текст) в области первичного изображения.

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

Производится импорт графического файла.
2image lsb.PNG

Графическая интерпретация массива цветовых компонентов контейнера-оригинала


C:=READRGB ("das.bmp")


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

4image lsb.PNG

R:=READ_RED ("das.bmp) G:=READ_GREEN ("das.bmp) B:=READ_BLUE ("das.bmp)


READ_RED(файл), READ_GREEN(файл), READ_BLUE(файл) - массивы, отвечающие соответственно красной, зеленой и синей компонентам объекта (изображения)

Импорт текстового сообщения можно выполнить с помощью функции READBIN("имя файла", "тип формата данных")


M:=READBIN ("M.txt", "byte")

 

Необходимо установить с помощью оператора ORIGIN:=1 в начале документа или ввести 1 в поле Array Origin на вкладе Built-In Variables диалогового окна Worksheet Options, которое вызывается из меню Tools

Алфавит источника сообщения зададим в виде ASCII-кодов: i:=1...256 Ai:=i-1


Объем алфавита источника: Na=rows(A)=256


Из символов алфавита задаем секретный ключ: K:="@J|eKc-|98O"


Количество символов в ключе Nk=strlen(K)=11


Объема сообщения, которое подлежит кодированию: Nm=rows(M)=830


Расширяем ключ на длину сообщения (Nm), используя программный модуль:
15image lsb.PNG

Выполняем кодирование сообщения, используя модуль:

16image lsb.PNG
Метки должны состоять из достаточного количества символов, чтобы не принимать за метки символы случайного образования. Кроме того, для уменьшения вероятности обнаружения меток при проведении стеганоанализа желательно, чтобы коды этих символов были достаточно разнесены на ASCII. Пусть метки имеют следующий вид:

17image lsb.PNG
18image lsb.PNG


Ограничивающие метки добавляем в текст закодированного сообщения:

19image lsb.PNG

Общее количество символов в скрытом сообщении:


rows(sMe):=844


Количество НЗБ контейнера, которое для этого необходимо (8 бит/символ):


8*rows(sMe):=6752 бита


Общее количество НЗБ контейнера:


rows (C)*cols (C)>6752 бит


Таким образом, файл изображения имеет достаточный объем для того, чтобы скрыть сообщение.

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

23image lsb.PNG

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

24image lsb.PNG

Для увеличения защищенности скрытой информации перед непосредственным встраиванием сообщения меняются местами цветовые матрицы R и B.

25image lsb.PNG

На основе вектора Cv формируем новый вектор, который уже будет содержить скрытое закодированное сообщение:

26image lsb.PNG

Полученный с помощью выше модуля вектор Sv сворачиваем в матрицу S, имеющую размерность первичной матрицы C.

26image lsb.PNG
27image lsb.PNG

Пользуясь этой функцией, выделяем из массива S' цветовые матрицы и расставляем их на свои места (R<->B), получаем контейнер-результат S:

28image lsb.PNG
29image lsb.PNG
30image lsb.PNG
31image lsb.PNG

Контейнер-результат и его интерпретация в виде массива цветовых компонентов

32image lsb.PNG


Записать массив S в файл: WRITERGB("new_das.bmp"):=S


Рассмотрим процесс распаковки скрытого сообщения R":=READ_RED ("new_das.bmp) G":=READ_GREEN ("new_das.bmp) B":=READ_BLUE ("new_das.bmp)


Из полученных матриц, соответствующим образом изменяя их порядок, формируем вектор Sv

37image lsb.PNG

Распаковываем скрытое сообщение

38image lsb.PNG
39image lsb.PNG

Зная, что текст полезной информации ограничен метками:

40image lsb.PNG
41image lsb.PNG


Выделяем его из извлеченного квазисообщения:

42image lsb.PNG

Распакованное сообщение требуется декодировать. Необходимые начальные условия:

  • алфавит источника сообщения: A"i:=i-1 объемом N"a:=rows(A")=256
  • секретный ключ K":= @J|eKc-|98O c N"k:=strlen(K")=11 объем сообщения, подлежащего декодированию: N"m:=rows(M_cod")=830

Секретный ключ K расширяется на длину Nm сообщения M_cod

50image lsb.PNG

Декодирование секретного сообщения:

51image lsb.PNG

Декодированное сообщение записываем в файл: WRITEBIN("M_dec.txt", "byte", 0):=M"


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