Шифрование в Linux: Стеганография

Задача: требуется скрыть сам факт передачи важных данных по открытым каналам связи.
Решение: несколько стеганографических утилит, доступных по лицензии 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')

ans =

0.0032
Да, ну разумеется, такую разницу в изображении мы не увидим, даже если будем пристально вглядываться: всего отличие всего лишь на 0.32%! Отличия между изображениями можно увидеть, не сильно напрягаясь, где-то при 3-5%.
Ну и разумеется, что контрольная сумма файла изменилась:
$ 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

22 комментариев: |высказаться!| RSS-лента дискуссии.|
Анонимный комментирует...

Интересненько! Дедушка Ленин был бы рад, а то все молоком да на полях...
Надо будет поэкспериментировать с размерами исходных jpg и txt на предмет сколько текста можно впихнуть в картинку. И что будет если jpg с текстом пересохранить, например, gimp'ом?

virens комментирует...

2 Анонимный пишет...
Надо будет поэкспериментировать с размерами исходных jpg и txt на предмет сколько текста можно впихнуть в картинку.
По идее, чем больше впихнуть в картинку текста, тем заметнее отличие. Но я больше не пробовал...

И что будет если jpg с текстом пересохранить, например, gimp'ом?
Если в ней ничего не менять - по идее, ничего и не произойдёт. Но если сохранить с другим типом сжатия - должно перестать восстанавливаться. Спасибо за идею - надо будет попробовать.

Dormestmass комментирует...

И что будет если jpg с текстом пересохранить, например, gimp'ом?

IMHO, при каждом сохранении jpg-а происходит пересчет, так что скорее всего данные будут потеряны.

Анонимный комментирует...

а как же ключи шифрования?

и вообще-то, логично было бы указать исходные размеры файлов (графического и текстового) и конечного!
poooch

Юрий комментирует...

Статья как всегда интересная. Потешу свою паранойю :)

Unknown комментирует...

Очень интересно, спасибо. А если встраивать сообщение в звуковой файл?

Nikolay комментирует...

Тут спрашивали про изменение размера файлов. Вот пример:

-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.

Pento комментирует...

Простейшую тулзу писал в универе...текст запихивала в обычный HTML =)
И текста не было видно даже в исходнике - всё дело в волшебных пробелах =)

LeniVetc комментирует...

Кстати не думал об этом. Вернее пару раз мелькала мысль посмотреть, как это работает, но какая-то она вялая была ;)
А ведь я админ. И именно почтовый :)
Все, спасибки за наводку. После мелкософтового семинара поковыряю :)
...
Стоп. Не, не поковыряю. После отпуска поковыряю ;)

virens комментирует...

2 Дмитрий пишет...
А если встраивать сообщение в звуковой файл?
Можно, только не этой программой :-) Но вообще такие системы есть.

2 Nikolay пишет...
Да, ни одно внедрение не было обнаружено программой stegdetect.
Обнаруживается, только stegdetect нужно поставить дополнительный параметр --с-пристрастием :-))
О наличии стеганограммы оно сообщит - жаль, выудить не может. Почтовым админам, отписывавшимся в комментариях, на заметку ;-)


2 pento пишет...
Простейшую тулзу писал в универе...текст запихивала в обычный HTML
Есть тулзы и покруче - одна из них есть в Дебиане и называется snowdrop. Принцип, насколько я могу понять, тот же. Только с кириллицей не дружит.

Спасибо за отзывы. Планируются ещё несколько постов по сокрытию данных. И про криптографию, конечно, тоже.

Сейчас переполз на Этч и посты будут уже в духе современного состояния софта. Старые посты тоже буду править - вот только жара немного спадёт...

Nikolay комментирует...

Это что ещё за опция? Я безуспешно пробовал -t o использовать для стеганограммы от outguess, например.

Анонимный комментирует...

ЗА всю стеганографию не скажу, но по поводу большого количества реализаций недавно было серьезное исследование, в результате которого была выработана четкая методика выявления картинок с текстом.

