Режим CCM ( счетчик с кодом аутентификации сообщения цепочки блоков шифра ; счетчик с CBC-MAC ) — это режим работы для криптографических блочных шифров . Это аутентифицированный алгоритм шифрования, разработанный для обеспечения как аутентификации , так и конфиденциальности . Режим CCM определен только для блочных шифров с длиной блока 128 бит. [1] [2]
Случайный номер CCM должен быть тщательно выбран, чтобы никогда не использоваться более одного раза для данного ключа . Это связано с тем, что CCM является режимом вывода счетчика (CTR) , а последний фактически является потоковым шифром . [3]
Как следует из названия, режим CCM объединяет режим счетчика (CTR) для конфиденциальности с кодом аутентификации сообщений цепочки блоков шифра (CBC-MAC) для аутентификации. Эти два примитива применяются в манере «аутентификация-затем-шифрование»: CBC-MAC сначала вычисляется для сообщения, чтобы получить код аутентификации сообщения (MAC) , затем сообщение и MAC шифруются с использованием режима счетчика. Главное понимание заключается в том, что один и тот же ключ шифрования может использоваться для обоих, при условии, что значения счетчика, используемые при шифровании, не конфликтуют с (предварительным) вектором инициализации, используемым при аутентификации. Для этой комбинации существует доказательство безопасности [4] , основанное на безопасности базового блочного шифра. Доказательство также применимо к обобщению CCM для любого размера блока и для любого размера криптографически сильной псевдослучайной функции (поскольку как в режиме счетчика, так и в CBC-MAC блочный шифр используется только в одном направлении).
Режим CCM был разработан Рассом Хаусли, Дугом Уайтингом и Нильсом Фергюсоном . Во время разработки режима CCM Расс Хаусли работал в RSA Laboratories .
Небольшая вариация CCM, называемая CCM*, используется в стандарте Zigbee . CCM* включает в себя все функции CCM. Он позволяет выбирать длину MAC вплоть до 0 (что отключает аутентификацию и становится только шифрованием). [5]
CCM требует двух операций шифрования блочным шифром для каждого блока зашифрованного и аутентифицированного сообщения и одной операции шифрования для каждого блока связанных аутентифицированных данных.
Согласно тестам Crypto++ , AES CCM требует 28,6 циклов на байт на процессоре Intel Core 2 в 32-битном режиме. [6]
Заметные недостатки:
Катализатором разработки режима CCM стало представление режима offset codebook (OCB) для включения в стандарт IEEE 802.11i . Было высказано противодействие включению режима OCB из-за ожидающей подачи патентной заявки на алгоритм . Включение запатентованного алгоритма означало значительные лицензионные осложнения для реализаторов стандарта.
Хотя включение режима OCB оспаривалось на основе этих вопросов интеллектуальной собственности , было решено, что упрощение, предоставляемое аутентифицированной системой шифрования, было желательным. Поэтому Хаусли и др. разработали режим CCM как потенциальную альтернативу, не обремененную патентами.
Несмотря на то, что режим CCM менее эффективен, чем режим OCB, решение без патента было предпочтительнее, чем решение, осложненное проблемами лицензирования патентов. Поэтому режим CCM стал обязательным компонентом стандарта IEEE 802.11i, а режим OCB был понижен до статуса необязательного компонента, прежде чем в конечном итоге был полностью удален.
Режим CCM используется в IEEE 802.11i (как CCMP , протокол шифрования CCM для WPA2 ), IPsec , [7] и TLS 1.2, [8] , а также Bluetooth Low Energy (начиная с Bluetooth 4.0 ). [9] Он доступен для TLS 1.3, но не включен по умолчанию в OpenSSL . [10]
AES CCM использует режим счетчика для шифрования. Как и в случае с любым потоковым шифром, повторное использование того же значения IV с тем же ключом катастрофично.