Стеганография в XXI веке. Цели. Практическое применение. Актуальность. Алгоритмы скрытия информации в компьютерных изображениях. Вопросы, которые стоит гуглить

Я думаю каждый хоть раз слышал о стеганографии. Стеганография (τεγανός - скрытый + γράφω - пишу, дословно «скрытопись») - это междисциплинарная наука и искусство передавать сокрытые данные, внутри других, не сокрытых данных. Скрываемые данные обычно называют стегосообщением , а данные, внутри которых находится стегосообщение называют контейнером .

На хабрахабре было много различных статей о конкретных алгоритмах информационной стеганографии , например DarkJPEG , «TCP стеганография» , ну и конечно любимый всеми студентами во время курсового проектирования «алгоритм LSB» (например LSB стеганография , Стеганография в GIF , Котфускация исполняемого.net кода)

Стеганографических способов бесчисленное множество. На момент написания данной статьи в США уже опубликовано не менее 95 патентов по стеганографии , а в России не менее 29 патентов . Более всего мне понравился патент Kursh К. и Lav R. Varchney «Продовольственной стеганографии» («Food steganography» , PDF)

Картинка из «пищевого» патента для привлечения внимания:

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

  1. Цели стеганографии - на самом деле их три, а не одна.
  2. Практическое применение стеганографии - я насчитал 15.
  3. Место стеганографии в XXI веке - я считаю, что с технической точки зрения современный мир уже подготовлен, но «социально» стеганография пока «запаздывает».

Я постарался обобщить мои исследования по данному вопросу. (Это значит, что текста много)
Надеюсь на разумную критику и советы со стороны хабросообщества.

Цели стеганографии

Цель - это абстрактная задача, относительно которой разрабатывается научная теория и методология достижения данной цели. Не нужно путать цель и применение . Цель предельно абстрактна, в отличие от применения .

Как я уже говорил, в стеганографии существуют три цели.

Цифровые отпечатки (ЦО) (Digital Fingerprint)

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

Таким образом, при извлечении ЦО третья сторона (т.е. противник) может преследовать две цели:

  1. извлечение ЦО из контейнера («слабая цель» );
  2. подмена одного ЦО другим ЦО («сильная цель» ).

В качестве примера ЦО можно привести продажу электронных книг (например в формате *.PDF). При оплате книги и отправки её получателю можно в *.pdf вкраплять информацию о e-mail; IP; данных, введенные пользователем и т.д. Конечно это не отпечатки пальцев и не анализ по ДНК, но, согласитесь, это лучше, чем ничего. Возможно в России, по причине иной культуры и иного, исторически сложившегося, отношения к исключительному праву данное применение стеганографии неактуально; но, например, в Японии, где за скачивание torrent-файлов могут посадить, применение стеганографических ЦО более вероятно.

Стеганографические водяные знаки (СВЗ) (Stego Watermarking)

В отличие от ЦО, СВЗ подразумевает наличие одинаковых меток для каждой копии контейнера. В частности СВЗ можно использовать для подтверждения авторского права. Например, при записи на видеокамеру можно в каждый кадр вкраплять информацию о времени записи, модели видеокамеры и/или имени оператора видеокамеры.
В случае если отснятый материал попадет в руки конкурирующей компании, вы можете попытаться использовать СВЗ для подтверждения авторства записи. Если ключ держать в секрете от владельца камеры, то с помощью СВЗ можно подтверждать подлинность фото и/или видео снимков. Кстати, наш коллега по цеху, Дмитрий Витальевич Скляров , успешно поломал стеганографию на некоторых моделях камеры Canon . Проблема правда была аппаратной, саму стеганку Дмитрий Витальевич не трогал, тем не менее он стеганографически «доказал» подлинность Сталина с iPhone"ом.

Фотография Сталина с iPhone"ом, сделанная Д.В. Скляровым (с корректным СВЗ)


Скрытая передача данных (СПД)

Это «классическая» цель стеганографии, известная со времен Энея Тактика (Αινείας ο Τακτικός , см его труд, содержащий простые стеганографические приемы: ). Задача - передать данные так, чтобы противник не догадался о самом факте появления сообщения.

В современных русскоязычных работах, посвященных стеганографии, часто используется термин ЦВЗ (Цифровые водяные знаки) . Под этим термином подразумевают то СВЗ, то ЦО. (А иногда СВЗ и ЦО одновременно, да еще в одной статье!) Тем не менее при реализации ЦО и СВЗ возникающие проблемы и задачи принципиально различные! Действительно, СВЗ на всех копиях электронного документа одинаков, а ЦО на всех копиях документов различен. По этой причине, например, атака сговором принципиально невозможна в СВЗ! Хотя бы по этой причине следует различать СВЗ и ЦО. Всех, кто собирается работать в области стеганографии, настоятельно советую не употреблять термин ЦВЗ в своей речи.

Данная, казалось бы очевидная мысль, до сих пор у многих вызывает недоумение. Аналогичную точку зрения о необходимости различать СВЗ и ЦО высказывали такие небезызвестные в узких кругах «стеганографы» , как Кашен (Cachin), Петикола (Petitcolas), Каценбейзер (Katzenbeisser).

Для каждой из этих трех целей следует разрабатывать свои собственные критерии стойкости стеганографической системы и формальные информационно-теоретические модели для их достижения, т.к. смысл применения стеганографии различен. Про фундаментальное отличие СВЗ и ЦО написано выше. Но может быть имеет смысл объединить СПД с ЦО или с СВЗ? Нет! Дело в том, что смыслом СПД является сама скрытая передача данных , а ЦО и СВЗ предназначены для защиты самого контейнера . Более того, сам факт наличия ЦО или СВЗ может не быть тайным, в отличие от большинства задач для СПД. В частности, по этой причине говорить о возможности построения совершенной стегосистемы (по Кашену) для реализации ЦО или СВЗ для большинства практических задач не имеет никакого практического смысла.

4. Защита исключительного права (ЦО)

В качестве возможного применения можно привести голографический многоцелевой диск (Holographic Versatile Disc, HVD). (Правда есть точка зрения, что данная технология изначально «мертворожденная») Разрабатываемые ныне HVB могут содержать до 200 Гб данных на один cartridge. Эти технологии предполагают использовать компаниями теле и радиовещания для хранения видео и аудио информации. Наличие ЦО внутри корректирующих кодов этих дисков может использоваться в качестве основного или дополнительного средства для защиты лицензионного права.

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

Данную цель попыталась воплотить в 2007-2011 годах компания amazon.com . Цитата artty из статьи «Защита» mp3 файлов на amazon.com :

Если по-русски: скачанный файл будет содержать уникальный идентификатор покупки, дату/время покупки и др. информацию (...).

Скачать в лоб данные композиции не получилось (амазон ругается и говорит, что может их продать только на территории США). Пришлось попросить американских знакомых и через некоторое время у меня на руках была одна и та же песня, но скачанная независимо двумя разными людьми с разных аккаунтов в амазоне. По виду файлы были абсолютно одинаковы, размер совпадал до байта.

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

5. Защита авторского права (СВЗ)

В данном случае одним знаком защищается каждая копия контента. Например это может быть фотография. В случае если фотографию опубликуют без разрешения фотографа, сказав, что якобы не он автор данной работы, фотограф может попытаться доказать свое авторство с помощью стеганографии. В данном случае в каждую фотографию должна вкрапляется информация о серийном номере фотоаппарата и/или какие либо иные данные, позволяющие «привязать» фотографию к одному единственному фотоаппарату; и через фотоаппарат фотограф может попытаться косвенно доказать, что именно он является автором снимка.

6. Защита подлинности документов (СВЗ)

