Простые / Основные стеганографические алгоритмы и методы - PullRequest
12 голосов
/ 11 июня 2010

Каковы основные и самые простые алгоритмы стеганографии и методы?

Я имею в виду стеганографию, примененную к изображениям.

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

Ответы [ 3 ]

24 голосов
/ 11 июня 2010

Каковы основные и самые простые алгоритмы и методы стеганографии? Я имею в виду стеганографию, примененную к изображениям.

Я уже давно написал для этого библиотеку, чтобы описать процесс.

В основном, если у вас есть формат файла, скажем, 24-битный формат BMP. Для начала вам нужен способ чтения и записи пикселей в этот формат файла. Либо вы можете использовать библиотеку, либо написать свою собственную, когда вы узнали, что это за формат файла.

Изображение можно рассматривать как серию пикселей. Рассмотрим изображение 4x4 пикселей:

х х х х
х х х х
х х х х
х х х х

Число этих пикселей от 1 до 16:

01 02 03 04
05 06 07 08
09 10 11 12
13 14 15 16

Каждый пиксель, который пронумерован выше, имеет красный компонент, зеленый компонент и синий компонент. Каждый из этих компонентов составляет 1 байт каждый, поэтому каждый компонент можно рассматривать как значение от 0 до 255. (24 бита = 8 бит для красного, 8 бит для зеленого, 8 бит для синего). Таким образом, каждое из приведенных выше чисел имеет 3 набора значений от 0 до 255.

Таким образом, в приведенном выше примере с изображением 4x4 у вас есть 16 пикселей * 3color_components = 48 байт данных в вашем изображении. Как правило, для кодирования изображения используется только младший значащий бит каждого цветового компонента. В этом случае у вас будет 48 битовых бит данных, доступных вам = 6 байтов, доступных для кодирования любого 6-байтового сообщения, которое вы хотите.

Чтобы сделать это проще, давайте просто рассмотрим кодирование простого 3-битного сообщения в один пиксель. И давайте предположим, что мы используем только 1 бит на компонент цвета. Допустим, мы хотим закодировать 3-битное сообщение: 111

Ниже приведен пример значения пикселя 1 , указанного выше, до кодирования данных:

R: 10101011
G: 11111010
B: 00011010

Что вы делаете, это изменяете только младший бит на новые данные:

R: 1010101 1
G: 1111101 1
B: 0001101 1

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

Если вы хотите закодировать более 3 бит данных в один пиксель, вы также можете сделать это. Что происходит, так это то, что вы будете кодировать больше, чем просто младший значащий бит, вы можете использовать как минимум 2 значащих бита или как минимум 3 и т. Д. Чем больше битов вы используете, тем больше вы заметите разницу Качество изображения. Вы можете использовать до 7 бит, и ваше изображение все равно будет выглядеть узнаваемым.

Обычно у вас будет более 3 бит данных, которые вы хотите закодировать. Чем больше данных вы хотите закодировать, тем больше у вас будет пикселей или больше битов на пиксель для кодирования данных. Допустим, у вас есть 9 бит данных, которые вы хотите кодировать, хорошо, если вы используете только младший значащий бит, тогда вам нужно 3 пикселя для кодирования этой информации. Если вы хотите использовать только 1 пиксель, вы можете сделать это, используя 3 младших бита на компонент цвета для кодирования этих данных.

Чтобы выполнить этот тип работы, вам, вероятно, понадобится создать некоторые функции для простой работы с битами данных, которые абстрагируют от сложности постоянной работы с побитовыми операторами.

Техника будет отличаться для разных форматов файлов, но концепция одна и та же. Стеганография может также относиться только к сокрытию данных, например, даже в блоке расширения GIF. Обычно вы скрываете его, изменяя пиксели изображения, или в некоторых форматах файлов таблица соответствия цветов.

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

Вам действительно нужно иметь представление о форматах файлов, чтобы выполнять эту работу.Или, по крайней мере, использовать библиотеку, которая может управлять форматом файла и данными файла для вас.Если вы действительно заинтересованы в этой теме, я предлагаю начать с простого формата файла, такого как BMP, и изучить его.Вы всегда можете найти спецификации формата файлов на таких сайтах, как www.wotsit.org .

Как программа распознает зашифрованное сообщение на изображении без исходного изображения?

Вы правы.Программа, которая декодирует информацию, не нуждается в исходном изображении.Как это работает, так это то, что это просто делает наоборот, программе нужно будет знать, сколько битов данных вы кодировали, используя и использовать то же самое для декодирования.Он будет просто перебирать каждый пиксель, объединять биты в байты и записывать эти байты в файл.

4 голосов
/ 11 июня 2010

Изменение младших значащих бит растровых пикселей.

Хороший обзор см. На этой странице

2 голосов
/ 11 июня 2010

Существуют буквально бесконечные способы скрыть информацию в изображениях.

Один простой способ - заметить, что изменение младшего значащего бита каждого значения RGB не имеет заметного различия, поэтому установка наименее значимогобит каждого байта в изображении дает нам (#-bits-in-image / 8) бит для хранения скрытых данных.

...