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