Технология может быть такая же, как и для защиты авторского права . Только в данном случае стеганография используется не для подтверждения авторства, а для подтверждения подлинности документа. Документ, не содержащий СВЗ считается «не настоящим», т.е. поддельным. Уже упомянутый выше Дмитрий Скляров как раз решал противоположенную задачу. Он нашел уязвимость фотоаппарата Cannon и смог подделать подлинность фотографии Сталина с iPhone"ом.

7. Индивидуальный отпечаток в СЭДО (ЦО)

В системе электронного документооборота (СЭДО) можно использовать индивидуальный отпечаток внутри *.odt, *.docx и иных документах при работе с ними пользователем. Для этого должны быть написаны специальные приложения и/или драйверы, которые установлены и работают в системе. Если данная задача выполнена, то с помощью индивидуального отпечатка можно будет опознать, кто работал с документом, а кто нет. Разумеется стеганографию в данном случае глупо делать единственным критерием, но как дополнительный фактор идентификации участников работы с документом она может быть полезна.

8. Водяной знак в DLP системах (СВЗ)

Стеганография может быть применима для предотвращения утечек информации (Data Leak Prevention , DLP). В отличие от индивидуального отпечатка в СЭДО , в данном применении стеганографии при создании документа, содержащий конфиденциальный характер, вкрапляется определенная метка. При этом метка не изменяется, вне зависимости от количества копий и/или ревизий документа.

Для того, чтобы извлечь метку необходим стегоключ. Стегоключ, разумеется, держится в тайне. DLP-система, перед одобрением или отказом выдать документ вовне, проверяет наличие или отсутствие водяного знака. Если знак присутствует, то система не разрешает отправлять документ вовне системы.

9. Скрытая передача управляющего сигнала (СПД)

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

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

10. Стеганографические botnet-сети (СПД)

Если быть педантом, то данное применение можно считать частным случаем скрытой передачей управляющего сигнала . Тем не менее, я решил обозначит данное применение отдельно. Мой коллега из ТГУ прислал мне весьма любопытную статью неких Shishir Nagaraja , Amir Houmansadr , Pratch Piyawongwisal , Vijit Singh , Pragya Agarwal и Nikita Borisov "а «Stegobot: a covert social network botnet» . Я не специалист по botnet-сетям. Не могу сказать, лажа это или интересная фича. Буду раз услышать мнение хабрасообщества!

11. Подтверждение достоверности переданной информации(ЦО).

Стегосообщение в данном случае содержит данные, подтверждающие корректность передаваемых данных контейнера. В качестве примера это может быть контрольная сумма или хеш-функция (дайджест). Задача подтверждения достоверности является актуальной, если противник имеет необходимость подделать данные контейнера; по этой причине данное применение не нужно путать с защитой подлинности документов ! Например если речь идет о фотографии, то защитой подлинности является доказательство того, что данная фотография настоящая, не подделанная в фотошопе. Мы как бы защищаемся от самого отправителя (в данном случае фотографа). В случае подтверждения достоверности необходимо организовать защиту от третей стороны (man in the middle), которая имеет возможность подделать данные между отправителем и получателем.

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

12. Funkspiel («Радиоигра») (СПД)

Из википедии :

Определение Funkspiel"я

Радиоигра (калька с нем. Funkspiel - «радиоигра» или «радиоспектакль») - в практике разведки XX века использование средств радиосвязи для дезинформации разведывательных органов противника. Для радиоигры часто используют захваченного контрразведкой и перевербованного разведчика-радиста или двойного агента. Радиоигра позволяет имитировать деятельность уничтоженной или никогда не существовавшей разведсети (и таким образом снижать активность противника по заброске новых разведчиков), передавать противнику дезинформацию, получать сведения о намерениях его разведывательных органов и достигать других разведывательных и контрразведывательных целей.

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

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

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

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

13. Неотчуждаемость информации (СВЗ)

Существует ряд документов, для которых важна целостность. Ее можно осуществить резервированием данных. Но что делать, если есть необходимость иметь документы в таком виде, чтобы невозможно было одну информацию отделить от другой информации? В качестве примера можно привести медицинские снимки. Многие авторы для надежности предлагают вовнутрь снимков вкраплять информацию об имени, фамилии и иных данных пациента. См например книгу Штефана Каценбейзера (Stefan Katzenbeisser) и Фабиана Петикола (Fabien A. P. Petitcolas) "Information Hiding Techniques for Steganography and Digital Watermarking ":

Отрывок про использование стеганографии в медицине. из книги ""Information Hiding Techniques for Steganography and Digital Watermarking""

The healthcare industry and especially medical imaging systems may benefit from information hiding techniques. They use standards such as DICOM (digital imaging and communications in medicine) which separates image data from the caption, such as the name of the patient, the date, and the physician. Sometimes the link between image and patient is lost, thus, embedding the name of the patient in the image could be a useful safety measure. It is still an open question whether such marking would have any effect on the accuracy of the diagnosis but recent studies by Cosman et al. revealing that lossy compression has little effect, let us believe that this might be feasible. Another emerging technique related to the healthcare industry is hiding messages in DNA sequences. This could be used to protect intellectual property in medicine, molecular biology or genetics.

Аналогичные рассуждения можно сделать по поводу современной астрономии. Приведем цитату отечественного астронома Владимира Георгиевича Сурдина (ссылка на видео):

Я завидую тем, кто сейчас входит в науку. Последние 20 лет мы [астрономы] в общем-то топтались на месте. Но сейчас ситуация изменилась. В мире построено несколько телескопов совершенно уникального свойства. Они видят почти все небо и огромные объемы информации получают каждую ночь. Вот достаточно сказать, что за предыдущие 200 лет астрономы открыли несколько тысяч объектов. (...) Это за 200 лет! Сегодня каждую ночь мы открываем триста новых объектов солнечной системы! Это больше, чем человек ручкой смог записать бы в каталог. [за сутки]

Подумать только, каждую ночь 300 новых объектов. Понятно, что это различные мелкие космические астеройды, а не открытие новых планет, но все же… Действительно, возможно было бы разумно вкраплять информацию о времени съемки, месте съемки и иные данные непосредственно в изображение? Тогда при обмене снимков между астрономами, ученые всегда могли бы понять, где, когда и при каких обстоятельствах был сделан тот или иной снимок. Можно даже вкраплять информацию без ключа, считая, что противника нет. Т.е. использовать стеганографию только ради «неотчуждения» самих снимков от дополнительной информации, надеясь на честность пользователей; возможно, это было бы гораздо более удобно, чем сопровождать каждый снимок информацией.

Из мира компьютерных игр можно привести WoW . Если сделать скриншот игры, то автоматически внедряется СВЗ , содержащий имя пользователя, время снятия скриншота (с точностью до минуты и IP) адрес сервера.

14. Стеганографическое отвлечение (?)

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

Грубо говоря, стеганографическое отвлечение чем-то напоминает DoS и DDoS атаки. Вы отвлекаете внимание противника от контейнеров, которые действительно содержат что-то ценное.

15. Стеганографическое отслеживание (СПД)

Данное применение чем-то похоже на п.7 индивидуальный отпечаток в СЭДО , только цель стоит иная - поймать злоумышлинника, который «сливает» информацию. Из реального мира можно привести пример отмеченных дензнаков («меченные деньги»). Они используются правоохранительными органами, для того чтобы преступник, получивший деньги за какую-либо незаконную деятельность, не мог бы потом заявить, что эти деньги были у него до сделки.

Почему бы не перенять опыт «реальных коллег» в наш виртуальных мир? Таким образом стеганографическое отслеживание напоминает чем-то вроде honeypot"а .

