Решение: несколько стеганографических утилит, доступных по лицензии 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
Интересненько! Дедушка Ленин был бы рад, а то все молоком да на полях...
ОтветитьУдалитьНадо будет поэкспериментировать с размерами исходных jpg и txt на предмет сколько текста можно впихнуть в картинку. И что будет если jpg с текстом пересохранить, например, gimp'ом?
2 Анонимный пишет...
ОтветитьУдалитьНадо будет поэкспериментировать с размерами исходных jpg и txt на предмет сколько текста можно впихнуть в картинку.
По идее, чем больше впихнуть в картинку текста, тем заметнее отличие. Но я больше не пробовал...
И что будет если jpg с текстом пересохранить, например, gimp'ом?
Если в ней ничего не менять - по идее, ничего и не произойдёт. Но если сохранить с другим типом сжатия - должно перестать восстанавливаться. Спасибо за идею - надо будет попробовать.
И что будет если jpg с текстом пересохранить, например, gimp'ом?
ОтветитьУдалитьIMHO, при каждом сохранении jpg-а происходит пересчет, так что скорее всего данные будут потеряны.
а как же ключи шифрования?
ОтветитьУдалитьи вообще-то, логично было бы указать исходные размеры файлов (графического и текстового) и конечного!
poooch
Статья как всегда интересная. Потешу свою паранойю :)
ОтветитьУдалитьОчень интересно, спасибо. А если встраивать сообщение в звуковой файл?
ОтветитьУдалитьТут спрашивали про изменение размера файлов. Вот пример:
ОтветитьУдалить-rw-r--r-- 1 nik nik 88K 2007-05-29 19:37 12hide.jpg
-r--r--r-- 1 nik nik 83K 2007-05-29 19:35 12.jpg
-rw-r--r-- 1 nik nik 59K 2007-05-29 19:39 12out.jpg
12.jpg оригинальный файл, файл 12hide.jpg содержащий послание от steghide подрос на 5 килобайт, а вот 12out.jpg, содержащий то же самое послание но внедренное при помощи outguess уменьшился в размере на 24 килобайта, то есть почти на треть.
Да, ни одно внедрение не было обнаружено программой stegdetect.
Простейшую тулзу писал в универе...текст запихивала в обычный HTML =)
ОтветитьУдалитьИ текста не было видно даже в исходнике - всё дело в волшебных пробелах =)
Кстати не думал об этом. Вернее пару раз мелькала мысль посмотреть, как это работает, но какая-то она вялая была ;)
ОтветитьУдалитьА ведь я админ. И именно почтовый :)
Все, спасибки за наводку. После мелкософтового семинара поковыряю :)
...
Стоп. Не, не поковыряю. После отпуска поковыряю ;)
2 Дмитрий пишет...
ОтветитьУдалитьА если встраивать сообщение в звуковой файл?
Можно, только не этой программой :-) Но вообще такие системы есть.
2 Nikolay пишет...
Да, ни одно внедрение не было обнаружено программой stegdetect.
Обнаруживается, только stegdetect нужно поставить дополнительный параметр --с-пристрастием :-))
О наличии стеганограммы оно сообщит - жаль, выудить не может. Почтовым админам, отписывавшимся в комментариях, на заметку ;-)
2 pento пишет...
Простейшую тулзу писал в универе...текст запихивала в обычный HTML
Есть тулзы и покруче - одна из них есть в Дебиане и называется snowdrop. Принцип, насколько я могу понять, тот же. Только с кириллицей не дружит.
Спасибо за отзывы. Планируются ещё несколько постов по сокрытию данных. И про криптографию, конечно, тоже.
Сейчас переполз на Этч и посты будут уже в духе современного состояния софта. Старые посты тоже буду править - вот только жара немного спадёт...
Это что ещё за опция? Я безуспешно пробовал -t o использовать для стеганограммы от outguess, например.
ОтветитьУдалитьЗА всю стеганографию не скажу, но по поводу большого количества реализаций недавно было серьезное исследование, в результате которого была выработана четкая методика выявления картинок с текстом.
ОтветитьУдалитьнекоторые картинки можно распаковывать RARом... и получать различные файлы
ОтветитьУдалитьЕсли отправлять фото с цифрового фотоаппарата, то лучше всего, чтобы размер фото остался исходным, т.к. фотоаппараты клепают фото одинакового размера. Или я не прав?
ОтветитьУдалитьВ который раз убеждаюсь - насколько хорош Дебиан. Спасибо за статью. Очень интересно.
ОтветитьУдалитьДа, так вот и знакомимся с софтом, который есть в этом дистре: то в журнале вычитаешь про интересную прогу, то в Инете че-нить найдешь... глядь, а это есть в твоем репозитории. Класс!
Непонятно, тока как могут лоровцы говорить, мол "эта статья - Дешёвая пропаганда Debian'а?" и тому подобное.. :)
Сорри за оффт.
Кошмар, на ЛОР протащили... За что!? :-)
ОтветитьУдалить2 Nikolay пишет...
Это что ещё за опция? Я безуспешно пробовал -t o использовать для стеганограммы от outguess, например.
Оно стеганограмму определяет, но не может её выудить. Жаль. Надо этчевскую версию поставить и поглядеть.
2 GQ пишет...
ЗА всю стеганографию не скажу, но по поводу большого количества реализаций недавно было серьезное исследование, в результате которого была выработана четкая методика выявления картинок с текстом.
Любопытно. Вот бы ссылочку кинуть. :-)
2 Анонимный пишет...
В который раз убеждаюсь - насколько хорош Дебиан.
Он не хорош, он "просто работает".
Да, так вот и знакомимся с софтом, который есть в этом дистре: то в журнале вычитаешь про интересную прогу, то в Инете че-нить найдешь... глядь, а это есть в твоем репозитории. Класс!
Именно. Я вот когда прочитал, кто написал foremost - чуть в обморок не упал.
Непонятно, тока как могут лоровцы говорить, мол "эта статья - Дешёвая пропаганда Debian'а?"
Ананимусы на ЛОРе зажигают как всегда. Только сегодня узнал с утра - подумал, что ещё сплю. Оказалось хуже :-)
А результат? хочется увидеть насколько картинка модифицируется, или боитесь за потерю персональных данных? :)
ОтветитьУдалить2 axet пишет...
ОтветитьУдалитьА результат?
Точно такая же картинка на вид. Я ж писал про среднеквадратическое отклонение - ничем его не разглядеть.
боитесь за потерю персональных данных? :)
Именно: у ЛОРовских криптоаналитиков длинные руки :-)
Да надо заливать текст в картинки BMP - там попиксильная информация, а значит, если к примеру, менять один-два бита (лучше младшие) в каждом пикселе (его цвете), то тут никакя прога не вычислит наличие стенограммы - кто его знает, мож исходный файл в фотошопе на цвет подкорректировали.. и визуально такое изменение не определишь, а потом его можно сжать просто заархивировав, размер получится почти как у jpg'а при хорошеим сжатии.
ОтветитьУдалитьНогами не пинать плизик :)
ОтветитьУдалитьА что есть брать rnd-rbg картинку (каждый пиксель случаен) и налеплять на нее данные в base64?
p.s. в свое время почти так со старой работы вынес (правда на ~5 листках по 3 копии) вынес смарт-ключ от их системы но там уже известная картинка (ну блин... просто мне его не давали домой а туда надобыло часто бегать работать)
Интересная мысль про потерю данных при сжатии картинки. Можно все исходящие пикчерсы, прикрепленные к письмам, пережимать... Как один из методов борьбы :)
ОтветитьУдалитьУ меня после внедрения сообщения в файл размер стего-файла оказался меньше исходного. Интересный эффект. Думаю это результат слишком короткого сообщения (всего одна строка).
ОтветитьУдалить