данные
22 коммент.
Решение: несколько стеганографических утилит, доступных по лицензии GNU GPL и имеющихся в Debian, помогут решить проблему.
Дистрибутив Дебиан - просто энциклопедия самых разнообразных и чрезвычайно полезных утилит манипулирования данными. А уж программ сокрытия данных в нём просто огромное количество. Вот одна из них - небольшая, но весьма навороченная утилита steghide для стеганографического внедрения данных в рисунки или звуковые файлы.
Стеганография - в переводе с греческого дословно означает «тайнопись». Это наука о скрытой передаче информации путём сохранения в тайне самого факта передачи. В отличие от криптографии, которая скрывает содержимое секретного сообщения, стеганография скрывает само его существование.
О программе steghide и пойдёт речь далее.
Установка и работа
Для того, чтобы поставить все стеганографические утилиты, что есть в Дебиан, мне потребовалось 4Мб и несколько секунд ожидания. При помощи друга всех дебианщиков, команды apt-get install, было установлено:
outguess - Universal Steganographic toolЧего с лихвой хватит для любых параноидально одержимых приватностью своих данных граждан.
stegdetect - Detect and extract steganography messages inside JPEG
steghide - A steganography hiding tool
snowdrop - plain text watermarking and watermark recovery
Сокрытие данных
Хотелось бы отметить чрезвычайно подробный и толковый мануал steghide - увлекательнейшее чтиво, где подробно расписываются параметры и рассказывается вкратце, как программа работает и какие алгоритмы использует.
Вдоволь насладившись чтением, приступаем к непосредственно скрыванию своих сокровенных данных в какой-нибудь безобидный рисунок. Например, такой:
Когда я оформлял трудовой контракт, меня попросили написать свою краткую автобиографию - чем не конфиденциальные данные? Файл сохранился, вот его и внедрю в картинку - благо это простой текст, форматирования нет.
Для этого нужно набрать команду:
$ steghide embed -ef autobio.txt -cf MacOS.jpg -sf MacOShide.jpgТо есть внедряем файл autobio.txt (ключ -ef, embed file) внутрь рисунка MacOS.jpg (ключ -cf, cover file), в результате чего имеем рисунок со внедрённым стего под названием MacOShide.jpg (ключ -sf, stego file). При этом прогамма спросит дважды пароль:
Enter passphrase:Всё готово, вот в этом рисунке весь мой жизненный путь за четверть века :-)
Re-Enter passphrase:
embedding "autobio.txt" in "MacOS.jpg"... done
writing stego file "MacOShide.jpg"... done
Для того, чтобы снова иметь возможность прочесть скрытый текст, извлекаем его оттуда:
$ steghide extract -sf MacOShide.jpg -xf autobio2.txtТо есть извлечь из стего-файла MacOShide.jpg скрытую информацию в файл autobio2.txt (ключ -xf, extract file). Утилита будет лаконична:
Enter passphrase:Готово, файл записан.
wrote extracted data to "autobio2.txt".
Небольшое исследование
Кто умеет читать маны, мог почерпнуть тоже, читая пример в коце man steghide. Но мне стало интересно, насколько изменился рисунок не визуально, а количественно. Для этого люди, занимающиеся обработкой изображений, традиционно применяют среднеквадратическое отклонение между двумя изображениями. Вооружившись исчерпывающий статьёй Финапа [1] и реализовав её в MATLAB, вычисляем разницу:
>> kmvRMSandnorm('MacOS.jpg', 'MacOShide.jpg')Да, ну разумеется, такую разницу в изображении мы не увидим, даже если будем пристально вглядываться: всего отличие всего лишь на 0.32%! Отличия между изображениями можно увидеть, не сильно напрягаясь, где-то при 3-5%.
ans =
0.0032
Ну и разумеется, что контрольная сумма файла изменилась:
$ md5sum MacOS.jpgТак что изменения, конечно, есть, но очень небольшие - на глаз не заметить, так что можно смело переправлять личную информацию по электронной почте, даже если её просматривает злобный админ.
da6d7d25d5560fb22eb9d2f6ca09417f MacOS.jpg
$ md5sum MacOShide.jpg
87a02d9714ed43f49d2aeb37c4e75d94 MacOShide.jpg
Литература
[1] Fienup, J. Invariant error metrics for image reconstruction, Applied Optics, 32, 1997, 36, 8352-57
[2] Стеганография. Прячем секреты Dru Lavigne