Прогноз о будущем стеганографии в первой четверти XXI века

Прочитав полусотню различных статей по стеганке и несколько книжек, рискну высказать свое мнение по поводу стеганографии. Данное мнение - лишь мое мнение и я его никому не навязываю. Готов к конструктивной критике и диалогу.

Тезис. Я считаю, что мир технически готов к стеганографии, но в «культурном» плане современное информационное общество пока ещё не дозрело. Я думаю, что в ближайшее время (2015-2025 годах) произойдет то, что возможно в будущем назовут "стеганографической революцией "… Может быть это немного заносчивое утверждение, но я попытаюсь обосновать свою точку зрения четырьмя положениями.

Первое . В данный момент не существует единой теории стеганографии. Совершенно секретная стегосистема (по Кашену) конечно лучше, чем ничего, но на мой взгляд это черно-белая фотография хвоста сферического виртуального коня в вакууме… Миттельхользер попытался немного улучшить результаты Кристиана Кашена, но пока это очень пространная теория.

Отсутствие единой теории - важный тормоз. Математически доказано, что шифр Вернама (=«одноразовый блокнот») взломать невозможно, по этой причине связь между В.В. Путиным и Баракой Обамой осуществляется именно с помощью этого алгоритма. Существует определенная теория, создающая и изучающая абстрактные (математические) криптографические объекты (Bent-функции, LFSR, циклы Фейстейля, SP-сеты и т.д.). В стеганографии существует зоопарк терминов и моделей, но большинство из них необоснованны, изучены не полностью или притянуты за уши.

Тем не менее определенные сдвиги в данном направлении уже есть. Уже осуществляются скромные попытки использовать стеганографию если не как основное или даже единственное решение, то как вспомогательный инструмент. Огромный сдвиг в теории произошел за последние пятнадцать лет (2000-2015), но думаю об этом можно написать отдельный пост, в двух словах сказать трудно.

Второе . Стеганография - наука междисциплинарная ! Это первое, что должен уяснить любой начинающий «стеганограф». Если криптография может абстрагироваться от оборудования и решать исключительно задачи в мире дискретной математике, то специалист по стеганографии обязан изучать среду. Хотя конечно и в построении криптосистем существует ряд проблем, например атака по побочным каналам; но это не вина качества шифра. Я думаю, что стеганография будет развиваться в соответствии с развитием изучения среды, в которой передаются скрытые сообщения. Таким образом разумно ожидать появления «химической стеганографии», «стеганографии в изображениях», «стеганографии в кодах, исправляющих ошибки», «продовольственной стеганографии» и т.д.

Начиная примерно с 2008 года это уже все осознали. Стеганографией стали интересоваться не только математики-криптографы, но и лингвисты, филологи, химики. Думаю это позитивный сдвиг, говорящий о многом.

Третее . Современный виртуальный мир перенасыщен текстами, картинками котиков, видеороликами и прочая и прочая… На одном сайте YouTube ежеминутно загружается более 100 часов видео! Вы только подумайте, ежеминутно ! Вот сколько минут вы читаете этот пространный опус?.. А теперь умножьте это число на 100! Вот столько часов различного видео на одном только YouTube появилось за это время!!! Вы можете себе это представить? А ведь это огромная «почва» для сокрытия данных! То есть «технически» мир давным давно готов к стеганографии. И я, если честно, глубоко уверен, что стеганография и противодействие стеганографии в ближайшем будущем станет такой же актуальной проблемой, как проблема BigData Colossus …

Данная информация перестала быть секретной, если мне не изменяет память, только в 2000-х годах. В качестве другого исторического примера можно привести алгоритм RSA, который был изобретен в конце ВМВ британскими криптографами. Но, по понятным причинам, военные засекретили первый в мире алгоритм асимметричного шифрования и пальма первенства досталась Диффи, Хелману, а затем Ривесту, Шамиру и Адлеману.

К чему я это? Дело в том, что в информационной безопасности все изобретается минимум два раза: один раз «в закрытую», а второй раз «в открытую»; а в некоторых случаях даже больше, чем два раза. Это нормально. Думаю тоже ждет и стеганографию (ели уже не постигло).

В современной западной литературе почему-то «исчезли» (т.е. перестали публиковаться) многие ученые, которые в 1998-2008 годах предлагали весьма интересные идеи. (например Питер Вайнер, Мишель Элиа). Примерно аналогичная ситуация была перед изобретением атомного оружия… Кто знает, может быть уже изобретены совершенные стегосистемы и они успешно используются ГРУ и/или АНБ? А мы, дочитывая этот пост и глядя на наручные часы высчитываем, сколько ещё часов мурлыкающих котиков закачали миллионы пользователей на YouTube и есть ли среди них котики с перепиской террористов; команд для botnet-сети или чертежи РТ-2ПМ2, зашифрованные шифром Вернама.

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

Стеганогра́фия (от греч. στεγανός - скрытый + γράφω - пишу; буквально «тайнопись») - способ передачи или хранения информации с учётом сохранения в тайне самого факта такой передачи (хранения). Этот термин ввел в 1499 году Иоганн Тритемий в своем трактате «Стеганография» (Steganographia), зашифрованном под магическую книгу.

Постановка задачи

Необходимо реализовать программу, которая размещает исходный текст в цифровом изображении либо получает текст из изображения, хранящего текст. Изображения рекомендуется использовать в формате хранения без потерь (напр., bmp). Один байт текста будет кодироваться в одном пикселе изображения. Так, один байт текста 10 101 010 будет расположен в пикселе изображения следующим образом:

R: 111100 10
G: 00001 101
B: 11001 010

Алгоритм кодирования информации:

  1. Загрузить изображение в память программы
  2. Определить количество доступных пикселей изображения
  3. Определить максимальную длину текста
  4. Загружаем текст в память программы из консоли или файла
  5. Если текст превышает максимально допустимую длину, сообщить об этом пользователю и завершить программу
  6. Организуем цикл по байтам текста и пикселям изображения, кодируем байт текста по схеме 2-3-3 битов на каждый из каналов пикселя
  7. Сохранить изображение на диск в исходном формате

Алгоритм декодирования разрабатывается похожим образом. Для чтения изображения в формате bmp используется бинарное чтение файлов, заголовок которого описан следующей структурой для 32-битной архитектуры:

#pragma pack(push, 1) typedef struct { unsigned char b1,b2; unsigned long bfSize; unsigned short bfReserved1; unsigned short bfReserved2; unsigned long bfOffBits; } BITMAPFILEHEADER; typedef struct { unsigned int biSize; int biWidth; int biHeight; unsigned short biPlanes; unsigned short biBitCount; unsigned int biCompression; unsigned int biSizeImage; int biXPelsPerMeter; int biYPelsPerMeter; unsigned int biClrUsed; unsigned int biClrImportant; } BITMAPINFOHEADER; #pragma pack(pop)

Требования к программе

Базово программа должна обеспечивать возможность кодирования текста из таблицы ASCII в изображении формата BMP без компрессии на стандартной палитре. В качестве усложнения программы могут быть реализованы:

  • Кодирование любого текста из заранее известных кодировок (UTF-16, CP-1251, UTF-8)
  • Использование других форматов изображения без потерь
  • Шифрование текста перед кодированием в изображение для большей защищённости передачи информации
  • Использование других схем записи байта текста в пиксель изображения, например, 1 бит текста в 1 пиксель, таким образом, кодировка является менее заметной, но существенно сокращается размер доступного для кодирования текста

Требования к отчёту

