ECB используется везде и постоянно. Это необработанный примитив cryptographi c, который является перестановкой AES. Сам по себе это небезопасно, поскольку один и тот же ввод всегда дает один и тот же вывод. Все алгоритмы, такие как CB C, CTR и GCM, используют ECB внутри.
CB C использует заполнение, чтобы сделать сообщение точным числом блоков шифрования. Это означает, что наблюдатель не знает точной длины сообщения, не расшифровав его. Большинство других схем пропускают длину сообщения. Использование padding делает уязвимыми для атак типа padding oracle. Атаки с заполнением oracle могут быть заблокированы с помощью кодов аутентификации сообщений (MAC), которые подтверждают, что данный зашифрованный текст является аутентификационным c. Вы не можете выполнить атаку заполнения oracle без изменения зашифрованного текста, и MA C предотвращает это.
CTR шифрует счетчик блоков и выполняет XOR с эквивалентным блоком сообщения. Это означает, что вы можете получить доступ к любой части обычного текста, не расшифровывая все сообщение. Однако он чрезвычайно уязвим для повторного использования IV (вектора инициализации).
GCM - это быстрый способ исправить протокол сообщений, который забыл включить правильный MA C. Он построен на CTR и разделяет его особенности. MA C составляет всего 128 бит, тогда как обычно требуется 256 бит. MA C также проверяется после обработки всего сообщения, что означает, что разработчики часто обрабатывают сообщение до его проверки, что еще больше снижает эффективность GCM.
OFB - это способ использования CB C аппаратное обеспечение для выполнения потокового шифрования и подобное CTR особенно уязвимо для повторяющихся IV и является слабым при использовании с частичной обратной связью по блоку.
CFB не имеет хорошо известных уязвимостей. Тем не менее, он показывает длину сообщения, и хотя повторяющиеся IV не столь уж катастрофичны c, их все же нужно избегать.
Какой режим шифрования использовать, где это вопрос соответствия причуд и требований, но если бы мне пришлось порекомендовать конкретный, я бы сказал:
- Используйте CFB
- Включите MA C зашифрованного текста в свой протокол, например HMA C с SHA512 /256.