Криптография
Today

The ECB Penguin

Суть такова

Данное изображение стало культовым в криптографическом и InfoSec сообществе. Речь идёт о картинке маскота Linux - пингвине Tux, которую зашифровали с помощью блочного шифра в ECB режиме ("Режим простой замены" в терминологии ГОСТ), однако контуры оригинального изображения остались видны. История этого изображения описана в статье Filippo Valsorda, в данной же статье будут результаты моего повторения данного эксперимента, но с разными блочными шифрами

Эксперимент

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

Исходное изображение

Теперь определимся с шифрами:

  • AES
  • BelT - белорусский стандарт шифрования (описан в СТБ 34.101.31)
  • DES
  • Калина - украинский стандарт шифрования (описан в ДСТУ 7624:2014)
  • Кузнечик - российский стандарт шифрования (описан в ГОСТ Р 34.12-2015)
  • Магма - российский и советский стандарт шифрования (описан в ГОСТ Р 34.12-2015, а также ГОСТ 28147-89)
  • SM4 - китайский стандарт шифрования (описан GB/T 32907-2016)

А также определим дополнительные условия:

  1. Ключ - 00112233445566778899AABBCCDDEEFF , при необходимости уменьшается или расширяется дублированием до нужной длины блока
  2. Padding - Заполнение нулями, пока буфер не будет кратен длине блока (это условие ECB)

Теперь необходимо перевести изображение из PNG в PPM (Формат представляет из себя ASCII заголовок и последовательность из трёхбайтовых RGB пикселей), сделано это было с помощью ImageMagick (с помощью команды convert)

Далее с помощью hex-редактора отделяем ASCII заголовок от самого изображения и сохраняем обе части по отдельности:

Файл .ppm в hex-редакторе

Далее порядок действий таков:

  1. Шифруем изображение с помощью одного из алгоритмов
  2. Присоединяем заголовок к шифрованному изображению
  3. Переводим PPM в PNG

Результаты

В результате "прогона" изображения через все алгоритмы я получил, следующие изображения:

AES:

BelT:

DES:

Калина:

Кузнечик:

Магма:

SM4:

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