Криптография вот уже около четырех тысяч лет помогает людям защищать информацию от тех, для кого она не предназначена. Делает она это посредством шифрования, т.е. потенциально информация доступна, но для ее прочтения необходимо знать секретный шифр или ключ.
Стеганография значительно моложе, годом ее рождения принято считать 1499-й. В отличие от криптографии, которая скрывает содержание передаваемой информации, стеганография скрывает факт самой передачи информации. Чаще всего стеганография используется в тандеме с криптографией и скрывает зашифрованные данные. Это особенно полезно в странах, где шифрование вне закона.
Современный цифровой мир предоставляет собой кладезь для стеганографии с использованием мультимедиа-файлов. В этой записи будут рассмотрены некоторые методы и утилиты для использования стеганографии в Linux.
В качестве исходных изображений будут выступать три цифровые фотографии, которые я привез в прошлом году из отпуска :) Вот они:
Скрывать в этих файлах будем secret.txt
ll secret.txt -rw-r----- 1 rascal rascal 656 Apr 14 16:42 secret.txt
Steghide
Первой рассмотрим утилиту steghide, она предназначена для работы с графическими и аудио файлами. Поддерживаются форматы .jpeg, .bmp, .wav, и .au. Так же steghide поддерживает сжатие и шифрование внедряемых данных.
Несмотря на то, что последний релиз steghide состоялся в далеком 2003 года, вы без труда найдете эту утилиту почти в любом дистрибутиве Linux. Например, в Debian/Ubuntu пакет доступен из стандартного репозитория:
sudo apt-get install steghide
Пример использования:
steghide embed -ef secret.txt -cf img_01.jpg -sf img_01_emb.jpg Enter passphrase: Re-Enter passphrase: embedding "secret.txt" in "img_01.jpg"... done writing stego file "img_01_emb.jpg"... done
Что получилось:
ll img_01* -rw-r--r-- 1 rascal rascal 363392 Апр 14 16:47 img_01_emb.jpg -rw-r--r-- 1 rascal rascal 365537 Апр 14 11:17 img_01.jpg steghide info img_01_emb.jpg "img_01_emb.jpg": format: jpeg capacity: 22,3 KB Try to get information about embedded data ? (y/n) y Enter passphrase: embedded file "secret.txt": size: 656,0 Byte encrypted: rijndael-128, cbc compressed: yes
Когда потребуется извлечь файл:
steghide extract -sf img_01_emb.jpg
А теперь, собственно, фотография со стеганографией.
Outguess
Вторым сегодня рассмотрим набор утилит проекта Outguess. Данный набор утилит поддерживает работу только с форматами PNM и JPEG. Последний релиз состоялся в 2004 году, но пакет outguess так же присутствует почти во всех современных дистрибутивах. В Debian/Ubuntu, например, для установки достаточно выполнить:
sudo apt-get install outguess
Пример использования:
outguess -k "password" -d secret.txt img_02.jpg img_02_emb.jpg Reading img_02.jpg.... JPEG compression quality set to 75 Extracting usable bits: 59917 bits Correctable message size: 24465 bits, 40.83% Encoded 'secret.txt': 5248 bits, 656 bytes Finding best embedding... 0: 2633(49.9%)[50.2%], bias 2786(1.06), saved: -1, total: 4.39% 2: 2631(49.8%)[50.1%], bias 2782(1.06), saved: 0, total: 4.39% 4: 2628(49.8%)[50.1%], bias 2779(1.06), saved: 0, total: 4.39% 8: 2563(48.5%)[48.8%], bias 2696(1.05), saved: 7, total: 4.28% 16: 2546(48.2%)[48.5%], bias 2712(1.07), saved: 9, total: 4.25% 108: 2587(49.0%)[49.3%], bias 2655(1.03), saved: 4, total: 4.32% 108, 5242: Embedding data: 5248 in 59917 Bits embedded: 5280, changed: 2587(49.0%)[49.3%], bias: 2655, tot: 59821, skip: 54541 Foiling statistics: corrections: 1132, failed: 1, offset: 75.305000 +- 184.523101 Total bits changed: 5242 (change 2587 + bias 2655) Storing bitmap into data... Writing img_02_emb.jpg....
Что получилось:
ll img_02* -rw-r--r-- 1 rascal rascal 56800 Апр 14 17:04 img_02_emb.jpg -rw-r--r-- 1 rascal rascal 113007 Апр 14 11:15 img_02.jpg
Когда потребуется извлечь файл:
outguess -k "password" -r img_02_emb.jpg secret.txt Reading img_02_emb.jpg.... Extracting usable bits: 59917 bits Steg retrieve: seed: 108, len: 656
Steg
Третья утилита о которой сегодня зайдет речь значительно моложе двух предыдущих и менее широко представлена в стандартных репозитариях, зато имеет графический интерфейс. Steg — кроссплатформенная утилита для Linux, Windows и Mac OS. Графический интерфейс реализован на QT. Поддерживается работа с изображениями в форматах JPEG, TIFF, PNG и BMP. Скачать архив с версией Steg для своей платформы и архитектуры вы можете на странице загрузок проекта.
Что получилось:
ll img_03* -rw-r--r-- 1 rascal rascal 56714 Апр 14 17:18 img_03_emb.jpg -rw-r--r-- 1 rascal rascal 55878 Апр 14 11:45 img_03.jpg