Одноключевой MAC ( OMAC ) - это код аутентификации сообщения, построенный на основе блочного шифра, очень похожий на алгоритм CBC-MAC .
Официально существует два алгоритма OMAC (OMAC1 и OMAC2), которые по сути одинаковы, за исключением небольшой настройки. OMAC1 эквивалентен CMAC , который стал рекомендацией NIST в мае 2005 года.
Он бесплатен для любого использования: на него не распространяются никакие патенты. [1] В криптографии , КЦР (Cipher на основе Message Authentication Code) [2] является блочным шифром основанного сообщения кода аутентификации алгоритма. Его можно использовать для обеспечения гарантии подлинности и, следовательно, целостности двоичных данных. Этот режим работы устраняет недостатки безопасности CBC-MAC (CBC-MAC безопасен только для сообщений фиксированной длины).
Ядром алгоритма CMAC является вариант CBC-MAC, который Блэк и Рогавей предложили и проанализировали под названием XCBC [3] и представили в NIST . [4] Алгоритм XCBC эффективно устраняет недостатки безопасности CBC-MAC, но требует трех ключей. Ивата и Куросава предложили усовершенствование XCBC и в своих статьях назвали получившийся алгоритм One-Key CBC-MAC ( OMAC ). [5] Позже они представили OMAC1, [6] доработку OMAC и дополнительный анализ безопасности. [7] Алгоритм OMAC уменьшает количество ключевого материала, необходимого для XCBC. CMAC эквивалентен OMAC1.
Чтобы сгенерировать ℓ-битовый тег 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 ( к 1 ) = 0 , то K 2 = K 1 «1 , в противном случае к 2 = ( K 1 « 1) ⊕ С .
- Ключи возврата ( 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 ». [8] - Реализация Ruby [9]
Ссылки [ править ]
- ^ Rogaway, Филипп. «CMAC: Без лицензирования» . Проверено 27 мая 2020 года .
Заявление Филиппа Рогэвэя о статусе интеллектуальной собственности CMAC
- ^ Дворкин, MJ (2016). «Рекомендации по режимам работы блочного шифра» (PDF) . DOI : 10,6028 / nist.sp.800-38b . Цитировать журнал требует
|journal=
( помощь ) - ^ Блэк, Джон; Рогавей, Филипп (2000-08-20). Достижения в криптологии - CRYPTO 2000 . Шпрингер, Берлин, Гейдельберг. С. 197–215. DOI : 10.1007 / 3-540-44598-6_12 . ISBN 978-3540445982.
- ^ Черный, J; Rogaway, P. "Предложение по обработке сообщений произвольной длины с помощью CBC MAC" (PDF) . Цитировать журнал требует
|journal=
( помощь ) - ^ Ивата, Тецу; Куросава, Каору (24 февраля 2003 г.). «OMAC: One-Key CBC MAC». Быстрое программное шифрование . Конспект лекций по информатике. 2887 . Шпрингер, Берлин, Гейдельберг. С. 129–153. DOI : 10.1007 / 978-3-540-39887-5_11 . ISBN 978-3-540-20449-7.
- ^ Ивата, Тецу; Куросава, Каору (2003). «OMAC: One-Key CBC MAC - Приложение» (PDF) . Цитировать журнал требует
|journal=
( помощь ) - ^ Ивата, Тецу; Куросава, Каору (2008-12-08). «Более строгие ограничения безопасности для OMAC, TMAC и XCBC». У Йоханссона, Томаса; Майтра, Субхамой (ред.). Прогресс в криптологии - INDOCRYPT 2003 . Конспект лекций по информатике. Springer Berlin Heidelberg. стр. 402 -415. CiteSeerX 10.1.1.13.8229 . DOI : 10.1007 / 978-3-540-24582-7_30 . ISBN 9783540206095.
- ^ «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)
- Онлайн-тест OMAC
- Дополнительная информация о OMAC