Кратко о предметной области.
Чтобы увидеть спрятанный текст проделаем обратную операцию:
Оригинал:
А вот тут спрятана аватарка:
Всё тайное рано или поздно становится явным!
Кстати, помимо сравнения размеров и md5sum для оригинального изображения и изображения со стеганограммой, интересно сравнить их ещё и визуально:
У вас до сих пор не было паранойи?! Тогда мы идём к вам!!!
Стеганография - в переводе с греческого дословно означает «тайнопись». Это наука о скрытой передаче информации путём сохранения в тайне самого факта передачи. В отличие от криптографии, которая скрывает содержимое секретного сообщения, стеганография скрывает само его существование.Для достижения преследуемых в этой заметке целей в Debian GNU/Linux есть замечательный пакет - steghide:
A steganography hiding toolустановим его:
Steghide is steganography program which hides bits of a data file in some of the least significant bits of another file in such a way that the existence of the data file is not visible and cannot be proven.
Steghide is designed to be portable and configurable and features hiding data in bmp, wav and au files, blowfish encryption, MD5 hashing of passphrases to blowfish keys, and pseudo-random distribution of hidden bits in the container data.
Теперь можем попробовать спрятать любой текст в изображении. Спрячем текст взяв его со стандартного ввода:$ aptitude install steghide
"Текст спрятанного сообщения" будет имплементирован в файл image.jpg поэтому если оригинал изображения дорог вам как память то предварительно создайте его копию.$ echo "Текст спрятанного сообщения" | steghide embed -cf image.jpg -p passw0rd -ef -
Чтобы увидеть спрятанный текст проделаем обратную операцию:
Ничего сложного! Можно посмотреть информацию о спрятанных данных:$ steghide extract -sf image.jpg -p passw0rd -xf -
А также получить список всех поддерживаемых алгоритмах шифрования, которые можно использовать совместно с опцией -e (--encryption):$ steghide info image.jpg "image.jpg":format: jpeg capacity: 4,9 KB Try to get information about embedded data ? (y/n) y Enter passphrase: embedded data: size: 53,0 Byte encrypted: rijndael-128, cbc compressed: yes
Спрятанный текст можно брать не только из стандартного ввода, но и из заранее подготовленного файла:$ steghide encinfo encryption algorithms: <algorithm>: <supported modes>... cast-128: cbc cfb ctr ecb ncfb nofb ofb gost: cbc cfb ctr ecb ncfb nofb ofb rijndael-128: cbc cfb ctr ecb ncfb nofb ofb twofish: cbc cfb ctr ecb ncfb nofb ofb arcfour: stream cast-256: cbc cfb ctr ecb ncfb nofb ofb loki97: cbc cfb ctr ecb ncfb nofb ofb rijndael-192: cbc cfb ctr ecb ncfb nofb ofb saferplus: cbc cfb ctr ecb ncfb nofb ofb wake: stream des: cbc cfb ctr ecb ncfb nofb ofb rijndael-256: cbc cfb ctr ecb ncfb nofb ofb serpent: cbc cfb ctr ecb ncfb nofb ofb xtea: cbc cfb ctr ecb ncfb nofb ofb blowfish: cbc cfb ctr ecb ncfb nofb ofb enigma: stream rc2: cbc cfb ctr ecb ncfb nofb ofb tripledes: cbc cfb ctr ecb ncfb nofb ofb
Равно как и восстанавливать его из картинки:$ steghide embed -cf image.jpg -p passw0rd -ef secretfile.txt
Кстати, интересный момент, можно прятать не только текст, но и изображение в изображении, главное чтобы размер того в чём прячем изначально был больше того, что прячем (не знаю на сколько - не проверял), а иначе рискуем получить ошибку следующего вида:$ steghide extract -cf image.jpg -p passw0rd -ef secretfile.txt
Для примера "спрячем" мой аватар в другой красивой картинке:steghide: the cover file is too short to embed the data.
Оригинал от полученного изображения по размеру не сильно отличается, равно как и по качеству:$ steghide embed -cf image.jpg -p passw0rd -ef gremlin-gizmo.jpg
Аватарка:$ ls -l image.* -rw-r--r-- 1 olden olden 260660 Май 31 15:55 image.jpg -rw-r--r-- 1 olden olden 250538 Май 31 15:55 image.orig.jpg $ md5sum image.* 5c3dfbd17d4e8bfbe15006e2282e17c2 image.jpg b2d51cdf620b9180daebb5a2dad4a186 image.orig.jpg
Оригинал:
А вот тут спрятана аватарка:
Всё тайное рано или поздно становится явным!
Сравним результаты:$ steghide extract -sf image.jpg -p passw0rd -xf avatar.jpg
и визуально:$ md5sum gremlin-gizmo.jpg avatar.jpg 4c9106a839c2e0c6d7e4ccd8b095ff6e gremlin-gizmo.jpg 4c9106a839c2e0c6d7e4ccd8b095ff6e avatar.jpg
Кстати, помимо сравнения размеров и md5sum для оригинального изображения и изображения со стеганограммой, интересно сравнить их ещё и визуально:
Прелюбопытнейший результат. А с первого взгляда на изображения и не скажешь, что в них столько различий.$ compare -verbose image.orig.jpg image.jpg diff.png
У вас до сих пор не было паранойи?! Тогда мы идём к вам!!!