Анонимный комментирует...

некоторые картинки можно распаковывать RARом... и получать различные файлы

Анонимный комментирует...

Если отправлять фото с цифрового фотоаппарата, то лучше всего, чтобы размер фото остался исходным, т.к. фотоаппараты клепают фото одинакового размера. Или я не прав?

Анонимный комментирует...

В который раз убеждаюсь - насколько хорош Дебиан. Спасибо за статью. Очень интересно.
Да, так вот и знакомимся с софтом, который есть в этом дистре: то в журнале вычитаешь про интересную прогу, то в Инете че-нить найдешь... глядь, а это есть в твоем репозитории. Класс!
Непонятно, тока как могут лоровцы говорить, мол "эта статья - Дешёвая пропаганда Debian'а?" и тому подобное.. :)
Сорри за оффт.

virens комментирует...

Кошмар, на ЛОР протащили... За что!? :-)


2 Nikolay пишет...
Это что ещё за опция? Я безуспешно пробовал -t o использовать для стеганограммы от outguess, например.
Оно стеганограмму определяет, но не может её выудить. Жаль. Надо этчевскую версию поставить и поглядеть.

2 GQ пишет...
ЗА всю стеганографию не скажу, но по поводу большого количества реализаций недавно было серьезное исследование, в результате которого была выработана четкая методика выявления картинок с текстом.
Любопытно. Вот бы ссылочку кинуть. :-)


2 Анонимный пишет...
В который раз убеждаюсь - насколько хорош Дебиан.
Он не хорош, он "просто работает".

Да, так вот и знакомимся с софтом, который есть в этом дистре: то в журнале вычитаешь про интересную прогу, то в Инете че-нить найдешь... глядь, а это есть в твоем репозитории. Класс!
Именно. Я вот когда прочитал, кто написал foremost - чуть в обморок не упал.

Непонятно, тока как могут лоровцы говорить, мол "эта статья - Дешёвая пропаганда Debian'а?"
Ананимусы на ЛОРе зажигают как всегда. Только сегодня узнал с утра - подумал, что ещё сплю. Оказалось хуже :-)

none комментирует...

А результат? хочется увидеть насколько картинка модифицируется, или боитесь за потерю персональных данных? :)

virens комментирует...

2 axet пишет...
А результат?
Точно такая же картинка на вид. Я ж писал про среднеквадратическое отклонение - ничем его не разглядеть.

боитесь за потерю персональных данных? :)
Именно: у ЛОРовских криптоаналитиков длинные руки :-)

IzoGraph комментирует...

Да надо заливать текст в картинки BMP - там попиксильная информация, а значит, если к примеру, менять один-два бита (лучше младшие) в каждом пикселе (его цвете), то тут никакя прога не вычислит наличие стенограммы - кто его знает, мож исходный файл в фотошопе на цвет подкорректировали.. и визуально такое изменение не определишь, а потом его можно сжать просто заархивировав, размер получится почти как у jpg'а при хорошеим сжатии.

Анонимный комментирует...

Ногами не пинать плизик :)
А что есть брать rnd-rbg картинку (каждый пиксель случаен) и налеплять на нее данные в base64?

p.s. в свое время почти так со старой работы вынес (правда на ~5 листках по 3 копии) вынес смарт-ключ от их системы но там уже известная картинка (ну блин... просто мне его не давали домой а туда надобыло часто бегать работать)

Unknown комментирует...

Интересная мысль про потерю данных при сжатии картинки. Можно все исходящие пикчерсы, прикрепленные к письмам, пережимать... Как один из методов борьбы :)

Unknown комментирует...

У меня после внедрения сообщения в файл размер стего-файла оказался меньше исходного. Интересный эффект. Думаю это результат слишком короткого сообщения (всего одна строка).

Отправить комментарий

Подписаться на RSS-ленту комментариев к этому посту.