Отчёт выполняет в формате docx или odt вместе с копией на pdf . В отчёте должны присутствовать следующие части:

  1. Постановка задачи
  2. Теоретическое описание проблем стеганографии
  3. Выбранные методы кодирования информации в выполненной работе с подробным описанием алгоритма кодирования и декодирования
  4. Части программ, демонстрирующие основную моменты работы программы
  5. Описание программы в части работы пользователем: вызов, аргументы, скриншоты и прочее
  6. Заключение о проделанной работе

Вопросы для самопроверки

  • Зачем используется #pragma pack(push, 1) ?
  • Как осуществляется чтение и запись бинарных файлов?
  • Что такое формат хранение без потерь?
  • Что из себя представляет формат bmp ?
  • Что такое бит/байт текста?
  • Какие каналы используются для хранения информации о цвете пикселя?
  • Как в программу передаются аргументы при вызове?
  • Каким могут быть варианты хранения скрытого текста, кроме как в изображениях?
  • Какая информация может быть скрыта?

Вопросы, которые стоит гуглить

  • c++ read binary file to struct
  • why i need pragma push c++
  • bmp format structure
  • steganography to bmp

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

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

Чтобы не загружать читателя, ограничусь в использовании формул и прочих строгих математических выкладок. В списке использованных источников приведены ссылки на книги, где подробно описана математическая модель стеганосистемы. Статья же делится на две части:
1. Теоретическая: схема типичной стеганосистемы;
2. Пример конкретной стеганосистемы (на основе изображений JPEG) и схема её реализации.

Описание стеганосистемы

Рассмотрим структурную схему типичной стеганосистемы. В общем случае стеганосистема может быть рассмотрена как система связи.

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

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

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

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

В фиксированном контейнере размеры и характеристики последнего заранее известны. Это позволяет выполнять вложение данных оптимальным (в определенном смысле) образом. Далее будем рассматривать фиксированные контейнеры.

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

В процессе передачи звук, изображение или какая-либо другая информация, используемая в качестве контейнера, может подвергаться разным трансформациям (в том числе с использованием алгоритмов с потерей данных): изменение объема, преобразование в другой формат и т.п., – поэтому для сохранения целостности встроенного сообщения может понадобиться использование кода с исправлением ошибок (помехоустойчивое кодирование). Начальную обработку скрываемой информации выполняет изображенный на рисунке прекодер.

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

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

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

  • с секретным ключом – используется один ключ, который определяется до начала обмена стеганограммой или передается защищенным каналом;
  • с открытым ключом – для упаковки и распаковки сообщения используются разные ключи, которые отличаются таким образом, что с помощью вычислений невозможно получить один ключ из другого, поэтому один из ключей (открытый) может свободно передаваться по незащищенному каналу.

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

  • Криптографическая стойкость – отсутствие у нарушителя возможности предусмотреть следующий бит на основании известных ему предыдущих с вероятностью, отличной от 1/2. На практике криптографическая стойкость оценивается статистическими методами.
  • Хорошие статистические свойства – ПСП по своим статистическим свойствам не должна существенно отличаться от истинно случайной последовательности.
  • Большой период формированной последовательности.
  • Эффективная аппаратно-программная реализация.

Статистически (криптографически) безопасный генератор ПСП должен соответствовать следующим требованиям:

  • ни один статистический тест не определяет в ПСП никаких закономерностей, иными словами, не отличает эту последовательность от истинно случайной;
  • при инициализации случайными значениями генератор порождает статистически независимые псевдослучайные последовательности.

Следует отметить, что метод случайного выбора величины интервала между встроенными битами не является достаточно эффективным. Скрытые данные должны быть распределены по всему контейнеру, поэтому равномерное распределение длины интервалов (от наименьшего к наибольшему) может быть достигнуто только приблизительно, поскольку должна существовать уверенность в том, что все сообщение встроено (то есть, поместилось в контейнер).

Скрываемая информация заносится в соответствии с ключом в те биты, модификация которых не приводит к существенным искажениям контейнера. Эти биты образуют так называемый стеганопуть. Под «существенным» подразумевается искажение, которое приводит к росту вероятности выявления факта наличия скрытого сообщения после проведения стеганоанализа.

Стеганографический канал – канал передачи контейнера-результата (вообще, существование канала как, собственно говоря, и получателя – наиболее обобщенный случай, поскольку заполненный контейнер может, например, храниться у «отправителя», который поставил перед собой цель ограничить неавторизованный доступ к определенной информации. В данном случае отправитель выступает в роли получателя).

В стеганодетекторе определяется наличие в контейнере (возможно уже измененном) скрытых данных. Различают стеганодетекторы, предназначенные только для обнаружения факта наличия встроенного сообщения, и устройства, предназначенные для выделения этого сообщения из контейнера, – стеганодекодеры.

Итак, в стеганосистеме происходит объединение двух типов информации таким образом, чтобы они по-разному воспринимались принципиально разными детекторами. В качестве одного из детекторов выступает система выделения скрытого сообщения, в качестве другого – человек.

Алгоритм встраивания сообщения в простейшем случае состоит из двух основных этапов:

  1. Встраивание в стеганокодере секретного сообщения в контейнер-оригинал.
  2. Обнаружение (выделение) в стеганодетекторе (декодере) скрытого зашифрованного сообщения из контейнера-результата.

Про JPEG

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

Для начала кратко рассмотрим алгоритм JPEG, более подробное описание и примеры можно найти в книгах, указанных в источниках. Кодировщик 8-битных RGB-изображений можно описать семью пунктами (на вход подаётся массив компонент изображения):

  1. Преобразование цветового пространства. Цветное изображение преобразуется из RGB в представление светимость/цветность. Глаз чувствителен к малым изменениям яркости пикселов, но не цветности, поэтому из компоненты цветности можно удалить значительную долю информации для достижения высокого сжатия без заметного визуального ухудшения качества образа. Этот шаг не является обязательным, но он очень важен, так как остальная часть алгоритма будет независимо работать с каждым цветным компонентом. Без преобразования пространства цветов из компонентов RGB нельзя удалить существенную часть информации, что не позволяет сделать сильное сжатие.
  2. Субдискретизация. Для более эффективного сжатия цветное изображение разбивается на крупные пикселы. Укрупнение пикселов либо вообще не делается (укрупнение 1hv1 или «4:4:4»), либо же делается или в соотношении 2:1 по горизонтали и вертикали (укрупнение 2h2v или «4:1:1») или в пропорциях 2:1 по горизонтали и 1:1 по вертикали (укрупнение 2h1v или «4:2:2»).
  3. Соединение в блоки. Пикселы каждой цветной компоненты собираются в блоки 8x8, которые называются единицами данных (Minimum Coded Unit). Если число строк или столбцов изображения не кратно 8, то самая нижняя строка и самый правый столбец повторяются нужное число раз.
  4. Дискретное косинус-преобразование. К каждой единице данных применяется дискретное косинус-преобразование (DCT), в результате чего получаются блоки 8x8 частот единиц данных. Они содержат среднее значение пикселов единиц данных и следующие поправки для высоких частот. Это позволяет представить данные в виде, позволяющем более эффективное сжатие.
  5. Квантование. Каждая из 64 компонент частот единиц данных делится на специальное число, называемое коэффициентами квантования (QC), которая округляется до целого. Здесь информация невосполнимо теряется. Но в нашем кодировщике этот шаг опускается для увеличения количества записываемой информации (т.е. все коэффициенты квантования равны единице, качество JPEG – 100%).
  6. Сжатие без потерь. Все 64 квантованных частотных коэффициента каждой единицы данных кодируются с помощью комбинации RLE и метода Хаффмана.
  7. Добавление заголовков и запись в файл. На последнем шаге добавляется заголовок из использованных параметров JPEG и результат выводится в сжатый файл.

