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

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

Стеганография значительно моложе, годом ее рождения принято считать 1499-й. В отличие от криптографии, которая скрывает содержание передаваемой информации, стеганография скрывает факт самой передачи информации. Чаще всего стеганография используется в тандеме с криптографией и скрывает зашифрованные данные. Это особенно полезно в странах, где шифрование вне закона.

Современный цифровой мир предоставляет собой кладезь для стеганографии с использованием мультимедиа-файлов. В этой записи будут рассмотрены некоторые методы и утилиты для использования стеганографии в Linux.

В качестве исходных изображений будут выступать три цифровые фотографии, которые я привез в прошлом году из отпуска :) Вот они:

mg_01 img_02 img_03

Скрывать в этих файлах будем 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

А теперь, собственно, фотография со стеганографией.
img_01_emb

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

Фотография с бонусом:
img_02_emb

Steg

Третья утилита о которой сегодня зайдет речь значительно моложе двух предыдущих и менее широко представлена в стандартных репозитариях, зато имеет графический интерфейс. Steg — кроссплатформенная утилита для Linux, Windows и Mac OS. Графический интерфейс реализован на QT. Поддерживается работа с изображениями в форматах JPEG, TIFF, PNG и BMP. Скачать архив с версией Steg для своей платформы и архитектуры вы можете на странице загрузок проекта.

Внешний вид программы:
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

Фотография с бонусом:
img_03_emb