Одноключевой MAC ( OMAC ) — это семейство кодов аутентификации сообщений , созданных на основе блочного шифра, очень похожего на алгоритм CBC-MAC . Он может использоваться для обеспечения гарантии подлинности и, следовательно, целостности данных. Определены две версии:
Оригинальный OMAC от февраля 2003 года, который используется редко. [1] Предпочтительным названием теперь является «OMAC2». [2]
Усовершенствование OMAC1, [2] которое стало рекомендацией NIST в мае 2005 года под названием CMAC . [3]
OMAC бесплатен для любого использования: он не защищен никакими патентами. [4]
История
Ядром алгоритма CMAC является вариация CBC-MAC , которую Блэк и Рогауэй предложили и проанализировали под названием «XCBC» [5] и представили в NIST . [6] Алгоритм XCBC эффективно устраняет недостатки безопасности CBC-MAC, но требует трех ключей.
Ивата и Куросава предложили усовершенствование XCBC, которое требует меньше ключевого материала (только один ключ), и назвали полученный алгоритм One-Key CBC-MAC (OMAC) в своих работах. [1] Позднее они представили OMAC1 (= CMAC), [2] усовершенствование OMAC и дополнительный анализ безопасности. [7]
Алгоритм
Чтобы сгенерировать ℓ-битный CMAC-тег ( t ) сообщения ( m ) с использованием b -битного блочного шифра ( E ) и секретного ключа ( k ), сначала генерируются два b -битных подключа ( k 1 и k 2 ) с использованием следующего алгоритма (это эквивалентно умножению на x и x 2 в конечном поле GF(2 b )). Пусть ≪ обозначает стандартный оператор сдвига влево, а ⊕ обозначает побитовое исключающее или :
Рассчитайте временное значение k 0 = E k (0).
Если msb( k 0 ) = 0, то k 1 = k 0 ≪ 1, иначе k 1 = ( k 0 ≪ 1) ⊕ C ; где C — некоторая константа, зависящая только от b . (В частности, C — это нестаршие коэффициенты лексикографически первого неприводимого двоичного полинома степени b с минимальным числом единиц: 0x1B для 64-битных, 0x87 для 128-битных и 0x425 для 256-битных блоков.)
Если msb( k 1 ) = 0 , то k 2 = k 1 ≪ 1 , иначе k 2 = ( k 1 ≪ 1) ⊕ C .
Верните ключи ( k 1 , k 2 ) для процесса генерации MAC.
В качестве небольшого примера предположим, что b = 4 , C = 0011 2 и k 0 = E k (0) = 0101 2. Тогда k 1 = 1010 2 и k 2 = 0100 ⊕ 0011 = 0111 2 .
Процесс генерации тега CMAC выглядит следующим образом:
Разделить сообщение на b -битные блоки m = m 1 ∥ ... ∥ m n −1 ∥ m n , где m 1 , ..., m n −1 — полные блоки. (Пустое сообщение рассматривается как один неполный блок.)
Если m n — полный блок, то m n ′ = k 1 ⊕ m n, иначе m n ′ = k 2 ⊕ ( m n ∥ 10...0 2 ) .
Пусть c 0 = 00...0 2 .
Для i = 1, ..., n − 1 вычислите c i = E k ( c i −1 ⊕ m i ) .
c n = E k ( c n −1 ⊕ m n ′)
Выход t = msb ℓ ( c n ) .
Процесс проверки выглядит следующим образом:
Используйте приведенный выше алгоритм для генерации тега.
Проверьте, что сгенерированный тег равен полученному тегу.
Реализация Python : см. использование функции AES_CMAC()в "impacket/blob/master/tests/misc/test_crypto.py" и ее определение в "impacket/blob/master/impacket/crypto.py" [9]
^ ab Iwata, Tetsu; Kurosawa, Kaoru (2003-02-24). "OMAC: One-Key CBC MAC". Быстрое программное шифрование . Конспект лекций по информатике. Том 2887. Springer, Берлин, Гейдельберг. С. 129–153. doi :10.1007/978-3-540-39887-5_11. ISBN978-3-540-20449-7.
^ abc Iwata, Tetsu; Kurosawa, Kaoru (2003). "OMAC: One-Key CBC MAC – Приложение" (PDF) . В этой заметке мы предлагаем OMAC1, новый выбор параметров семейства OMAC (подробности см. в [4]). Также представлены тестовые векторы. Соответственно, мы переименовываем предыдущий OMAC в OMAC2. (То есть тестовые векторы для OMAC2 уже были показаны в [3].) Мы используем OMAC как общее название для OMAC1 и OMAC2.{{cite journal}}: Цитировать журнал требует |journal=( помощь )
^ Дворкин, Моррис (2016). «Рекомендации по режимам работы блочного шифрования: режим CMAC для аутентификации» (PDF) . doi : 10.6028/nist.sp.800-38b .{{cite journal}}: Цитировать журнал требует |journal=( помощь )
^ Рогауэй, Филлип. "CMAC: Нелицензирование" . Получено 27 мая 2020 г. Заявление Филлипа Рогауэя о статусе интеллектуальной собственности CMAC
^ Блэк, Джон; Рогауэй, Филлип (2000-08-20). Достижения в криптологии – CRYPTO 2000. Springer, Берлин, Гейдельберг. стр. 197–215. doi :10.1007/3-540-44598-6_12. ISBN978-3540445982.
^ Блэк, Дж.; Рогауэй, П. «Предложение по обработке сообщений произвольной длины с помощью CBC MAC» (PDF) .{{cite journal}}: Цитировать журнал требует |journal=( помощь )
^ Ивата, Тецу; Куросава, Каору (8 декабря 2003 г.). «Более строгие границы безопасности для OMAC, TMAC и XCBC». В Йоханссоне, Томас; Майтра, Субхамой (ред.). Прогресс в криптологии - INDOCRYPT 2003 . Конспекты лекций по информатике. Том. 2904. Шпрингер Берлин Гейдельберг. стр. 402–415. CiteSeerX 10.1.1.13.8229 . дои : 10.1007/978-3-540-24582-7_30. ISBN9783540206095.
^ Бхаумик, Ритам; Чакраборти, Бишваджит; Чхве, Вонсок; Дутта, Авиджит; Говинден, Жером; Шен, Яобин (2024). «Обеспечение безопасности MAC с приложениями к общей композиции». В Рейзин Леонид; Стебила, Дуглас (ред.). Достижения в криптологии – КРИПТО 2024 . Конспекты лекций по информатике. Том. 14923. Чам: Springer Nature Switzerland. стр. 425–462. дои : 10.1007/978-3-031-68385-5_14. ISBN978-3-031-68385-5.
^ «Impacket — это коллекция классов Python для работы с сетевыми протоколами.: SecureAuthCorp/impacket». 15 декабря 2018 г. — через GitHub.
^ "Расширение Ruby C для ключевой хэш-функции AES-CMAC (RFC 4493): louismullie/cmac-rb". 4 мая 2016 г. – через GitHub.
Внешние ссылки
RFC 4493 Алгоритм AES-CMAC
RFC 4494 Алгоритм AES-CMAC-96 и его использование с IPsec
RFC 4615 Расширенный стандарт шифрования — Код аутентификации сообщений на основе шифра — Псевдослучайная функция — 128 (AES-CMAC-PRF-128)