Иногда лучший способ поделиться конфиденциальной информацией - это скрыть ее у всех на виду.

Это цель стеганографии.

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

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

Слово стеганография происходит от нового латинского слова steganographia, которое объединяет греческие слова steganós, что означает «скрытый или скрытый», и -graphia, что означает « пишу."

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

Почему стеганография?

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

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

Поскольку на вашем компьютере, вероятно, множество изображений, почему бы не использовать их, чтобы скрыть данные, не влияя на изображения и не вызывая подозрений?

Как реализуется стеганография?

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

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

LSB, что означает младший значащий бит, является наиболее широко используемым. Этот метод изменяет последние несколько бит в байте для кодирования сообщения, что особенно полезно в чем-то вроде изображения, где значения красного, зеленого и синего каждого пикселя представлены восемью битами (одним байтом) в диапазоне от 0 до 255 в десятичном формате или от 00000000 до 11111111 в двоичном.

Изменение последних двух бит в полностью красном пикселе с 11111111 на 11111101 только изменяет значение красного с 255 на 253, что невооруженным глазом создает почти незаметное изменение цвета, но все же позволяет нам кодировать данные внутри изображения.

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

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

По этой причине существует множество других методов стеганографии, каждый из которых имеет свои преимущества и недостатки.

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

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

Эффективное использование стеганографии

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

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

Этот модуль повышает безопасность стеганографии за счет шифрования данных. Скрытые данные зашифровываются с использованием шифрования AES -256, популярного алгоритма, используемого в криптографии с симметричным ключом. AES был принят правительством США и теперь используется во всем мире.

Прорыв AES-256, который имеет длину ключа 256 бит, требует в 2128 раз большей вычислительной мощности, чем 128-битный ключ. Для пятидесяти суперкомпьютеров, способных проверять миллиард миллиардов (10 ^ 18) ключей AES в секунду (если такое устройство когда-либо будет создано), теоретически потребуется около 3 × 1051 года, чтобы исчерпать 256-битное пространство ключей.

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

Встраивать скрытые данные в изображение

Использовать Криптостеганографию очень просто. Модуль можно использовать как библиотеку внутри программы Python или как программу командной строки оболочки.

У вас должен быть установлен pip, установщик пакетов Python, что можно сделать, следуя этим инструкциям. Обратите внимание, что в большинстве современных систем Linux Python и pip по умолчанию устанавливаются вместе с ОС.

После этого выполните следующую команду для установки Криптостеганографии из терминала:

pip3 install cryptosteganography

После его установки вы можете проверить, как его использовать, передав аргумент -h или — help.

$ cryptosteganography -h
usage: cryptosteganography [-h] {save,retrieve} ...

A python steganography script that save/retrieve a text/file (AES 256
encrypted) inside an image.

positional arguments:
  {save,retrieve}  sub-command help
    save           save help
    retrieve       retrieve help

optional arguments:
  -h, --help       show this help message and exitThe arguments are broken down as follows:

Например, чтобы вставить данные в изображение, введите команду ниже.

$ cryptosteganography save -i vin-and-orion.png -m "My secret message..." -o output.png
Enter the key password:

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

Чтобы получить скрытые данные из стеганографического изображения, вы можете запустить…

$ cryptosteganography retrieve -i output.png
Enter the key password:
My secret message...

… И введите тот же пароль.

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

Записка любопытства

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

Загадка остается нерешенной.

Примечание. Такие службы, как GitHub и другие, обычно сжимают и / или перекодируют исходное изображение после загрузки пользователем, что может привести к повреждению скрытой информации и невозможности ее восстановления. В этом конкретном примере я обнаружил, что если вы загружаете изображение с точным размером и стандартом кодирования, которые GitHub использует для исходного изображения (изображение обслуживается без каких-либо аргументов запроса URL, таких как s, u и v), система сохранит изображение как есть, без каких-либо изменений. Вот почему это изображение в головоломке до сих пор содержит информацию в зашифрованном виде.

использованная литература