Алгоритм симметричный, так что кодировщик будет выполнять обратные действия.

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

Приступим к рассмотрению стеганосистемы на основе изображений формата JPEG. В основе лежит простейший метод LSB (Least Significant Bit, наименее значащий бит).

Суть метода LSB заключается в том, что человек в большинстве случаев не способен заметить изменений в последнем бите цветовых компонент изображения. Фактически, LSB – это шум, поэтому его можно использовать для встраивания информации путем замены менее значащих битов пикселей изображения битами секретного сообщения. Метод работает с растровыми изображениями, представленными в формате без компрессии (например, BMP). Основной недостаток метода – высокая чувствительность к малейшим искажениям контейнера.

В нашей же стеганосистеме будем применять DCT LSB стеганографию. Основное отличие заключается в том, что данные записываются не в цветовые компоненты, а в коэффициенты дискретного косинус-преобразования. Рассмотрим схему кодировщика (декодер делает всё тоже самое, но в обратном порядке).

На входе: цветное изображение, скрываемые данные, пароль.
На выходе: изображение в формате JPEG со скрытыми данными.

  1. Генерация ключей. Для работы кодировщика необходимы 2 ключа: стегано- и криптоключ. Возьмем хэш-сумму SHA-256 введённого пользователем пароля. Первые 16 байт будем использовать для стеганоключа, вторые – для криптоключа.
  2. Предварительная обработка текста (прекодер). Повторно берем хэш-сумму криптоключа и получаем новые 32 байта, которые уже будут использоваться для шифрования данных. Данные шифруем с помощью алгоритма AES-256.
  3. Начинаем кодировать изображение. Проводим первые 4 шага ранее рассмотренного алгоритма JPEG.
  4. Вместо пятого шага (квантование) алгоритма JPEG прячем наши данные.
    • Анализатор формата. Чтобы сделать вмешательство в изображение незаметным, будем проводить «визуальный» анализ. Каждый последний бит коэффициента блока инвертируется, и считается метрика PSNR для исходного и измененного блоков. Если значение метрики меньше 55 дБ, то в данный блок запись не производится. Т.к. при значениях метрики больше 40 дБ изображения считаются практически идентичными для человеческого глаза, то при 55 дБ разница точно будет незаметна для глаза.
    • Стеганопуть. Стеганоключ представляется в двоичном виде, и каждому блоку ставится в соответствие соответствующий бит двоичной последовательности (по модулю). Если бит равен единице, то блок используется для записи, если нулю – то отбрасывается.
    • Стеганокодер. Проводим стандартную процедуру LSB для каждого блока 8х8: записываем данные в каждый элемент, значение которого больше единицы.
  5. Продолжаем выполнение алгоритма JPEG (сжатие без потерь и запись в файл).

Выводы и заключение

По приведенной схеме стеганосистемы можно легко написать программу. Исходные коды моей реализации можно найти на GitHub . Программу нельзя назвать полноценной, скорее альфа-версией, но основной функционал в ней реализован. Четвертый пункт для кодировщика реализован , а для декодировщика . За основу взяты уже готовые реализации JPEG, SHA-256, AES-256.

Кодирование-декодирование

Void jpeg_encoder::code_block(int component_num) { DCT2D(m_sample_array); load_quantized_coefficients(component_num); double psnr = 0; for (int i = 0; i < 64; i++) { if (m_coefficient_array[i] > 1) { short t = m_sample_array[i]; bit_stream::write_bit(t, bit_stream::read_bit(t) == 1 ? 0: 1); psnr += (t - m_sample_array[i]) * (t - m_sample_array[i]); } } psnr /= 64; if (psnr != 0) psnr = 20 * log10(255 / sqrt(psnr)); else psnr = 70; if (psnr > 55) { for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { if (m_coefficient_array > 1) { int bits = bitstr->get_next_bit(); if (bits != -1) { bit_stream::write_bit(m_coefficient_array, bits); } bitr++; } } } } if (m_pass_num == 1) code_coefficients_pass_one(component_num); else code_coefficients_pass_two(component_num); } void jpeg_decoder::transform_mcu(int mcu_row) { jpgd_block_t* pSrc_ptr = m_pMCU_coefficients; uint8* pDst_ptr = m_pSample_buf + mcu_row * m_blocks_per_mcu * 64; for (int mcu_block = 0; mcu_block < m_blocks_per_mcu; mcu_block++) { idct(pSrc_ptr, pDst_ptr, m_mcu_block_max_zag); double psnr = 0; for (int i = 0; i < 64; i++) { if (pSrc_ptr[i] > 1) { short t = pDst_ptr[i]; bit_stream::write_bit(t, bit_stream::read_bit(t) == 1 ? 0: 1); psnr += (t - pDst_ptr[i]) * (t - pDst_ptr[i]); } } psnr /= 64; if (psnr != 0) psnr = 20 * log10(255 / sqrt(psnr)); else psnr = 70; if (!done && psnr > 55) { for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { if (pSrc_ptr] > 1) { int bits = bit_stream::read_bit(pSrc_ptr]); if (bitstr->set_next_bit(bits) == -1) { done = true; int size = bitstr->get_readed_size(); char* str = new char; bitstr->get_data(str); str = ""; m_stparams->stego_data = str; } } } } } pSrc_ptr += 64; pDst_ptr += 64; } }

В заключение приведем характеристики полученного продукта:

  • JPEG (DCT LSB) стеганография;
  • Двухуровневая защита информации;
  • Использование SHA-256 для генерации ключей;
  • Симметричное шифрование текста AES-256;
  • До 30% скрываемой информации от размера контейнера в зависимости от типа изображения;
  • Отсутствие помехозащищенности.

Источники и дополнительные ссылки

  1. Коханович Г.Ф., Пузыренко А.Ю. Компьютерная стеганография. Теория и практика. – К.: «МК-Пресс», 2006.
  2. Д.Сэломон. Сжатие данных, изображений и звука. Москва: Техно-сфера, 2004.
  3. Ватолин Д., Ратушняк А., Смирнов М., Юкин В. Методы сжатия данных. Устройство архиваторов, сжатие изображений и видео. - М.: ДИАЛОГ-МИФИ, 2003.

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

Классификация стеганографии

В конце 90-х годов выделилось несколько направлений стеганографии:

  • Классическая стеганография
  • Компьютерная стеганография
  • Цифровая стеганография

Классическая стеганография

Симпатические чернила

Одним из наиболее распространенных методов классической стеганографии является использование симпатических (невидимых) чернил . Текст, записанный такими чернилами , проявляется только при определенных условиях (нагрев, освещение, химический проявитель и т. д.) Изобретенные ещё в I веке н. э. Филоном Александрийским , они продолжали использоваться как в средневековье , так и в новейшее время , например, в письмах русских революционеров из тюрем. В советской школьной программе в курсе литературы изучался рассказ о том, как Владимир Ленин писал молоком на бумаге между строк, см. Рассказы о Ленине . Молоко проявлялось при нагреве над пламенем.

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

Другие стеганографические методы

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

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

Стеганографические модели

Стеганографические модели - используются для общего описания стеганографических систем.

Основные понятия

