CMAC
CMAC (Cipher-based Message Authentication Code) — это алгоритм выработки имитовставки (кода аутентификации сообщения), основанный на блочном симметричном шифре. CMAC используется для обеспечения целостности и подлинности данных, позволяя обнаружить случайные или преднамеренные изменения сообщения. Алгоритм стандартизирован в ряде международных и национальных стандартов, включая NIST SP 800-38B (США) и ISO/IEC 9797-1 (международный). В российской криптографической практике аналогом CMAC является режим выработки имитовставки, определённый в ГОСТ Р 34.13-2015 (режим «Простая замена с зацеплением» или «Имитовставка»).
История
Разработка CMAC была мотивирована необходимостью создания более надёжного и универсального метода аутентификации сообщений на основе блочных шифров, чем существовавшие ранее алгоритмы, такие как CBC-MAC (Cipher Block Chaining Message Authentication Code). CBC-MAC страдал от ряда уязвимостей, в частности, для сообщений переменной длины требовались специальные меры предосторожности, иначе алгоритм становился небезопасным.
В начале 2000-х годов криптографы Тосио Ивата и Кайсукэ Куросава предложили усовершенствованный вариант, названный OMAC (One-Key CBC-MAC). OMAC требовал только один ключ шифрования и устранял недостатки CBC-MAC. Позднее алгоритм был доработан и стандартизирован как CMAC. В 2005 году Национальный институт стандартов и технологий США (NIST) опубликовал рекомендацию SP 800-38B, описывающую три режима аутентификации: CMAC, CCM (Counter with CBC-MAC) и GCM (Galois/Counter Mode). CMAC стал одним из базовых строительных блоков для многих протоколов безопасности, включая TLS, IPsec и SSH.
Принцип работы
CMAC основан на блочном шифре (например, AES, 3DES, ГОСТ 28147-89, «Кузнечик»). Алгоритм обрабатывает сообщение блоками фиксированной длины (обычно 128 или 64 бита) и вырабатывает имитовставку фиксированной длины (обычно равной длине блока шифра, но может быть усечена).
Основные этапы
- Генерация подключей. На основе секретного ключа шифрования K вычисляются два вспомогательных подключа K1 и K2. Для этого сначала шифруется нулевой блок (все биты равны нулю) на ключе K, получая промежуточное значение L. Затем L умножается на константу в поле Галуа GF(2^n) (где n — длина блока в битах) для получения K1, а K1 — на ту же константу для получения K2. Конкретные константы и операции зависят от длины блока (например, для 128-битного блока используется константа 0x87, для 64-битного — 0x1B).
- Разбиение сообщения. Сообщение разбивается на блоки M1, M2, ..., Mn, где n — количество блоков. Если длина последнего блока меньше длины блока шифра, к нему добавляется единичный бит (1) и необходимое количество нулевых битов (padding). Если последний блок полный, дополнение не выполняется.
- Обработка блоков. Обработка выполняется по схеме CBC (Cipher Block Chaining):
- Первый блок M1 шифруется на ключе K, результат обозначается как C1.
- Для каждого следующего блока Mi (i от 2 до n-1) выполняется операция XOR с предыдущим зашифрованным блоком Ci-1, затем результат шифруется на ключе K, получая Ci.
- Для последнего блока Mn применяется модификация: если блок был дополнен, то перед XOR с предыдущим зашифрованным блоком C(n-1) к нему применяется XOR с подключом K2; если блок не дополнялся (полный), то используется подключ K1. Затем результат шифруется на ключе K.
- Формирование имитовставки. Результат шифрования последнего блока (Cn) является полной имитовставкой. При необходимости она может быть усечена до требуемой длины (например, до 64 бит для AES-128).
Ключевые особенности
- Одноключевая схема: Для выработки и проверки имитовставки используется один и тот же секретный ключ K.
- Устойчивость к атакам: CMAC защищён от атак на основе коллизий и удлинения сообщения, которым был подвержен классический CBC-MAC.
- Гибкость: Может работать с сообщениями любой длины, включая пустые (в этом случае обрабатывается только один дополненный блок).
Применение
CMAC широко используется в различных криптографических протоколах и системах:
- Протоколы безопасности: TLS (Transport Layer Security) для аутентификации записей, IPsec (Internet Protocol Security) для проверки целостности пакетов, SSH (Secure Shell) для аутентификации сообщений.
- Стандарты беспроводной связи: IEEE 802.11 (Wi-Fi) использует CMAC на основе AES для защиты управляющих кадров (AES-CMAC). IEEE 802.15.4 (ZigBee, Thread) применяет CMAC для аутентификации данных.
- Хранение данных: В системах шифрования дисков (например, BitLocker) CMAC может использоваться для проверки целостности зашифрованных секторов.
- Финансовые технологии: В стандартах EMV (Europay, Mastercard, Visa) для аутентификации транзакций.
- Криптографические API: Многие библиотеки (OpenSSL, Bouncy Castle, Crypto++ и др.) предоставляют реализацию CMAC.
Сравнение с другими алгоритмами
CMAC vs HMAC
- Основа: CMAC основан на блочном шифре, HMAC — на хеш-функции (например, SHA-256).
- Производительность: CMAC может быть быстрее HMAC на аппаратных платформах с аппаратной поддержкой блочных шифров (например, AES-NI). HMAC, как правило, быстрее на программных реализациях.
- Ключи: CMAC использует один ключ (как и блочный шифр), HMAC — два ключа (внутренний и внешний), хотя они производятся из одного мастер-ключа.
- Безопасность: Оба алгоритма считаются криптостойкими при правильном использовании. Уязвимости CMAC могут быть связаны с уязвимостями базового блочного шифра.
CMAC vs CBC-MAC
- Безопасность: CMAC устраняет недостатки CBC-MAC, связанные с сообщениями переменной длины. CBC-MAC безопасен только для сообщений фиксированной длины, если не применяются дополнительные меры (например, использование разных ключей для разных длин).
- Ключи: CMAC требует только один ключ, в то время как для безопасного CBC-MAC с переменной длиной часто требуется два ключа.
- Дополнение: CMAC использует два разных подключа для различения полных и дополненных блоков, что предотвращает атаки на основе дополнения.
Критика и ограничения
- Зависимость от блочного шифра: Стойкость CMAC полностью определяется стойкостью используемого блочного шифра. Если шифр будет взломан (например, найдена эффективная атака на AES), CMAC станет небезопасным.
- Длина имитовставки: Усечение имитовставки (например, до 64 бит) снижает уровень безопасности, так как вероятность подбора правильной имитовставки возрастает. Рекомендуется использовать полную длину блока шифра.
- Атаки по сторонним каналам: Как и любой криптографический алгоритм, реализация CMAC может быть подвержена атакам по времени, энергопотреблению или электромагнитному излучению. Для защиты требуются специальные меры (например, константное время выполнения).
- Сложность реализации: Неправильная реализация (например, ошибка в генерации подключей или дополнении) может привести к уязвимостям.
Интересные факты
- CMAC часто называют «одноключевым CBC-MAC» (OMAC), хотя это не совсем корректно, так как OMAC был предшественником CMAC.
- В стандарте NIST SP 800-38B CMAC определён как один из трёх режимов аутентификации наряду с CCM и GCM. GCM, в отличие от CMAC, обеспечивает также шифрование данных.
- В российской криптографии режим выработки имитовставки по ГОСТ Р 34.13-2015 (режим «Простая замена с зацеплением») функционально аналогичен CMAC, но использует другие константы и алгоритмы генерации подключей, основанные на ГОСТ 28147-89 или «Кузнечик».
- CMAC может быть использован для построения псевдослучайных функций (PRF) и генераторов псевдослучайных чисел.
Источники
- NIST Special Publication 800-38B: Recommendation for Block Cipher Modes of Operation: The CMAC Mode for Authentication.
- ISO/IEC 9797-1:2011: Information technology — Security techniques — Message Authentication Codes (MACs) — Part 1: Mechanisms using a block cipher.
- ГОСТ Р 34.13-2015: Информационная технология. Криптографическая защита информации. Режимы работы блочных шифров.
- Morris Dworkin: Recommendation for Block Cipher Modes of Operation: The CMAC Mode for Authentication (NIST, 2005).
- Tetsu Iwata, Kaoru Kurosawa: OMAC: One-Key CBC MAC (Fast Software Encryption, 2003).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →