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)
А также определим дополнительные условия:
- Ключ -
00112233445566778899AABBCCDDEEFF, при необходимости уменьшается или расширяется дублированием до нужной длины блока - Padding - Заполнение нулями, пока буфер не будет кратен длине блока (это условие ECB)
Теперь необходимо перевести изображение из PNG в PPM (Формат представляет из себя ASCII заголовок и последовательность из трёхбайтовых RGB пикселей), сделано это было с помощью ImageMagick (с помощью команды convert)
Далее с помощью hex-редактора отделяем ASCII заголовок от самого изображения и сохраняем обе части по отдельности:
- Шифруем изображение с помощью одного из алгоритмов
- Присоединяем заголовок к шифрованному изображению
- Переводим PPM в PNG
Результаты
В результате "прогона" изображения через все алгоритмы я получил, следующие изображения:
Эксперимент наглядно подтвердил, почему от режима ECB стоит полностью отказаться. Этот режим допускает утечку паттернов (статистических особенностей) исходных данных, позволяя распознать структуру сообщения даже в зашифрованном виде