В 1983 году Симмонс предложил т. н. «проблему заключенных». Её суть состоит в том, что есть человек на свободе (Алиса), в заключении (Боб) и охранник Вилли. Алиса хочет передавать сообщения Бобу без вмешательства охранника. В этой модели сделаны некоторые допущения: предполагается, что перед заключением Алиса и Боб договариваются о кодовом символе, который отделит одну часть текста письма от другой, в которой скрыто сообщение. Вилли же имеет право читать и изменять сообщения. В 1996 году на конференции Information Hiding: First Information Workshop была принята единая терминология:

  • Стеганографическая система (стегосистема) - объединение методов и средств используемых для создания скрытого канала для передачи информации . При построении такой системы условились о том, что: 1) враг представляет работу стеганографической системы. Неизвестным для противника является ключ с помощью которого можно узнать о факте существования и содержания тайного сообщения. 2) При обнаружении противником наличия скрытого сообщения он не должен смочь извлечь сообщение до тех пор пока он не будет владеть ключом . 3) Противник не имеет технических и прочих преимуществ.
  • Сообщение - это термин , используемый для общего названия передаваемой скрытой информации, будь то лист с надписями молоком, голова раба или цифровой файл.
  • Контейнер - так называется любая информация , используемая для сокрытия тайного сообщения. Пустой контейнер - контейнер, не содержащий секретного послания. Заполненный контейнер (стегоконтейнер) - контейнер, содержащий секретное послание.
  • Стеганографический канал (стегоканал) - канал передачи стегоконтейнера.
  • Ключ (стегоключ) - секретный ключ , нужный для сокрытия стегоконтейнера. Ключи в стегосистемах бывают двух типов: секретные и открытые. Если стегосистема использует секретный ключ, то он должен быть создан или до начала обмена сообщениями, или передан по защищённому каналу. Стегосистема, использующая открытый ключ , должна быть устроена таким образом, чтобы было невозможно получить из него закрытый ключ . В этом случае открытый ключ мы можем передавать по незащищённому каналу.

Компьютерная стеганография

Компьютерная стеганография - направление классической стеганографии, основанное на особенностях компьютерной платформы. Примеры - стеганографическая файловая система StegFS для Linux , скрытие данных в неиспользуемых областях форматов файлов , подмена символов в названиях файлов , текстовая стеганография и т. д. Приведём некоторые примеры:

  • Использование зарезервированных полей компьютерных форматов файлов - суть метода состоит в том, что часть поля расширений , не заполненная информацией о расширении, по умолчанию заполняется нулями. Соответственно мы можем использовать эту «нулевую» часть для записи своих данных. Недостатком этого метода является низкая степень скрытности и малый объём передаваемой информации.
  • Метод скрытия информации в неиспользуемых местах гибких дисков - при использовании этого метода информация записывается в неиспользуемые части диска , к примеру, на нулевую дорожку. Недостатки: маленькая производительность, передача небольших по объёму сообщений.
  • Метод использования особых свойств полей форматов, которые не отображаются на экране - этот метод основан на специальных «невидимых» полях для получения сносок, указателей. К примеру, написание чёрным шрифтом на чёрном фоне. Недостатки: маленькая производительность, небольшой объём передаваемой информации.
  • Использование особенностей файловых систем - при хранении на жестком диске файл всегда (не считая некоторых ФС, например, ReiserFS) занимает целое число кластеров (минимальных адресуемых объёмов информации). К примеру, в ранее широко используемой файловой системе FAT32 (использовалась в Windows98 / /) стандартный размер кластера - 4 Кб . Соответственно для хранения 1 Кб информации на диске выделяется 4 Кб информации, из которых 1Кб нужен для хранения сохраняемого файла, а остальные 3 ни на что не используются - соответственно их можно использовать для хранения информации. Недостаток данного метода: лёгкость обнаружения.

Цифровая стеганография

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

Изображение кота, извлеченное из изображения дерева, расположенного выше

Цифровая стеганография - направление классической стеганографии, основанное на сокрытии или внедрении дополнительной информации в цифровые объекты, вызывая при этом некоторые искажения этих объектов. Но, как правило, данные объекты являются мультимедиа-объектами (изображения, видео, аудио, текстуры 3D-объектов) и внесение искажений, которые находятся ниже порога чувствительности среднестатистического человека, не приводит к заметным изменениям этих объектов. Кроме того, в оцифрованных объектах, изначально имеющих аналоговую природу, всегда присутствует шум квантования; далее, при воспроизведении этих объектов появляется дополнительный аналоговый шум и нелинейные искажения аппаратуры, все это способствует большей незаметности сокрытой информации.

Алгоритмы

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

  • Работающие с самим цифровым сигналом. Например, метод LSB.
  • «Впаивание» скрытой информации. В данном случае происходит наложение скрываемого изображения (звука, иногда текста) поверх оригинала. Часто используется для встраивания ЦВЗ.
  • Использование особенностей форматов файлов . Сюда можно отнести запись информации в метаданные или в различные другие не используемые зарезервированные поля файла.

По способу встраивания информации стегоалгоритмы можно разделить на линейные (аддитивные), нелинейные и другие. Алгоритмы аддитивного внедрения информации заключаются в линейной модификации исходного изображения, а её извлечение в декодере производится корелляционными методами. При этом ЦВЗ обычно складывается с изображением-контейнером, либо «вплавляется» (fusion) в него. В нелинейных методах встраивания информации используется скалярное либо векторное квантование. Среди других методов определенный интерес представляют методы, использующие идеи фрактального кодирования изображений. К аддитивным алгоритмам можно отнести:

  • А17 (Cox)
  • А18 (Barni)
  • L18D (Lange)
  • А21 (J. Kim).
  • А25 (С. Podilchuk).

Метод LSB

LSB (Least Significant Bit, наименьший значащий бит) - суть этого метода заключается в замене последних значащих битов в контейнере (изображения, аудио или видеозаписи) на биты скрываемого сообщения. Разница между пустым и заполненным контейнерами должна быть не ощутима для органов восприятия человека.

Суть метода заключается в следующем: Допустим, имеется 8-битное изображение в градациях серого. 00h (00000000b) обозначает чёрный цвет, FFh (11111111b) - белый. Всего имеется 256 градаций (). Также предположим, что сообщение состоит из 1 байта - например, 01101011b. При использовании 2 младших бит в описаниях пикселей, нам потребуется 4 пикселя. Допустим, они чёрного цвета. Тогда пиксели, содержащие скрытое сообщение, будут выглядеть следующим образом: 00000001 00000010 00000010 00000011 . Тогда цвет пикселей изменится: первого - на 1/255, второго и третьего - на 2/255 и четвёртого - на 3/255. Такие градации, мало того что незаметны для человека, могут вообще не отобразиться при использовании низкокачественных устройств вывода.

Методы LSB являются неустойчивыми ко всем видам атак и могут быть использованы только при отсутствии шума в канале передачи данных.

Обнаружение LSB-кодированного стего осуществляется по аномальным характеристикам распределения значений диапазона младших битов отсчётов цифрового сигнала.

Все методы LSB являются, как правило, аддитивными (A17, L18D).

Другие методы скрытия информации в графических файлах ориентированы на форматы файлов с потерей, к примеру, JPEG. В отличие от LSB они более устойчивы к геометрическим преобразованиям. Это получается за счёт варьирования в широком диапазоне качества изображения, что приводит к невозможности определения источника изображения.

Эхо-методы

Эхо-методы применяются в цифровой аудиостеганографии и используют неравномерные промежутки между эхо-сигналами для кодирования последовательности значений. При наложении ряда ограничений соблюдается условие незаметности для человеческого восприятия. Эхо характеризуется тремя параметрами: начальной амплитудой, степенью затухания, задержкой. При достижении некоего порога между сигналом и эхом они смешиваются. В этой точке человеческое ухо не может уже отличить эти два сигнала. Наличие этой точки сложно определить, и она зависит от качества исходной записи, слушателя. Чаще всего используется задержка около 1/1000, что вполне приемлемо для большинства записей и слушателей. Для обозначения логического нуля и единицы используется две различных задержки. Они обе должны быть меньше, чем порог чувствительности уха слушателя к получаемому эху.

