Skip to content

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

Notifications You must be signed in to change notification settings

MrTsepa/png-stegano

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

Главный принцип стеганографии состоит в том, чтобы скрыть конфиденциальную информацию внутри открытой. Один тип информации (в нашем случае какой-либо текст) помещается внутрь другой информации (изображения 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

About

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

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages