Время прочтения: 4 мин.

Криптография – это совокупность методов для шифрования передаваемого сообщения. Однако, существует метод скрытия самого факта наличия, скрытого в отправляемом сообщении. Этим занимается стеганография.

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

В этой статье мы рассмотрим метод наименьшее значащего бита или Least Significant Bit method (LSB).

Для понимания происходящего, нам понадобится ввести некоторые определения.

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

Сообщение – это секретная информация, скрываемая внутри контейнера.

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

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

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

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

Теперь, когда у нас есть базовое понимание принципов организации стегосистемы и работы алгоритма LSB, рассмотрим один из способов распознавания факта передачи информации в изображении. Основным инструментом будет Python, библиотеки numpy, matplotlib, pillow и openCV.

Для начала, импортируем необходимые библиотеки:

```
import numpy as np
import matplotlib.image as img
import matplotlib.pyplot as plt
from PIL import Image
import cv2
```

Прочитаем тестовое изображение, скопируем его и сформируем изображение той же размерности, что исходное:

```
image_name = "test1"
image = img.imread("images/" + image_name + ".jpg")
image_check = np.copy(image)
image[0, 0]
```

Далее приступим к написанию основной распознающей функции:

```
def check_lsb_channel(input_im, channel):
    output_im = np.copy(input_im)
    for x in range(0, input_im.shape[0]):
        for y in range(0, input_im.shape[1]):
            r = input_im[x,y][0]
            g = input_im[x,y][1]
            b = input_im[x,y][2]

            rgb = (r, g, b)
      
            binary = '{0:b}'.format(rgb[channel])
            if(list(str(binary))[-1] == '1'):
                output_im[x,y] = (0, 0, 0)

    return output_im
```

Исходный код, написанный на языке python можно найти в открытом доступе на GitHub «Checking a stego container in an image».

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

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

Первый случай, стего контейнер отсутствует:

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

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