Главная » Хабрахабр » Стойкое шифрование данных в PNG

Стойкое шифрование данных в PNG

Доброго утра Хабру. Читал вчера статью о хэш-стеганографии через социальные сети, и пришла мне в голову мысль сделать что-то более оптимальное в плане объёма выходных данных. Получилось что-то более-менее работоспособное и даже оптимизированное (в отличие от proof-of-conceptromabibi), поэтому, как и обещал, пишу статью.

Что ж, поздороваюсь с вами ещё раз: , и добро пожаловать под кат.
Я решил реализовать идею максимально по-тупому просто, поэтому алгоритм шифрования опишу кратко:

  1. Подгонка ключа под длину, кратную 16 (для шифрования AES)
  2. Сжатие исходных данных, используя zlib
  3. Подгонка под кратную 16 длину и шифрование сжатых данных
  4. Повторное сжатие зашифрованных данных
  5. Вычисление MD5-хэша из ключа шифрования для сравнения при дешифрации
  6. Нахождение минимального количества '\0', не встречающихся подряд в тексте, для использования в качестве разделителя данных и белого (буквально) шума
  7. Подготовка grayscale-изображения и заполнение его рандомными данными
  8. Запись строки (длина_данных + длина_MD5_ключа + MD5_ключа + данные) поверх шума

Строка (в виде байтов) записывается квадратом в левый верхний угол изображения, сливаясь с белым шумом. В итоге получается что-то вроде какой-нибудь текстуры — например, камня из игры Minecraft. Посудите сами:

Конечно, нетрудно понять, что это шифр, однако, не имея алгоритма, его не так уж и легко расшифровать (ведь нужен AES-ключ, да и формат с префиксами и двойным сжатием зареверсит далеко не каждый).


Ну, получили мы картинку. Что теперь с ней делать? Отправлять получателю, конечно. Правда, ему заранее должен быть известен ключ и алгоритм (или скрипт) дешифрации. И всё бы даже было хорошо, если бы не одно «но». И это «но» — сжатие.

Очевидно, что хранить оригиналы картинок соц. сетям не выгодно. ВК, например, даже конвертирует PNG в JPG, используя не самый маленький коэффициент сжатия. А, так как у нас используются конкретные значения байт (0-255), их потеря ни к чему хорошему не приведёт. Решение — отсылать полученные изображения как документы (файлы).


Я накатал развёрнутый скрипт в 101 строку с исключениями и отображением в stderr прогресса и времени работы. Его вы всегда можете найти в репозитории туть. Скорее всего, я его буду постепенно дорабатывать, хотя в последнее время проектов (в том числе и тянущих на хабрастатьи) у меня развелось достаточно.

Правда, думаю, эта статья (выросшая из комментария) себя исчерпала. Буду рад выслушать предложения других алгоритмов, и услужливо закодить их для вас, добавив в этот же скрипт.

Спасибо ещё раз romabibi за идею; adios.


x

Ещё Hi-Tech Интересное!

В Германии разработали требования к домашним маршрутизаторам

Продолжительное время в Интернете регулярно появляются статьи об уязвимости маршрутизаторов для SOHO сегмента. Я тоже публиковал статью как обнаружить, что Ваш Микротик взломан. Резкий рост участников нашего канала в Телеграм (@router_os) показал, что проблема крайне остра. Но проблема стоит глобальней. ...

[Перевод] Архитектуры нейросетей

Перевод Neural Network Architectures Давайте рассмотрим историю их развития за последние несколько лет. Алгоритмы глубоких нейросетей сегодня обрели большую популярность, которая во многом обеспечивается продуманностью архитектур. Если вас интересует более глубокий анализ, обратитесь к этой работе. Подробнее здесь. Сравнение популярных ...