Стеганография. Методы сокрытия сообщения в контейнере изображения
В настоящее время, темой номер один в компаниях стала кибербезопасность. Принимаются стратегические и инфраструктурные меры по обеспечению безопасности при работе с данными. В связи с этим, невозможно обойти стороной такую важную тему в кибербезопасности, как криптография и стеганография.
Криптография – это совокупность методов для шифрования передаваемого сообщения. Однако, существует метод скрытия самого факта наличия, скрытого в отправляемом сообщении. Этим занимается стеганография.
Существует множество секретных средств связи, которые можно отнести к методам стенографии, от достаточно древних (невидимые чернила, особое расположение знаков в письме, узелки на нитках, надписи на боковой стороне колоды карт или внутри варёного яйца, тайные каналы передачи) до современных, используемых в, так называемой, компьютерной стеганографии (метод наименьшее значащего бита, метод Куттера-Джордана-Боссена, алгоритм Брайндокса или Коха и так далее). В этой статье мы рассмотрим метод наименьшее значащего бита или Least Significant Bit method (LSB).
Для понимания происходящего, нам понадобится ввести некоторые определения.
Контейнер в стеганографии – это не секретные данные, используемые для сокрытия сообщения. Например, изображения, аудиофайлы, видеофайлы, текстовые документы и прочие мультимедиа файлы.
Сообщение – это секретная информация, скрываемая внутри контейнера.
Ключ – информация (как правило, секретная), необходимая для получения способа сокрытия и извлечения сообщения из контейнера. Ключ известен только санкционированному пользователю системы, без ключа получение сообщения невозможно.
Пустой контейнер – контейнер, не содержащий записанной в него информации. Соответственно, стего контейнер (или заполненный контейнер) – это контейнер, внутри которого содержится сообщение.
Стегосистема – это совокупность средств и методов, осуществляющих внедрение сообщения внутрь контейнера, а также извлечение этого сообщения из контейнера.
Данный алгоритм заменяет наименее значимый бит в нескольких байтах файла-носителя, чтобы скрыть последовательность байтов, содержащих скрытые данные. Для человека подобные изменения визуально неотличимы, что позволяет передавать скрытые сообщения в безобидном, на первый взгляд, изображении.
Теперь, когда у нас есть базовое понимание принципов организации стегосистемы и работы алгоритма LSB, рассмотрим один из способов распознавания факта передачи информации в изображении. Основным инструментом будет Python, библиотеки numpy, matplotlib, pillow и openCV.
Для начала, импортируем необходимые библиотеки.
Прочитаем тестовое изображение, скопируем его и сформируем изображение той же размерности, что исходное.
Далее приступим к написанию основной распознающей функции.
Исходный код, написанный на языке python можно найти в открытом доступе [на GitHub](https://www.github.com/ekertn7/stego «Checking a stego container in an image»).
Происходит побитовая проверка каждого пикселя изображения в разделенных каналах (R, G, B). Проверка выполняется по наименьшему значащему биту. В случае, если он равен единице, осуществляется закраска пикселя изображения черным цветом. Таким образом, на каждом канале изображения формируется шум, в случае наличия скрытого сообщения в контейнере изображения, зашифрованные участки будут визуально выделяться в одном или нескольких каналах. На изображении появятся неравномерные области наложения шума.
Наглядно работа алгоритма видна на представленных примерах изображений — в первом случае изображение не содержит стего контейнер и виден лишь наложенный шум, во втором же случае, проявляются отличительные признаки стего контейнера – неравномерные области наложения шума в каждом из трех каналов.
Первый случай, стего контейнер отсутствует:
Второй случай, стего контейнер присутствует, видны неравномерные области наложения шума:
Данный метод не является универсальным, однако он с высокой эффективностью позволяет обнаруживать LSB стеганографию в изображениях, что может быть полезно для быстрой проверки на наличие заполненного контейнера в передаваемых файлах. Знание и применение данного метода проверки может помочь при улучшении уровня кибербезопасности и позволит предотвратить возможные случаи утечки данных.