Эхо-методы устойчивы к амплитудным и частотным атакам, но неустойчивы к атакам по времени.

Фазовое кодирование

Фазовое кодирование (phase coding, фазовое кодирование) - так же применяется в цифровой аудиостеганографии. Происходит замена исходного звукового элемента на относительную фазу , которая и является секретным сообщением. Фаза подряд идущих элементов должна быть добавлена таким образом, чтобы сохранить относительную фазу между исходными элементами. Фазовое кодирование является одним из самых эффективных методов скрытия информации.

Метод расширенного спектра

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

Атаки на стегосистемы

Под атакой на стегосистему понимается попытка обнаружить, извлечь, изменить скрытое стеганографическое сообщение. Такие атаки называются стегоанализом по аналогии с криптоанализом для криптографии. Способность стеганографической системы противостоять атакам называется стеганографической стойкостью . Наиболее простая атака - субъективная. Внимательно рассматривается изображение, прослушивается звукозапись в попытках найти признаки существования в нём скрытого сообщения. Такая атака имеет успех лишь для совсем незащищенных стегосистем. Обычно это первый этап при вскрытии стегосистемы. Выделяются следующие типы атак.

  • Атака по известному заполненному контейнеру;
  • Атака по известному встроенному сообщению;
  • Атака на основе выбранного скрытого сообщения;
  • Адаптивная атака на основе выбранного скрытого сообщения;
  • Атака на основе выбранного заполненного контейнера;
  • Атака на основе известного пустого контейнера;
  • Атака на основе выбранного пустого контейнера;
  • Атака по известной математической модели контейнера.

Рассмотрим некоторые из них:

Атака по известному заполненному контейнеру - у взломщика имеется одно или несколько стего. В случае нескольких стего считается, что запись скрытой информации проводилось отправителем одинаковым способом. Задача взломщика заключается в обнаружении факта наличия стегоканала, а также доступа к нему или определения ключа. Имея ключ, можно раскрыть другие стегосообщения.

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

Атака на основе известного пустого контейнера - если злоумышленнику известен пустой контейнер, то сравнивая его с предполагаемым стего можно установить наличие стегоканала . Несмотря на кажущуюся простоту метода, существует теоретическое обоснование эффективности этого метода. Особый интерес представляет случай, когда контейнер нам известен с некоторой погрешностью (такое возможно при добавлении к нему шума).

Стеганография и цифровые водяные знаки

Для повышения устойчивости к искажениям часто применяют помехоустойчивое кодирование или используют широкополосные сигналы. Начальную обработку скрытого сообщения делает прекодер . Важная предварительная обработка ЦВЗ - вычисление его обобщенного Фурье-преобразования . Это повышает помехоустойчивость. Первичную обработку часто производят с использованием ключа - для повышения секретности. Потом водяной знак «укладывается» в контейнер (например, путем изменения младших значащих бит). Здесь используются особенности восприятия изображений человеком. Широко известно, что изображения имеют огромную психовизуальную избыточность. Глаза человека подобны низкочастотному фильтру, который пропускает мелкие элементы изображения. Наименее заметны искажения в высокочастотной области изображений. Внедрение ЦВЗ также должно учитывать свойства восприятия человека.

Во многих стегосистемах для записи и считывания ЦВЗ используется ключ. Он может предназначаться для ограниченного круга пользователей или же быть секретным. Например, ключ нужен в DVD -плейерах для возможности прочтения ими содержащихся на дисках ЦВЗ. Как известно, не существует таких стегосистем, в которых бы при считывании водяного знака требовалась другая информация, нежели при его записи. В стегодетекторе происходит обнаружение ЦВЗ в защищённом им файле, который, возможно, мог быть изменён. Эти изменения могут быть связаны с воздействиями ошибок в канале связи, либо преднамеренными помехами. В большинстве моделей стегосистем сигнал-контейнер можно рассмотреть как аддитивный шум. При этом задача обнаружения и считывания стегосообщения уже не представляет сложности, но не учитывает двух факторов: неслучайности сигнала контейнера и запросов по сохранению его качества. Учет этих параметров позволит строить более качественные стегосистемы. Для обнаружения факта существования водяного знака и его считывания используются специальные устройства - стегодетекторы. Для вынесения решения о наличии или отсутствии водяного знака используют, к примеру, расстояние по Хэммингу , взаимокорреляцию между полученным сигналом и его оригиналом. В случае отсутствия исходного сигнала в дело вступают более изощренные статистические методы, которые основаны на построении моделей исследуемого класса сигналов.

Применение стеганографии

В современных принтерах

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

Применение цифровой стеганографии

Из рамок цифровой стеганографии вышло наиболее востребованное легальное направление - встраивание цифровых водяных знаков (ЦВЗ) (watermarking), являющееся основой для систем защиты авторских прав и DRM (Digital rights management) систем. Методы этого направления настроены на встраивание скрытых маркеров, устойчивых к различным преобразованиям контейнера (атакам).

Полухрупкие и хрупкие ЦВЗ используются в качестве аналоговой ЭЦП , обеспечивая хранение информации о передаваемой подписи и попытках нарушения целостности контейнера (канала передачи данных).

Например, разработки Digimarc в виде плагинов к редактору Adobe Photoshop позволяют встроить в само изображение информацию об авторе. Однако такая метка неустойчива, впрочем как и абсолютное их большинство. Программа Stirmark, разработчиком которой является ученый Fabien Petitcolas, с успехом атакует подобные системы, разрушая стеговложения.

Предполагаемое использование террористами

Пример, показывающий то, как террористы могут использовать аватары для передачи скрытых сообщений. Эта картинка содержит в себе сообщение «Босс сказал, что мы должны взорвать мост в полночь.», зашифрованное с помощью http://mozaiq.org/encrypt с использованием сочетания символов «växjö» в качестве пароля.

Слухи о использовании стеганографии террористами появились с момента публикации в газете USA Today 5 февраля 2001 года двух статей - «Террористы прячут инструкции онлайн» и «Террористические группы прячутся за веб-шифрованием». 10 июля 2002 года в той же газете появилась статья «Боевики окутывают веб с помощью ссылок на джихад». В этой статье была опубликована информация о том, что террористы использовали фотографии на сайте eBay для передачи скрытых сообщений. Многие средства массовой информации перепечатывали данные сообщения, особенно после терактов 11 сентября , хотя подтверждения данной информации получено не было. Статьи в USA Today написал иностранный корреспондент Джек Келли, который был уволен в 2004 году после того, как выяснилось, что данная информация была сфабрикована. 30 октября 2001 года газета The New York Times опубликовала статью «Замаскированные сообщения террористов могут скрываться в киберпространстве». В статье было высказано предположение о том, что Аль-Каида использовала стеганографию для скрытия сообщений в изображениях, а затем передавала их по электронной почте и Usenet в целях подготовки терактов 11 сентября . В пособии по обучению террориста «Технологичный муджахид, учебное пособие для джихада » присутствует глава, посвященная использованию стеганографии.

Предполагаемое использование спецслужбами

  • Скандально известный греческий миллионер Аристотель Онассис несколько раз использовал при подписании контрактов ручку с симпатическими чернилами.
  • В фильме «Гений » главный герой - персонаж Александра Абдулова - обманывает милицию , написав признание симпатическими чернилами.

Ссылки

Программные реализации

  • OpenPuff: Двойная стеганография, Bmp , Jpeg , Png , Tga , Pcx , Aiff , Mp3 , Next, Wav , 3gp , Mp4 , Mpeg I , MPEG II , Vob , Flv , Pdf , Swf

