Открыть сервис

AES-CMAC

AES-CMAC (Cipher-based Message Authentication Code) — это алгоритм аутентификации сообщений, основанный на блочном шифре AES (Advanced Encryption Standard). Он используется для проверки целостности и подлинности данных, а также для предотвращения подделки сообщений. AES-CMAC является стандартизированным механизмом, определённым в спецификациях NIST SP 800-38B и RFC 4493, и применяется в различных протоколах безопасности, включая IEEE 802.1AE (MACsec), IPsec и Bluetooth.

История

Алгоритм CMAC (Cipher-based Message Authentication Code) был разработан как улучшение более раннего метода CBC-MAC (Cipher Block Chaining Message Authentication Code), который был уязвим для атак на основе подбора ключа при обработке сообщений переменной длины. В 2005 году Национальный институт стандартов и технологий США (NIST) опубликовал рекомендацию SP 800-38B, в которой описал три режима аутентификации на основе блочных шифров: CMAC, OMAC (One-Key CBC-MAC) и XCBC. Впоследствии CMAC, основанный на AES, был принят как стандарт для многих приложений.

В 2006 году инженер Cisco Systems Дэвид МакГрю опубликовал RFC 4493, который формализовал AES-CMAC для использования в протоколах интернета. С тех пор алгоритм широко внедрён в криптографические библиотеки, такие как OpenSSL, Bouncy Castle и Intel IPP.

Принцип работы

AES-CMAC генерирует код аутентификации сообщения (MAC) фиксированной длины (обычно 128 бит) на основе симметричного ключа AES. Алгоритм обрабатывает сообщение произвольной длины (включая пустое) и выдаёт тег, который может быть проверен получателем при наличии того же ключа.

Основные этапы

  1. Генерация подключа:
  • Из основного ключа AES вычисляются два вспомогательных ключа K1 и K2 с использованием операций сдвига и XOR с константой (для AES-128 — это 0x87). Эти ключи зависят от размера блока шифра (128 бит для AES).
  1. Обработка сообщения:
  • Сообщение разбивается на блоки по 128 бит. Если длина сообщения не кратна 128 битам, последний блок дополняется до полного размера с использованием битового заполнения (добавляется «1» и нули).
  • Для всех блоков, кроме последнего, применяется стандартная операция CBC-MAC: каждый блок XOR-ится с предыдущим результатом шифрования, после чего шифруется AES.
  • Последний блок обрабатывается особым образом: если сообщение было полным (кратно 128 битам), он XOR-ится с K1; если неполным — с K2. Затем результат шифруется AES.
  1. Вывод тега:
  • Результат шифрования последнего блока является кодом аутентификации (MAC).

Математическая форма

Для сообщения M, разбитого на блоки M1, M2, ..., Mn, и ключа K:

  • C0 = 0 (нулевой вектор инициализации)
  • Для i = 1 до n-1: Ci = AES_K(Ci-1 ⊕ Mi)
  • Если длина(Mn) = 128: Cn = AES_K(Cn-1 ⊕ Mn ⊕ K1)
  • Если длина(Mn) < 128: Mn' = Mn || 10...0 (дополнение), Cn = AES_K(Cn-1 ⊕ Mn' ⊕ K2)
  • MAC = Cn

Свойства

Криптографическая стойкость

AES-CMAC обладает следующими свойствами безопасности:

  • Устойчивость к подделке: злоумышленник, не знающий ключа, не может вычислить корректный MAC для нового сообщения с вероятностью, превышающей 2^(-128) (для AES-128).
  • Защита от атак на основе длины сообщения: использование двух разных ключей для полных и неполных блоков предотвращает атаки, возможные для CBC-MAC.
  • Эффективность: алгоритм требует только одного вызова AES на блок сообщения, что делает его быстрым на аппаратных ускорителях AES-NI.

Ограничения

  • AES-CMAC не обеспечивает шифрования данных — только аутентификацию.
  • При использовании с одним и тем же ключом для большого числа сообщений (более 2^64) теоретически возможны коллизии, хотя на практике это маловероятно.
  • Алгоритм не защищает от атак повторного воспроизведения (replay attacks) — для этого требуется дополнительный механизм, например, счётчик.

Применение

