Почему блочные шифры в основном используются как потоковые шифры?
Режим CTR не нуждается в дополнении, как в режиме CBC, который на протяжении многих лет вызывал множество атак, известных как атака оракула заполнения. [1] [2]. В заключение, CBC удален из TLS, TLS 1.3 поддерживает только шифры режима CTR. (rfc 8446).
+------------------------------+--------------+
| Описание | Значение |
+------------------------------+--------------+
| TLS_AES_128_GCM_SHA256 | {0x13,0x01} |
| | |
| TLS_AES_256_GCM_SHA384 | {0x13,0x02} |
| | |
| TLS_CHACHA20_POLY1305_SHA256 | {0x13,0x03} |
| | |
| TLS_AES_128_CCM_SHA256 | {0x13,0x04} |
| | |
| TLS_AES_128_CCM_8_SHA256 | {0x13,0x05} |
+------------------------------+--------------+
Атаки и решение TLS увеличили использование режима CTR. Помните, что почти вся интернет-безопасность основана на TLS. Согласно опросу SSLlabs, 46,6% сайтов принимают TLS 1.3 ( Поддержка протокола )
Ни режим CTR, ни CBC, ни CFB (все режимы работы с архивами) не имеют MAC по своей конструкции. Чтобы иметь Mac, используйте HMAC или GCM, CCM, Poly1305 и т. д.
Если говорить о моде, то теоретически CBC и CTR могут обеспечить только Ind-CPA. Помимо этого требуется целостность для Ind-CCAx. С другой стороны, аутентифицированное шифрование (GCM, CCM, Poly1305) обеспечивает большую безопасность, чем Ind-CCAx,
Разве это не уменьшает эффективный размер блока алгоритма до 1 бита, поскольку один бит отображается на другой бит в зависимости от битов ключевого потока?
Что ж, если вы используете CBC и применяете заполнение, то вы выполняете больше действий, чем отбрасываете ненужные биты блока. В обоих случаях количество зашифрованных блоков почти одинаково (за исключением того, что если блок полный, то для PKCS#7 нужен дополнительный блок). Затем применяются дополнительные функции заполнения и распаковки. Режим CTR требует x-или потока.
Как отмечалось в комментариях, режим CTR хорошо распараллеливается, даже допускает произвольный доступ или предварительную синхронизацию потока. Приведенные ниже характеристики OpenSLL на моей машине
скорость openssl -evp aes-128-cbc aes-128-ctr
тип |
16 байт |
64 байта |
256 байт |
1024 байта |
8192 байта |
16384 байта |
aes-128-cbc |
818912.47k |
1365115.22k |
1404590.75k |
1409671.85k |
1410523.14k |
1411497.98k |
aes-128-ctr |
561928.57k |
1899517.87k |
3908505.17k |
5220669.78k |
5835377.32k |
5876869.80k |
Как мы видим, за исключением очень коротких сообщений, CTR превосходит CBC в AES-NI.
Не было бы предпочтительнее сохранить размер блока шифра?
Нет
Нам приходится иметь дело с отступами и проблемами с их небезопасностью, почему бы вообще не удалить их, когда у нас есть режим CTR.
Это также увеличивает размер данных максимум на 16 байтов для AES.
Режим CTR по своей конструкции использует PRF вместо PRP (блочные шифры — это PRP), что обеспечивает более широкий спектр используемых функций — так же, как мы используем ChaCha20. В режиме CBC мы должны использовать PRP.
Конечно, нет ничего идеального! У каждого режима есть свои плюсы и минусы. В зависимости от контекста можно предпочесть одно другому. По здравому смыслу в современной криптографии мы предпочитаем аутентифицированные режимы шифрования, такие как AES-GCM (вероятно, с SIV) и ChaCha20-Poly1305 (лучше xChaCha20-1305 для 192-битных одноразовых номеров).