Статьи

  • Обзор программ для поиска скрытых стеганографией материалов

Прочее

  • Стеганография (рус.) Иоганна Тритемия

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

1 . ОБЗОР СУЩЕСТВУЮЩИХ ПРОГРАММ И АЛГОРИТМОВ СКРЫТИЯ ИНФОРМАЦИИ В КОМПЬЮТЕРНЫХ ИЗОБРАЖЕНИЯХ

1.1 Алгоритмы скрытия информации в компьютерных изображениях

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

Методы и средства, с помощью которых можно скрыть факт наличияинформации, изучает стеганография (от греч. – тайнопись). Методы и способы внедрения скрытой информации в электронные объекты относятся к компьютерной стеганографии /7/.

Основными стеганографическими понятиями являются сообщениеиконтейнер. Сообщением m Î M , называют секретную информацию, наличие которой необходимо скрыть, где M – множество всех сообщений. Контейнером b Î B называют несекретную информацию, которую используют для сокрытия сообщений, где B – множество всех контейнеров. Пустой контейнер(контейнер-оригинал)это контейнер b , не содержащий сообщения, заполненный контейнер(контейнер-результат) b m – это контейнер b , содержащий сообщение m .

Стеганографическим преобразованием, принято называть зависимости F и F -1

F : M ´ B ´ K ® B , F -1 : B ´ K ® M , (1)

которые сопоставляют тройке (сообщение, пустой контейнер, ключ из множества K ) контейнер-результат, и паре (заполненный контейнер, ключ из множества K ) исходное сообщение, т.е.

F(m,b,k) = b m,k ,F -1 (b m,k) = m,где m Î M,b, b m Î B,k Î K. (2)

Стеганографической системой называют (F, F -1 , M, B, K) – совокупность сообщений, контейнеров и связывающих их преобразований.

Анализ применяемых на практике методов компьютерной стеганографии позволяет выд елить следующие основные классы:

1. Методы, основанные на наличии свободных участков в представлении/хранении данных.

2. Методы, основанные на избыточности представления/хранения данных.

3. Методы, основанные на применении специально разработанных форматов представления/хранения данных.

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

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

BMP c 24 или 32 битами на пиксель /5/.

Наиболее простым методом в этом случае является последовательная замена битами сообщения младших битов какого-либо цвета значения RGB или битов четности полных значений RGB . При внедрении сообщения в изображение могут использоваться как все 3 (или 4, где четвертый канал – канал прозрачности) цветовых канала каждого пикселя, так и какой-либо один канал. В последнем случае обычно используется канал синего цвета, так как к нему человеческий глаз наименее восприимчив. Естественно, такое небольшое изменение цвета человеческое зрение воспринять невозможно. Существуют модификации этого метода, которые получаются увеличением числа битов, внедряемых в один пиксель изображения. Преимуществом таких методов является повышение пропускной способности контейнера, возможность скрыть сообщение большего размера. Однако при этом довольно быстро повыш ается вероятность обнаружения передачи сообщения при визуальном или статистическом стегоанализе.

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

Стегоалгоритмы, использующие изображения формата BMP c 256-цветной палитрой /3/.

Рассмотрим наиболее типичный в этом случае алгоритм EzStego , получившему свое название от одноименной программы, в которой он был реализован.

EzStego сначала сортирует палитру так, чтобы минимизировать различия соседних цветов. После этого биты сообщения внедряются в НЗБ индексов цветов отсортированной палитры. Оригинал алгоритма EzStego внедряет биты последовательно, но также можно использовать и внедрение по псевдослучайному зависящему от пароля пути, генерируемому генератором псевдослучайных чисел. Опишем алгоритм более подробно.

Первоначально EzStego сортирует цвета палитры c 0 , c 1 , . . . , c P− 1 , P ≤ 256 в цикле c π (0) , c π (1) , . . . , c π (P− 1) , π (P ) = π (0) так, чтобы сумма расстояний была мала. В последнем выражении π – перестановка сортировки. Для получения итоговой перестановки может использоваться несколько вариантов, например, сортировка по значению компоненты яркости каждого пикселя или приблизительное решение задачи коммивояжера на графе, вершинами которого будут являться элементы палитры. Набор пар E , в которых цвета будут обменены друг на друга в процессе внедрения, будет

E = { (c π (0) , c π (1)), (c π (2) , c π (3)), . . . , (c π (P− 2) , c π (P− 1))}. (3)

Используя стегоключ (пароль) генерируется псевдослучайный путь по пикселям изображения. Для каждого пикселя на этом пути его цвет c π (k ) заменяется цветом c π (j ) , где j – индекс k , в котором его НЗБ заменен на бит сообщения. Данный этап повторяется до тех пор, пока все биты сообщения не оказываются внедрены или пока не будет достигнут конец файла изображения.

1.2 Программы для скрытия информации в компьютерных изображениях

Сейчас уже существует довольно большое количество программ, использующих стеганографию и компьютерные изображения в качестве контейнеров. Остановимся на некоторых из них, наиболее распространенных. Все эти программы в основном используют описанные выше алгоритмы, основанные на внедрении сообщения в НЗБ контейнера.

С помощью программы S - Tools (Steganography Tools ) (рисунок 1), имеющей статус freeware , можно спрятать информацию в графическом или звуковом файле. Причем графический файл после этого можно спокойно просмотреть, а звуковой – прослушать. Утилита не требует инсталляции, достаточно распаковать архив и запустить файл s - tools . exe . Архив программы занимает всего лишь порядка 280 KiB .

Рисунок 1 – Основное окно программы S - Tools

Технология работы программы такова, что шифруемые данные сначала сжимаются, а уже затем непосредственно шифруются. Программа может использовать несколько разных алгоритмов шифрования данных в зависимости от желания пользователя, включая одни из лучших алгоритмов – DES , который сегодня уже не удовлетворяет современным требованиям безопасности, Triple DES и IDEA . Последние два алгоритма обеспечивают высокий уровень защиты данных от дешифрования (до сих пор не было зарегистрировано ни одного случая дешифрования информации, зашифрованной с использованием данных методов).

Сам процесс шифрования информации очень прост: Для этого достаточно из проводника Windows перетащить графический или звуковой файл в окно программы. В правом нижнем углу программы появится информация о размере файла, который можно спрятать. На следующем этапе нужно перетащить файл с информацией на изображение, ввести пароль, выбрать вар иант шифрования и определить метод скрытия. Через некоторое время программа выдаст вторую картинку с условным именем hidden data ,

которая уже содержит скрытую информацию. Затем следует сохранить новую картинку с конк ретным именем и расширением gif или bmp , выбрав команду « Save as ».

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

Программа Steganos Security Suite (рисунок 2) также является довольно популярной программой, по качеству превосходящей S - Tools , однако не являющейся бесплатной. Данный программный продукт представляет собой универсальный набор средств, необходимых для защиты информации.

Рисунок 2 – Основное окно программы Steganos

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

шифровании какого-либо файла можно дополнительно к этому выбрать контейнер (изображение формата BMP , JPEG или аудиофайл WAV ), в который будет встроено предварительно сжатый и зашифрованный файл. Касательно формата BMP программа позволяет использовать изображения только в режиме True Color .

Программа Secur Engine (рисунок 3) позволяет как просто шифровать файлы с использованием криптографических методов, так и встраивать их в контейнеры форматов BMP , JPEG , WAV . Имеется возможность выбрать один из 6 алгоритмов шифрования, одним из которых является отечественный алгоритм ГОСТ.

Рисунок 3 – Основное окно программы Secur Engine

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

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