Стеганогра́фия (от греч. στεγανός — скрытый + γράφω — пишу; буквально «тайнопись») — это наука о скрытой передаче информации путём сохранения в тайне самого факта передачи. Этот термин ввел в 1499 году Иоганн Тритемий в своем трактате «Стеганография» (Steganographia), зашифрованном под магическую книгу.
В отличие от криптографии, которая скрывает содержимое секретного сообщения, стеганография скрывает сам факт его существования. Как правило, сообщение будет выглядеть как что-либо иное, например, как изображение, статья, список покупок, письмо или судоку. Стеганографию обычно используют совместно с методами криптографии, таким образом, дополняя её.
Преимущество стеганографии над чистой криптографией состоит в том, что сообщения не привлекают к себе внимания. Сообщения, факт шифрования которых не скрыт, вызывают подозрение и могут быть сами по себе уличающими в тех странах, в которых запрещена криптография.[1] Таким образом, криптография защищает содержание сообщения, а стеганография защищает сам факт наличия каких-либо скрытых посланий — Wikipedia.
Steghide
Steghide — это утилита командной строки (как и подавляющее большинство в Linux ^_^) которая позволяет спрятать информацию внутри аудио или фото файлов. Она так же умеет сжимать и шифровать информацию которую прячут.
С установкой все понятно:
1 |
sudo apt-get install steghide |
Начальный размер файла:
1 |
-rw-rw-r-- 1 booch booch 159K Feb 4 11:25 kote_original.jpg |
Первый пример. Прячeм текстовый файл внутрь изображения:
1 2 3 4 |
steghide embed -cf kote.jpg -ef secrettext.txt Enter passphrase: Re-Enter passphrase: embedding "secrettext.txt" in "kote.jpg"... done |
Размер файла после того, как спрятали там инфу:
1 |
-rw-rw-r-- 1 booch booch 161K Feb 4 11:01 kote.jpg |
Поддерживаемые расширения: AU, BMP, JPEG, WAV
Извлечь наш текстовый файлик обратно можно так:
1 2 3 |
steghide extract -sf kote.jpg Enter passphrase: wrote extracted data to "secrettext.txt". |
Получить информацию о том, каков размер спрятанного текста внутри картинки, какое использовалось шифрование, можно так:
1 2 3 4 5 6 7 8 9 10 11 |
steghide info kote.jpg "kote.jpg": format: jpeg capacity: 8.7 KB Try to get information about embedded data ? (y/n) y Enter passphrase: embedded file "secrettext.txt": size: 668.0 Byte encrypted: rijndael-128, cbc compressed: yes |
Сама утилита поддерживает кучу алгоритмов шифрования:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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 |
В принципе это все. Немного более подробная информация имеется на официальной странице.
OutGuess
OutGuess – утилита еще более умная и хитрая =) Она умеет находить и извлекать избыточные биты из изображения, после чего подменять их на полезные биты с информацией которую вы пытаетесь скрыть. Это усложняет сам факт обнаруженя «левой» информации внутри файла, неговоря уже о ее рашифровке и извлечении.
Установка:
1 |
sudo apt-get install outguess |
Например встроить текст можно так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
outguess -d secrettext.txt kote.jpg kote_with_info.jpg Reading kote.jpg.... JPEG compression quality set to 75 Extracting usable bits: 139430 bits Correctable message size: -7731 bits, 13230110958157824.00% Encoded 'secrettext.txt': 5344 bits, 668 bytes Finding best embedding... 0: 2696(50.1%)[50.4%], bias 3007(1.12), saved: -3, total: 1.93% 1: 2659(49.5%)[49.8%], bias 2887(1.09), saved: 1, total: 1.91% 3: 2685(49.9%)[50.2%], bias 2857(1.06), saved: -1, total: 1.93% 4: 2658(49.4%)[49.7%], bias 2883(1.08), saved: 1, total: 1.91% 5: 2637(49.1%)[49.3%], bias 2880(1.09), saved: 4, total: 1.89% 7: 2654(49.4%)[49.7%], bias 2800(1.06), saved: 2, total: 1.90% 12: 2610(48.5%)[48.8%], bias 2776(1.06), saved: 7, total: 1.87% 231: 2596(48.3%)[48.6%], bias 2773(1.07), saved: 9, total: 1.86% 231, 5369: Embedding data: 5344 in 139430 Bits embedded: 5376, changed: 2596(48.3%)[48.6%], bias: 2773, tot: 139230, skip: 133854 Foiling statistics: corrections: 1846, failed: 19, offset: 54.856988 +- 148.271820 Total bits changed: 5369 (change 2596 + bias 2773) Storing bitmap into data... Writing kote_with_info.jpg.... |
Как бы это не было странно, но оригинал в размере получается больше, чем фото с текстовым контейнером внутри:
1 2 |
-rw-rw-r-- 1 booch booch 159K Feb 4 11:38 kote.jpg -rw-rw-r-- 1 booch booch 127K Feb 4 11:38 kote_with_info.jpg |
К контейнеру можно добавить секретный ключ (типа пароль, скрытая фраза):
1 |
outguess -k 'secret message' -d secret.txt kote.jpg kote_output.jpg |
В дальнейшем, извлечь инфу из файла, без этого ключа, будет невозможно. Если вы знаете ключ, тогда все просто:
1 |
outguess -k "my secret key" -r kote_output.jpg secret.txt |
Чуть больше инфы:
1 |
man outguess
|
UPD: Именно эту программу использовали Cicada 3301 для шифрования своих сообщений внутри картинки, которую они потом вешали на 4сhan или Reddit. Подробнее о них можно прочитать в Вики посвященной разгадке тайны Cicada 3301.
Steg
Steg – это кросс-платформенная утилита, написанная на С++. Созданная для стенографии и криптографии информации и имеет дружественный GUI интерфейс. Одинаково хорошо работает на Windows и на Linux. Может прятать инфу в JPEG (JPG), TIFF, PNG, BMP.
Скачать для Linux:
1 |
wget https://googledrive.com/host/0B-_yxJMDtRxyRDNGNk1YcXR0UTg/steg-v1.0.0.2-linux32.tgz |
Страница загрузки тут.
Извлекаем и запускаем:
1 2 3 |
tar xvf steg-v1.0.0.2-linux32.tgz cd steg-v1.0.0.2-linux32/ ./steg.sh |
Интерфейс прост и понятен.
Ну и конечно фотография, содержащая послание внутри.