Перейти к содержимому. | Перейти к навигации

Персональные инструменты
Вход Регистрация
Вы здесь: Главная ЧИТАЛЬНЫЙ ЗАЛ Стеганография Стеганография. Прячем секреты
Навигация
 

Стеганография. Прячем секреты

Операции с документом
В этой статье, я представлю Вам науку стеганографию, используя для демонстрации два приложения из коллекции портов. Попутно, мы также обнаружим некоторые интересные характеристики алгоритмов сжатия.

Dru Lavigne, перевод Евгения Чайкина, aka StraNNick <strannick@sovsem.net.>

   Оригинал статьи находится по адресу - http://www.onlamp.com/lpt/a/4392

   Меня всегда увлекали алгоритмы. Сама их концепция. Немного математики
   - и можно сжать изображение, звук или видео. Или отследить куда именно
   запишуться файлы на винчестере. Или, может быть, смешать два файла
   так, чтобы только мой потенциальный адресат смог расшифровать их.
   Представьте, я даже не претендую на то, чтобы понимать какая
   математика стоит за этими алгоритмами. Но меня успокаивает, то что в
   этом мире есть люди которые понимают, и их действия помогают
   поддерживать компьютеры в рабочем состоянии.

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

   Итак, для начала,

Что же такое стеганография?

   Термин стеганография происходит от греческих слов обозначавших скрытую
   запись. Если, в детстве, Вы когда-либо писали невидимое сообщение
   лимонным соком (или молоком, как дедушка Ленин - прим. переводчика) и
   давали друзьям, чтобы они прогревали его около лампочки для того,
   чтобы наблюдать как чудесным образом появляется сообщение, Вы
   использовали стеганографию.

   При использовании стеганографии в компьютере, Вы прячете сообщение в
   другом файле. Такой файл называют "стего файл". Особенность
   компьютерной стеганографии в том, что надо выбрать файл способный
   скрыть сообщение. Изображения, звуковые, или видео файлы идеальны по
   нескольким причинам:

     * Эти типы файлов уже сжаты алгоритмом. Например, .jpeg, .mp3, .mp4,
       и .wav форматы - всё это примеры алгоритмов сжатия.
     * Эти файлы достаточно велики, что облегчает задачу, для нахождения
       участков способных скрыть какой-либо текст.
     * Эти файлы замечательно скрывают. То есть, некоторые люди прячут
       текстовое сообщение, которое должно быть скрыто в изображении или
       аудио клипе. Если стеганографическая утилита делает своею работу
       хорошо, пользователь не обратит внимания на различие в качество
       изображения или звука, даже если некоторые биты изменены для того,
       чтобы скрыть сообщение.


   Если Вы новичок в стеганографии, Вы можете найти интересные статьи на
   сайте Steganography and Digital Watermarking (http://www.jjtc.com/Steganography).

   Прежде, чем мы начнем построение порта, Вы должны понять, что можно
   зашифровать сообщение прежде, чем оно будет спрятано в файле. В
   зависимости от Вашего географического положения, Вы можете быть
   ограничены законодательством относительно силы криптопротоколов, или
   возможно шифрование вообще запрещено. Примеры Вы можете найти на сайте
   http://www.outguess.org/

   Порт outguess состоит из нескольких утилит, которые я продемонстрирую.
   Не все они связаны непосредственно со стеганографией, некоторые
   использованы, для манипуляции .jpeg изображениями. Вы можете найти
   больше информации об этих утилитах в http://JPEGclub.org

   Давайте построим порт:

        $ cd /usr/ports/security/outguess
        $ make install clean


   Существует неплохая документация на outguess и сопутствующие утилиты.
   Порт установит /usr/local/share/doc/README, а также страницы man для
   следующих утилит: outguess, cjpeg, djpeg, jpegtran, rdjpgcom, и
   wrjpgcom. Наконец, существует персональная страница проекта
   outguess project home page (http://www.outguess.org/).

   Поскольку набор приложений outguess первоначально создавался для
   работы с .jpeg образами, Вы можете найти ]JPEG FAQ  (http://www.faqs.org/faqs/jpeg-faq)
   и Compression FAQ (http://www.faqs.org/faqs/compression-faq),
   полезные для того, чтобы быстро начать работу.

   Я начну с rdjpgcom и wrjpgcom утилит. Знали ли Вы, что стандарт JPEG
   содержит COM, или блок комментариев, включаемый в .jpeg изображение?
   Когда я впервые узнал это, я просто умирал от любопытства, какие
   скрытые комментарии содержат файлы .jpeg на моём винчестере. К
   счастью, у меня было средство rdjpgcom, так что я мог прочитать
   комментарии моих JPG:

        $ cd ~/images
        $ rdjpgcom pic1.jpg
        $ rdjpgcom pic2.jpg


   Я был несколько разочарован, когда узнал, что большинство моих
   .jpeg-ов совсем не имели сообщения. Только в одном оно сообщало, что
   изображение было создано используя "VT-Compress (tm) Xing Technology
   Corp." а в другом, что это "Created with The GemMP". К счастью, я мог
   изменить эту ситуацию используя утилиту wrjpgcom, чтобы записывать
   свои собственные комментарии в JPG:

        $ wrjpgcom -comment "This picture was taken on my June 2003 canoeing trip" pic1.jpg > pic1a.jpg


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

        $ rdjpgcom pic1a.jpg
        Created with The GemMP
        This picture was taken on my June 2003 canoeing trip


   Интересно, что если я использую команду file, она выдаст исходный
   комментарий, созданный GemMP, а не тот, который добавил я.

   Если я хочу удалить предыдущий комментарий GemMP, мне нужно
   использовать ключ -replace вместо ключа -comment.

   Если я взгляну на изображения, например с помощью gimp, я не увижу
   между ними никакой разницы. Давайте поищем другие различия:

        $ ls -l pic1*
        -rw-r--r--  1 dlavigne6  wheel  6817 Nov 15 14:36 pic1.jpg
        -rw-r--r--  1 dlavigne6  wheel  6873 Nov 15 14:36 pic1a.jpg


   Что-ж, файл с комментариями несколько больше. А вот утилита file не
   показывает никакой разницы:

        $ file pic1* pic1.jpg: JPEG image data, JFemF standard 1.01,
        resolution (DPem), "Created with The GemMP", 72 x 72
        pic1a.jpg: JPEG image data, JFemF standard 1.01, resolution (DPem),
        "Created with The GemMP", 72 x 72


Прячем больше данных

   Давайте, продолжим развитие этой идеи и спрячем в .jpeg файле полный
   текстовый файл. Скажем, я хочу спрятать рецепт печенья с шоколадными
   крошками моей бабушки. Сейчас он находится в cookie.txt:

        $ ls -l cookie.txt
        -rw-r--r-- 1 dlavigne6
        wheel 296 Nov 15 14:56 cookie.txt


     У меня также есть фотография моей бабушки, которая и дала мне этот
   рецепт, когда она была много моложе:

        $ ls -l gramma.jpg
        -rw-r--r-- 1 dlavigne6 wheel 50873 Sep 5 09:13 gramma.jpg


   Давайте посмотрим, что случиться, если я спрячу рецепт в изображении:

        $ outguess -k "don't worry, the recipe is safe" -d
        cookie.txt gramma.jpg grandma.jpg


   Давайте взгянем на синтаксис. За ключом -k следует кодовая фраза,
   ограниченная двойными кавычками. Мне нужно запомнить её, если я хочу в
   будущем извлечь этот рецепт. Затем я использовал ключ -d, чтобы
   указать имя файла, который будет скрыт (cookie.txt), затем имя файла в
   котором мы будем скрывать (gramma.jpg), и имя нового стего файла
   (grandma.jpg). Когда я ввёл эту команду, я получил следующий вывод:

        Reading gramma.jpg.... JPEG compression quality set to 75
        Extracting usable bits: 55365 bits Correctable message size: 25855
        bits, 46.70% Encoded 'cookie.txt': 2368 bits, 296 bytes Finding best
        embedding... 0: 1219(50.8%)[51.5%], bias 1301(1.07), saved: -4,
        total: 2.20% 1: 1215(50.6%)[51.3%], bias 1235(1.02), saved: -3,
        total: 2.19% 5: 1192(49.7%)[50.3%], bias 1241(1.04), saved: -1,
        total: 2.15% 7: 1164(48.5%)[49.2%], bias 1217(1.05), saved: 2, total:
        2.10% 13: 1155(48.1%)[48.8%], bias 1176(1.02), saved: 3, total: 2.09%
        25: 1163(48.5%)[49.1%], bias 1156(0.99), saved: 2, total: 2.10% 28:
        1141(47.5%)[48.2%], bias 1145(1.00), saved: 5, total: 2.06% 28, 2286:
        Embedding data: 2368 in 55365 Bits embedded: 2400, changed:
        1141(47.5%)[48.2%], bias: 1145, tot: 55200, skip: 52800 Foiling
        statistics: corrections: 499, failed: 0, offset: 46.129114 +-
        142.525859 Total bits changed: 2286 (change 1141 + bias 1145) Storing
        bitmap into data... Writing grandma.jpg....


   Если теперь я открою оба .jpeg файла и поставив их бок-о-бок, буду
   сравнивать, мне будет трудно найти различия между ними. Это вполне
   ожидаемо, поскольку файл, который мы прячем, очень мал (296 bytes) по
   сравнению с файлом-контейнером (50873 bytes). Забавно, но размер
   нового изображения меньше оригинального:

        $ ls -l grandma.jpg
        -rw-r--r--   1 dlavigne6  wheel   50415 Nov 15 15:04 grandma.jpg


Извлечение скрытого файла

   Чтобы извлечь скрытый файл, мне понадобится ключ -r:

        $ outguess -k "don't worry, the recipe is safe" -r grandma.jpg test.txt
        Reading grandma.jpg....
        Extracting usable bits:  55365 bits
        Steg retrieve: seed: 28, len: 296


   Нужно использовать тот же ключ или кодовую фразу, которая была
   использована при скрытии сообщения. Если я прочитаю получившийся файл
   test.txt, то увижу рецепт в целости и сохранности.

   Утилита outguess скрывает сообщения в файлах .jpeg, .ppm, и .pnm. Если
   у Вас есть изображение .bmp в котором Вы хотите спрятать файл,
   используйте утилиту cjpeg, для преобразования его в .jpeg:

        $ cjpeg santa.bmp > test.jpeg


   На мой невооруженный взгляд оба файла в  gimp выглядят одинаково.
   Теперь я могу использовать этот файл .jpeg с утилитой outguess.

   Утилита djpeg, что неудивительно, преобразует файл обратно; из .jpeg в
   любой требуемый формат:

        $ djpeg -bmp frosty.jpeg > icicle.bmp
        $ djpeg -gif frosty.jpeg > icicle.gif


   Обе утилиты имеют несколько ключей, позволяющих контролировать
   качество изображения. Подробности смотрите в их man страницах.

   Последняя утилита из набора outguess, это jpegtran которая преобразует
   .jpeg из, скажем, ландшафтной ориентации в портретную. К примеру, ключ
   -flip horizontal создаст зеркальное изображение. То есть, то что на
   изображении было слева, станет справа:

        $ jpegtran -flip horizontal family.jpeg > reverse.jpeg


   Справочные страницы (man) содержат другие ключи для поворотов и
   отображений изображений .jpeg.

steghide

   Перейдём ко второму порту, утилите steghide (http://steghide.sourceforge.net/):

        $ cd /usr/ports/security/steghide
        $ make install clean


   Эта утилита устанавливает man steghide, равно как и информацию в
   /usr/local/share/doc/steghide/README.

   Мне нравится outguess, поскольку с ним идут утилиты для манипуляций с
   .jpeg файлами. Мне нравится steghide, поскольку, при несколько более
   значительном синтаксисе, он поддерживает больше файловых форматов
   (.jpeg, .bmp, .wav, и .au), и позволяет задать алгоритм шифрования.


Снова прячем рецепт

   Взгляните что получится, если я спрячу этот рецепт в .wav файл:

        $ steghide embed -cf hohoho.wav -ef cookie.txt -sf new.wav
        Enter passphrase:
        Re-Enter passphrase:
        embedding "cookie.txt" in "hohoho.wav"... done%
        writing stego file "new.wav"... done


   Эти ключи имеют следующие значения, для определения трёх типов файлов,
   как Вы помните:
     * -cf coverfile, файл-контейнер
     * -ef embedded file
     * -sf stegofile

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


Снова извлекаем рецепт

   Когда я захочу извлечь рецепт из стего-файла, я использую утилиту
   extract:

        $ steghide extract -sf new.wav
        Enter passphrase:
        wrote extracted data to "cookie.txt".


   Или так:

        $ steghide extract -sf new.wav -xf secret.txt
        Enter passphrase:
        wrote extracted data to "secret.txt".


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


Прочие дополнения - steghide

   Команда steghide info очень полезна. Она сообщает, содержит ли файл
   скрытые данные (но насколько я знаю, только в файлах, созданных
   steghide):

        $ steghide info new.wav
        "new.wav":
          format: wave audio, PCM encoding
          capacity: 1.9 KB
        Try to get information about embedded data ? (y/n) y
        Enter passphrase:
          embedded file "cookie.txt":
            size: 296.0 Byte
            encrypted: rijndael-128, cbc
            compressed: yes


   Обратите внимание, что алгоритм шифрования по умолчанию - Rijndael,
   так же называемый AES, 128 бит. Чтобы посмотреть, какие ещё
   шифровальные алгоритмы доступны, делаем так:

        $ 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


   Ух ты, сколько поддерживаемых алгоритмов. Чтобы выбрать другой
   алгоритм, просто используйте ключ -e в конце команды embed. В этом
   примере я выберу blowfish:

        $ steghide embed -cf hohoho.wav -ef cookie.txt -sf new.wav -e blowfish


   Как только стего-файл будет создан, я дважды проверю, как оно
   сработало:

        $ steghide info new.wav
        "new.wav":
          format: wave audio, PCM encoding
          capacity: 1.9 KB
        Try to get information about embedded data ? (y/n) y
        Enter passphrase:
          embedded file "cookie.txt":
            size: 296.0 Byte
            encrypted: blowfish, cbc
            compressed: yes


Вывод

   Надеюсь, это поможет Вам начать пользоваться стеганографическими
   утилитами. Единственный вопрос, который Вы можете себе задать вопрос -
   зачем мне всё это? Может быть для того, чтобы хранить пароли. Все мы
   знаем, что для разных задач нужны разные пароли. К примеру, Вам нужны
   пароли для доступа к компьютеру, для электронной почты, для
   электронного банкинга, и ещё для аккаунта на web-сервере. Очень удобно
   хранить их все в текстовом файле, защищенном паролем, и спрятанном в
   том месте, где его никто и не подумает искать.

   А теперь, о чем Вы думаете, когда видите изображение или звуковой
   файл?

   От редактора: разумеется, о женщинах. Мы ведь всегда о них думаем:-)

   Dru Lavigne is an instructor at Marketbridge Technologies in
   Ottawa and the maintainer of the Open Protocol Resource (http://www.isecom.org/).

Comments (0)

Как стать участником |  Что может участник  |  Как работать с порталом  |  Реклама |  Авторские права  |  Контакты  |  Конкурсы  |  RSS  |  Форум
©2003 - 2018 GlobalTrust
Рейтинг@Mail.ru Rambler's Top100 Yandex