IEEE 802.1AE (MACsec)

AES-CMAC является обязательным алгоритмом для аутентификации кадров в стандарте MACsec, который обеспечивает безопасность на канальном уровне Ethernet. Каждый кадр Ethernet снабжается тегом MAC, вычисленным на основе ключа, установленного в процессе аутентификации (например, через 802.1X).

IPsec

В протоколе IPsec AES-CMAC используется как альтернатива HMAC-SHA для аутентификации пакетов. Он определён в RFC 4494 и RFC 4495 для ESP (Encapsulating Security Payload) и AH (Authentication Header). Преимущество — меньшая вычислительная нагрузка по сравнению с HMAC на устройствах с аппаратной поддержкой AES.

Bluetooth

В спецификации Bluetooth 4.0 и выше AES-CMAC применяется для генерации ключей и аутентификации в режиме Secure Simple Pairing (SSP) и LE Secure Connections. Он используется для вычисления подтверждающих значений (confirm values) в протоколе обмена ключами.

Другие применения

  • IEEE 802.11 (Wi-Fi): в стандарте WPA3 AES-CMAC используется для аутентификации кадров управления.
  • ZigBee: в сетях IoT для аутентификации сообщений.
  • Криптографические библиотеки: OpenSSL, GnuTLS, Bouncy Castle, libsodium.

Сравнение с другими алгоритмами

HMAC

HMAC (Hash-based Message Authentication Code) использует хеш-функции (например, SHA-256) и не требует аппаратной поддержки блочных шифров. AES-CMAC быстрее на процессорах с AES-NI, но HMAC может быть предпочтительнее в системах, где уже реализованы хеш-функции.

CBC-MAC

CBC-MAC — предшественник CMAC, который небезопасен для сообщений переменной длины. AES-CMAC устраняет эту уязвимость за счёт использования двух ключей (K1, K2).

Poly1305-AES

Poly1305-AES — другой аутентификационный код, использующий AES для генерации одноразовых ключей. Он быстрее AES-CMAC на программных реализациях, но менее распространён в стандартах.

Стандартизация

  • NIST SP 800-38B: рекомендация по режимам аутентификации на основе блочных шифров (2005).
  • RFC 4493: The AES-CMAC Algorithm (2006).
  • RFC 4494: The AES-CMAC-96 Algorithm (использование 96-битного MAC).
  • ISO/IEC 9797-1: международный стандарт для MAC-алгоритмов.

Реализация

Пример псевдокода для AES-CMAC (на основе RFC 4493):

``` function AES_CMAC(K, M): // K — 128-битный ключ AES // M — сообщение произвольной длины // Возвращает 128-битный MAC

K1, K2 = Generate_Subkeys(K) n = ceil(len(M) / 128) last_block_complete = (len(M) % 128 == 0)

C = 0 for i = 1 to n-1: C = AES_Encrypt(K, C XOR M[i])

if last_block_complete: C = AES_Encrypt(K, C XOR M[n] XOR K1) else: M[n] = Pad(M[n]) // дополнение 10... C = AES_Encrypt(K, C XOR M[n] XOR K2)

return C ```

Критика и ограничения

  • Зависимость от AES: алгоритм не может быть использован с другими блочными шифрами без модификации.
  • Отсутствие устойчивости к квантовым атакам: как и все классические симметричные алгоритмы, AES-CMAC уязвим к атакам с использованием квантового компьютера (алгоритм Гровера), хотя для 128-битного ключа это требует 2^64 операций.
  • Патентные ограничения: алгоритм OMAC, на котором основан CMAC, был запатентован, но NIST рекомендовал его как свободный от патентных претензий для использования в стандартах.

Источники

  • NIST Special Publication 800-38B: Recommendation for Block Cipher Modes of Operation: The CMAC Mode for Authentication (2005)
  • RFC 4493: The AES-CMAC Algorithm (2006)
  • RFC 4494: The AES-CMAC-96 Algorithm and Its Use with IPsec (2006)
  • IEEE Standard 802.1AE-2018: MAC Security (MACsec)
  • Bluetooth Core Specification, Version 5.0 (2016)
  • ISO/IEC 9797-1:2011: Information technology — Security techniques — Message Authentication Codes (MACs)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →