В реальных ситуациях, за исключением совместимости с существующими системами, редко следует напрямую использовать какой-либо из режимов шифрования, перечисленных в вопросе, потому что они в лучшем случае обеспечивают безопасное шифрование (предостережение: ECB не обеспечивает), что не нет удовлетворить потребности большинства реальных жизненных ситуаций.
В реальных приложениях, если требуется шифрование, также обычно необходимо предотвратить необнаруженное изменение сообщения (например, удаление его части, изменение сегмента). Таким образом, необходим режим, обеспечивающий шифрование и аутентификация¹, например ГКМ в сочетании с блочным шифром АЕС. Он достаточно быстр для «видеочатов» с современным процессором и достаточно прост для «отправки данных с помощью микроконтроллера».
Такой аутентифицированное шифрование режим часто будет внутренне использовать один из режимов вопроса для шифрования, которое он обеспечивает, например. GCM использует CTR.ECB/CBC/CFB/OFB, как правило, постепенно отказываются от CTR, потому что CTR прост, быстр, легко распараллеливается и обеспечивает прямой доступ для чтения/изменения/записи к большим файлам без повторного шифрования того, что следует. Это только недостатки
- Податливость², но это полностью решается аутентифицированным шифрованием.
- Чувствительность к повторному использованию Вектор инициализации/одноразовый номер. Это можно смягчить с помощью хороших процедур для создания IV или аутентифицированных режимов шифрования с защитой от неправомерного использования, таких как ГКМ-СИВ.
Для «хранения паролей» мы часто не хотим использовать шифрование, которое подразумевает возможность расшифровки, когда мы часто можем жить с системой, которая никогда не требует расшифровки паролей и, следовательно, менее уязвима для утечек данных (есть некоторые исключения). как менеджеры паролей). Что касается паролей, первым выбором является безопасное оборудование, предназначенное для хранения паролей. Второй вариант — сохранить на диске результат преднамеренно медленной и соленой хеш-функции пароля, например Аргон2. Последний вариант — аутентифицированное шифрование пароля. Обратите внимание, что аутентификация имеет значение: только с шифрованием нужно опасаться, что кто-то с доступом для чтения/записи к зашифрованным паролям может сбросить пароль пользователя на известный без ключа, если он знает пароль другого пользователя.
¹ В том смысле, что расшифрованный открытый текст точно соответствует открытому тексту, который был зашифрован с помощью ключа шифрования, что делает его аутентичным.
² В смысле разрешения изменять значение расшифрованного открытого текста для известного открытого текста, например. изменение заплатить 1000 долларов
к заплатить 9800 долларов
. Режимы CBC или CFB затрудняют такую атаку, но не обеспечивают полное аутентифицированное шифрование.