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