Имиджевая стеганография

Я работаю над приложением стеганографии. Мне нужно спрятать сообщение внутри файла изображения и защитить его паролем, без большой разницы в размере файла. Я использую алгоритм наименьшего значимого бита и могу успешно сделать это с файлами BMP, но он не работает с файлами JPEG, PNG или TIFF. Этот алгоритм работает с этими файлами вообще? Есть ли лучший способ добиться этого? Благодарю.

4 ответа

Решение

Это сильно зависит от того, как работает конкретный формат изображения. Вам нужно погрузиться во внутренности того формата, который вы хотите использовать.

Для JPEG вы можете поиграть с последними битами коэффициентов DCT для каждого блока.

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

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

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

Подход наименьшего значимого бита не работает с изображениями JPEG и GIF, поскольку вы используете данные пикселей (необработанное изображение) для хранения скрытой информации перед сжатием. Пиксель p с данными 0x123456, вероятно, не будет иметь этого значения после сжатия, поскольку его значение зависит от степени сжатия и соседних пикселей. В данном случае речь идет об алгоритмах, которые не только сжимают изображение (например, ZIP, который хранит содержимое), но и изменяют распределение цвета, текстуру и качество, чтобы уменьшить количество бит для его представления.

Тем не менее, PNG может использоваться только для сжатия изображения в том же смысле, что и ZIP-файл, сохраняя содержимое. Поэтому вы можете использовать наименьший значащий бит для изображений PNG, чтобы на странице стеганографии Википедии был показан пример в этом формате.

Пока формат изображения без потерь, вы можете использовать стеганографию LSB в пикселях (BMP, PNG, TIFF, PPM). Если это с потерями, вы должны попробовать что-то еще, так как сжатие и последующая распаковка вызывают небольшие изменения в пикселях, и сообщение исчезает. В формате GIF вы можете встроить свое сообщение в палитру. В JPEG вы изменяете коэффициенты DCT, низкоуровневое частотное представление изображения, которое можно считывать и сохранять в виде файла JPEG без потерь.

Существует обширное исследование стеганографии в формате JPEG. Для ознакомления я лично рекомендую «Стеганографию в цифровых медиа: принципы, алгоритмы и приложения» Джессики Фридрих — обязательный к прочтению материал для серьезных попыток стеганографии. Там подробно обсуждаются подходы для различных форматов изображений.

Кроме того, LSB неэффективен и его очень легко обнаружить, вы не должны его использовать. Есть алгоритмы получше, но они обычно тяжелые и сложные по математике. Ищите «стеганографические искажения» и «стеганографические коды».

Другие вопросы по тегам