/png-stegano

Simple script which saves any binary data into png file in filter metadata

Primary LanguagePython

Стеганография

Главный принцип стеганографии состоит в том, чтобы скрыть конфиденциальную информацию внутри открытой. Один тип информации (в нашем случае какой-либо текст) помещается внутрь другой информации (изображения PNG). Тем самым это позволяет передавать секретную информацию через открытые каналы, скрывая сам факт её передачи. Разница между пустым и заполненным контейнером (информация, которая таит в себе стегосообщение) не ощутима для органов восприятия человека.

Фильтры в PNG

В данном проекте использовалась одна из особенностей PNG файлов -- фильтрация строк (scanline filtering, или delta filters), благодаря которой PNG-упаковщик может получить гораздо более удобные данные для сжатия. Каждой строке сопоставляется один байт фильтра. Значение 1, например, означает, что вместо самих значений цветов в каждом пикселе хранится разница с предыдущим. Всего возможных значений: от 0 до 4. Более подробное описание работы фильтров можно найти здесь, с документацией можно ознакомиться здесь.

Идея проекта

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

Преимущества

  • Потери качества изображения - 0 %, поскольку мы просто перекодируем строку, не меняя ее содержимого (однако из-за менее эффективного сжатия размер картинки может немного вырасти)
  • Обнаружить информацию "на глаз" практически нереально, поскольку мы случайным образом выбираем порядок расположения битов информации (используя random.permute()), при этом "наши" фильтры теряются среди уже имеющихся фильтров изображения
  • Если два участника передачи владеют какой-то общей инофрмацией, то, переведя ее в сид псевдослучайного метода, можно использовать ее как ключ; то есть сообщение оказывается не только стеганографировано, но и зашифровано
  • Подобный метод раньше не использовался

Недостатки

  • Малый объем сохраняемой информации; мы переводим информацию в бинарный вид и используем, соответственно, занчения фильтров 0 и 1, то есть на данный момент максимально можно сохранить h бит информации, где h это высота картинки в пикселях; однако, если начать использовать значения от 0 до 3, максимальный объем вырастет в 2 раза

Файлы проекта

Название файла Содержание файла
gui_zero.py Простой GUI
png_stegano.py Несколько классов для разных методов стеганографии
filter_utils.py Вспомогательные функции для кодирования и декодирвания при помощи фильтров PNG
png_utils.py Вспомогательные функции для работы с чанками PNG

Примеры

eee7

eee1

eee5