ВКР Чирков А.А. 24Б (1213186), страница 5
Текст из файла (страница 5)
Рисунок 2.1.1.9.1 – Диаграмма сравнения использования методов скрытия в пространственной области
2.2 LSB метод (метод наименьшего значимого бита)
2.2.1 Принцип сокрытия информации
LSB (Least Significant Bit, наименьший значащий бит). Суть этого метода заключается в замене последних значащих битов в контейнере (изображения, аудио или видеозаписи) на биты скрываемого сообщения. Разница между пустым и заполненным контейнерами должна быть не ощутима для органов восприятия человека.
Для простоты описания можно рассмотреть принцип работы этого метода на примере 24-х битного растрового RGB изображения. Одна точка изображения в этом формате кодируется тремя байтами, каждый из которых отвечает за интенсивность одного из трех составляющих цветов. Представление цвета этой точки – пикселя проиллюстрировано на рисунке 2.2.1.1.
Для простоты описания можно рассмотреть принцип работы этого метода на примере 24-х битного растрового RGB изображения. Одна точка изображения в этом формате кодируется тремя байтами, каждый из которых отвечает за интенсивность одного из трех составляющих цветов. Представление цвета этой точки – пикселя проиллюстрировано на рисунке 2.2.1.1.
Рисунок 2.2.1.1 – Представление цвета пикселя в 24-х битном bmp изображении
В результате смешения цветов из красного (R), зеленого (G) и синего (B) каналов пиксель получает нужный оттенок. Чтобы нагляднее увидеть принцип действия метода LSB, распишем каждый из трех байтов в битовом виде. Младшие разряды (на рисунке они расположены справа) в меньшей степени влияют на итоговое изображение, чем старшие. Из этого можно сделать вывод, что замена одного или двух младших, наименее значащих битов, на другие произвольные биты настолько незначительно исказит оттенок пикселя, что зритель просто не заметит изменения.
Допустим, нам нужно скрыть в данной точке изображения шесть бит: 101100. Для этого разобьем их на три пары и заместим ими по два младших бита в каждом канале, как показано на рисунке 2.2.1.2.
Рисунок 2.2.1.2 – Исходные и измененные компоненты цвета
В результате мы получим новый оттенок, очень похожий на исходный. Новый оттенок представлен на рисунке 2.2.1.3. Эти цвета трудно различить даже на большой по площади заливке. Как показывает практика, замена двух младших битов не воспринимается человеческим глазом. В случае необходимости можно занять и три разряда, что весьма незначительно скажется на качестве картинки.
Рисунок 2.2.1.3 – Цвет пикселя с внедренными данными
Теперь можно посчитать полезный объем такого RGB контейнера. Занимая два бита из восьми на каждый канал, мы будем иметь возможность спрятать три байта полезной информации на каждые четыре пиксела изображения, что соответствует 25 % объема картинки. Таким образом, имея файл изображения размером 200 Кбайт, мы можем скрыть в нем до 50 Кбайт произвольных данных так, что невооруженному глазу эти изменения не будут заметны.
Все BMP контейнеры нужно разделить на два класса: «чистые» и зашумленные. В «чистых» картинках прослеживается связь между младшим битом, который подвергается изменениям, и остальными 7-ю битами элементов цвета, а также видна зависимость самих младших битов между собой. Внедрение сообщения в «чистую» картинку разрушает существующие зависимости, что очень легко выявляется наблюдателем. Если же картинка зашумлена (например, получена со сканера или фотокамеры), то определить вложение становиться намного сложнее. Таким образом, в качестве файлов – контейнеров для метода LSB рекомендуется использовать файлы, которые не были созданы на компьютере изначально.
2.2.2 Достоинства и недостатки метода
Среди достоинств данного метода можно выделить следующие признаки:
– размер файла – контейнера остается неизменным;
– при замене одного бита в канале синего цвета внедрение невозможно заметить визуально;
– возможность варьировать пропускную способность, изменяя количество заменяемых бит.
Недостатками является следующее:
– метод неустойчив к обработке файла – контейнера.
3 Проектирование и разработка программного продукта
3.1 Язык программирования
Для реализации программного продукта был выбран объектно-ориентированный язык программирования C#. C# прост и удобен в использовании, легок в исполнении, он подходит для разработки достаточно объемных приложений, но для разработки проектируемого программного продукта не потребуется большой вычислительной мощности компьютера или огромного функционала языка программирования, так как применяемый метод скрытия информации прост в реализации.
3.2 Требования к разработке программного продукта
Проектируемый программный продукт должен отвечать следующим требованиям:
– реализация метода скрытия информации в изображениях с помощью наименьшего бита;
– присутствие функционала встраивания и считывания секретной информации;
– присутствие предупреждения при слишком большом объеме встраиваемой информации.
3.3 Реализация программного продукта
Для реализации программного продукта будет использовать стандартный набор библиотек в язык программирования C#. Используемые библиотеки представлены на рисунке 3.3.1.
Рисунок 3.3.1 – Список библиотек
На первом этапе реализации создано три вспомогательных класса, в которых описаны основные методы, выполняющие главную часть работы программного продукта. Первый класс называется «BitConverter.cs». Он содержит в себе два обратных по выполняемых процедурам метода. Первый метод преобразует переданный аргумент (байт) в массив битовых значений и возвращает массив битов. Второй метод принимает в виде аргумента массив битов. Биты преобразуются в байт. Метод возвращает единственный элемент типа byte. Вид класса представлен на рисунке 3.3.2.
Рисунок 3.3.2 – Класс "BitConverter"
В теле второго класса «PhotoCriptography.cs» описаны четыре метода.
Первый имеет название «IsLabeledPhoto». Он проводит проверку изображения – контейнера на наличие уже встроенной в него информации. Метод определяет тег, если в изображение уже встроена какая–либо информация. В зависимости от типа тега метод возвращает соответствующие целочисленные значения, которые говорят о типе встроенной информации в контейнер.
Второй метод «WriteInPhoto» встраивает текстовое сообщение в картинку. Метод описывает цикл, в котором программа проходит по каждому пикселю изображения. Во время прохода байты каждого канала RGB одного пикселя раскладываются на массивы битов с помощью класса «BitConverter.cs». Младший два бита в байте первого канала – R заменяются на два бита текстового сообщения. Байты следующих двух каналов – G и B претерпевают такие же изменения своих младших трех битов. Затем массивы битов поочередно преобразуются обратно в байты. С помощью новых значений байтов формируется новый цвет, и передается обратно в пиксель. После завершения работы с один пикселем цикл переходит к следующему, и так до тех пор, пока цикл не пройдет по всем элементам входного массива байтов.
Третий метод «GetTextFromPhoto» считывает текстовое сообщение из изображения. Проходя циклом по всем пикселям изображения, программа конвертирует каждый байт канала в последовательность битов, записывает из байта канала R два младших бита, из байтов оставшихся каналов записывает по три бита. Получившуюся последовательность битов формируем в байты, а байты конвертируем в строку символов. После завершения цикла метод возвращает декодированную строку.
Четвертый метод выполняет примерно тоже самое, что и метод «GetTextFromPhoto» кроме возвращаемого значения. Метод «GetFileFromPhoto» возвращает лист байтов, чтобы в дальнейшем разобрать последовательность байтов на блоки.
Так же в стеганографическом классе присутствует ссылка на класс «BitConverter.cs», так как методы класса «PhotoCriptography.cs» работаю со множеством байтов и для упрощения конвертирующий класс используется для преобразования байтов в массив бит и обратно. Вид класса представлен на рисунке 3.3.3.
Рисунок 3.3.3 – Класс "PhotoCriptography"
Третий вспомогательный класс «Cipher» представляет собой класс шифрования. Он пригоден для чтобы данные в изображении – контейнере хранились в зашифрованном виде. В классе описаны два методы шифрования и дешифрования данных. В применяемом алгоритме шифрования используется закрытый ключ. Ключом является массив байтов, декодированных из строковой переменной, которая вводится оператором.
Также в классе описан метод «Swap», применяющийся для зашифровки битов входящих массивов. Вид класса представлен на рисунке 3.3.4.
Рисунок 3.3.4 – Класс "Cipher"
На втором этапе реализации в проект добавляется Windows форма «Main». Cs класс формы является основным классом приложения. Данный класс состоит из семи обработчиков событий одного метода типа bool.
Первый обработчик событий реагирует на изменение состояния строки элемента – текстбокс (tbx_SetSecretMess). При активации поля ввода текста, обработчик событий выполняет операцию включения элемента–кнопки для встраивания последовательности символов в поле текстбокса.
Второй обработчик событий откликается на нажатие кнопки (btn_BuildInText), после чего выполнят набор операций. После нажатия на кнопку сообщение, введенное в текстбоксе шифруется с помощью экземпляра объекта класса «Cipher.cs» и конвертируется в массив байт. К сообщению пристраивают четыре байта данных, содержащих в себе теги, по которым определяется тип хранимых данных в контейнере, и конец встроенных данных в контейнере. Полученная последовательность байт встраивается в изображение с помощью экземпляра класса «PhotoCriptography.cs». Изображение пересохраняется с новыми битами данных, принадлежащих сообщению.
Третий обработчик открывает диалоговое окно выбора файла в системе для записи в изображение. После выполнения основной операции, происходит ряд операций для комфортного и простого использования программного продукта.
Четвертый срабатывает при нажатии кнопки (btn_BuildInFile) – встраивание файла в изображение. Генерируется лист байтов из последовательности байтов встраиваемого файла и тегов, обозначающих конец имени файла, конец хэш кода, конец всего массива байтов файла. Полученная последовательность байтов встраивается в контейнер с помощью экземпляра класса «PhotoCriptography.cs», затем сохраняем измененную последовательность байтов как изображение.
Пятый обработчик открывает диалоговое окно выбора файла формата bmp после нажатия на кнопку. Ограничения по формату нужны для применения метода цифровой стеганографии LSB. Изображение должно описываться двумерным массивом пикселей, каждый из которых представляется двадцати четырёхбитной ячейкой, определяющей цвета каналов RGB. Под данные требования подходят графические файлы с расширением bmp. Следующим действием обработчик запускает проверку открытого файла с помощью первого метода класса «PhotoCriptography.cs», который определяет, если ли в данном контейнере застеганографированная информация или картинка пуста. В зависимости значения обработчик включает и отключает элементы для дальнейшей работы.
Шестой обработчик срабатывает после нажатия кнопки считывания текста из застеганографированного изображения. В массив байтов присваивается считанная зашифрованная строка. Применяя экземпляр класса «Cipher.cs» строка расшифровывается и передается в текстбокс (tbx_GetSecretMess) для чтения.
Седьмой обработчик считывает застеганографированный файл из контейнера. Применяется метод класса «PhotoCriptography.cs», который передает на выход лист байтов исходного файла. Проходя циклом по байтам считанной последовательности, каждый байт декодируется в символ определенной кодировкой и добавляется в строку символов. Если в строке размещен тег «<e>», значит это конец застеганографированной последовательности. Обработчик определяет все теги, которые нужны для корректного считывания файла из файла – контейнера. После считывания проводится проверка контрольных сумм считанного и застеганографированного файла, значения которых должны совпадать.
Метод сравнения массивов типа bool главного класса принимает в качестве аргументов два массива байтов. Метод используется, когда считанный файл из файла – контейнера нужно проверить на целостность. Для сравнения используется хэш код байтов извлеченного файла и хэш код из извлеченных байтов.
Класс Main и представлен на рисунке 3.3.5.















