Почему ECB протекает: режимы блочных шифров
Настоящий AES шифрует изображение тремя способами. В ECB картинка переживает шифрование; в CBC и CTR превращается в шум.
Каждый пиксель занимает 4 байта, поэтому один блок AES вмещает 4 пикселя, а вся картинка — это 4096 блоков. Различных среди них всего несколько сотен, и ECB каждый раз переводит одинаковый блок в один и тот же блок шифртекста: разных блоков снова столько же, поэтому контур сохраняется. Нажмите «Новый ключ»: цвета ECB меняются, форма — нет.
На что обратить внимание
- Сам AES здесь ни при чём. ECB протекает, потому что одинаковые 16-байтовые блоки всегда дают одинаковые блоки шифртекста, и большие однородные области сохраняют форму.
- CBC скрывает узор, сцепляя каждый блок со следующим; CTR делает XOR с ключевым потоком. Обоим нужен свежий IV или nonce для каждого сообщения.
- Ни один из этих режимов не обнаруживает подмену. На практике используйте AEAD, например AES-GCM или ChaCha20-Poly1305.