Вопрос или проблема
Какой размер вектора инициализации (IV) необходим для шифрования AES? Я использую режимы CCM или GCM.
–> для GCM я видел в интернете, что это 12 байт, пожалуйста, поправьте меня
–> я не смог найти, какой размер для CCM
Требования к IV/nonce описаны в Специальной публикации NIST 800-38D (GCM) и Специальной публикации NIST 800-38C (CCM).
Для GCM длина IV должна быть кратна 8 и соответствовать следующему условию: 1 ≤ len(IV) ≤ 264 − 1. Поскольку не каждая реализация может поддерживать каждую возможную длину, NIST рекомендует выбирать длину 96 бит.
Для CCM длина nonce зависит от так называемой функции форматирования, которая превращает полезную нагрузку, nonce и связанные данные в последовательность блоков. В приложении A связанного документа есть пример функции форматирования, которая требует, чтобы длина nonce была кратна 8 и находилась в пределах от 56 до 104. Другие реализации могут иметь другие требования.
Да, для GCM оптимальный размер IV составляет 12 байт, что позволяет использовать внутреннее значение счетчика в 4 байта.
CCM сочетает режим CTR с CBC-MAC для аутентификации. Однако у CCM есть требования к IV, отличные от шифрования в режиме CTR. В частности, IV для CCM должен быть от 7 до 13 байт, оставляя 2-8 байт для счетчика и 1 байт для флагов.
Случайный IV размером 12 байт был бы разумным выбором, что снижает риск коллизий nonce, оставляя при этом достаточно места для счетчика для шифрования больших сообщений.
Ответ или решение
Для шифрования с использованием AES в режиме CCM (Counter with Cipher Block Chaining Message Authentication Code) размер инициализационного вектора (IV) имеет определённые требования. В отличие от GCM, для которого оптимальный размер IV составляет 12 байтов, требования к размеру IV для CCM немного отличаются.
Согласно стандарту NIST SP 800-38C, длина nonce (или IV) в режиме CCM должна составлять от 7 до 13 байтов. Это связано с тем, что часть отведённой длины используется для подсчёта, а именно:
– Минимально 7 байтов IV обеспечивают достаточно место для случайности и одновременно оставляют пространство для внутреннего счетчика.
– Максимально 13 байтов IV обеспечивают больший размер для случайного значения.
Следует обратить внимание, что CCM использует комбинированный подход, совмещая режим CTR для шифрования и CBC-MAC для аутентификации. Таким образом, оставшаяся длина IV будет использоваться для счётчика, который необходим для шифрования блока сообщения.
Рекомендуется использовать IV длиной 12 байтов, что достаточно для уменьшения риска коллизий в значениях nonce и обеспечивает достаточный запас для счётчика при шифровании больших сообщений.
В итоге, для режима CCM лучше всего использовать IV длиной от 7 до 13 байтов, и 12 байтов является разумным выбором, который сбалансирован между безопасностью и функциональностью.