HMAC

редактировать
Поколение HMAC-SHA1

В криптографии - HMAC (иногда расширяется как либо код аутентификации сообщения с хеш-кодом, либо код аутентификации сообщения на основе хэша ) - это особый тип кода аутентификации сообщения (MAC), включающий криптографическую хэш-функцию и секретный криптографический ключ. Как и любой MAC, он может использоваться для одновременной проверки целостности данных и подлинности сообщения.

Содержание

  • 1 Подробности
  • 2 Определение
  • 3 Реализация
  • 4 Принципы проектирования
  • 5 Безопасность
  • 6 Примеры
  • 7 Ссылки
  • 8 Внешние ссылки

Подробности

Любая криптографическая хеш-функция, такая как SHA-2 или SHA-3, может использоваться при вычислении HMAC; Результирующий алгоритм MAC называется HMAC-X, где X - используемая хеш-функция (например, HMAC-SHA256 или HMAC-SHA3-256). Криптографическая стойкость HMAC зависит от криптографической стойкости базовой хеш-функции, размера ее выходного хеш-кода, а также размера и качества ключа.

HMAC использует два прохода хеш-вычисления. Секретный ключ сначала используется для получения двух ключей - внутреннего и внешнего. Первый проход алгоритма создает внутренний хеш, полученный из сообщения и внутреннего ключа. Второй проход создает окончательный код HMAC, полученный из результата внутреннего хеширования и внешнего ключа. Таким образом, алгоритм обеспечивает лучшую невосприимчивость к атакам с расширением длины ..

Итеративная хеш-функция разбивает сообщение на блоки фиксированного размера и выполняет итерацию по ним с помощью функции сжатия. Например, SHA-256 работает с 512-битными блоками. Размер вывода HMAC такой же, как и у базовой хеш-функции (например, 256 и 512 бит в случае SHA-256 и SHA-512, соответственно), хотя при желании он может быть усечен.

HMAC не шифрует сообщение. Вместо этого сообщение (зашифрованное или нет) должно быть отправлено вместе с хешем HMAC. Стороны с секретным ключом сами снова будут хешировать сообщение, и, если оно подлинное, полученные и вычисленные хэши будут совпадать.

Определение и анализ конструкции HMAC были впервые опубликованы в 1996 году в статье Михира Белларе, Ран Канетти и Хьюго Кравчика, и они также писали: 102>RFC 2104 в 1997 г. В документе 1996 г. также определен вложенный вариант, называемый NMAC. FIPS PUB 198 обобщает и стандартизирует использование HMAC. HMAC используется в протоколах IPsec, SSH и TLS и для веб-токенов JSON.

Определение

Это определение является взято из RFC 2104 :

HMAC ⁡ (K, m) = H ⁡ ((K ′ ⊕ opad) ∥ H ⁡ ((K ′ ⊕ ipad) ∥ m)) K ′ = {H ⁡ (K) K больше размера блока K, иначе {\ displaystyle {\ begin {align} \ operatorname {HMAC} (K, m) = \ operatorname {H} {\ Bigl (} {\ bigl (} K '\ oplus opad { \ bigr)} \ parallel \ operatorname {H} {\ bigl (} \ left (K '\ oplus ipad \ right) \ parallel m {\ bigr)} {\ Bigr)} \\ K' = {\ begin { case} \ operatorname {H} \ left (K \ right) K {\ text {больше, чем размер блока}} \\ K {\ text {в противном случае}} \ end {ases}} \ end {align}}}{\displaystyle {\begin{aligned}\operatorname {HMAC} (K,m)=\operatorname {H} {\Bigl (}{\bigl (}K'\oplus opad{\bigr)}\parallel \operatorname {H} {\bigl (}\left(K'\oplus ipad\right)\parallel m{\bigr)}{\Bigr)}\\K'={\begin{cases}\operatorname {H} \left(K\right)K{\text{ is larger than block size}}\\K{\text{otherwise}}\end{cases}}\end{aligned}}}

где

H - криптографическая хеш-функция
m - сообщение, которое нужно аутентифицировать
K - секретный ключ
K '- ключ размером с блок полученный из секретного ключа, K; либо путем заполнения справа нулями до размера блока, либо путем хеширования до значения, меньшего или равного размеру блока, а затем заполнения справа нулями
|| обозначает конкатенацию
⊕ обозначает побитовое исключающее или (XOR)
opad - это внешнее заполнение размером блока, состоящее из повторяющихся байтов со значением 0x5c
ipad - это внутреннее заполнение размером с блок, состоящее из повторяющихся байтов со значением 0x36

Реализация

Следующий псевдокод демонстрирует, как может быть реализован HMAC. Размер блока составляет 64 (байта) при использовании одной из следующих хэш-функций: SHA-1, MD5, RIPEMD-128/160.

function hmac isinput: key: Bytes // Массив bytes message: Bytes // Массив байтов для хеширования hash: Function // Используемая хеш-функция (например, SHA-1) blockSize: Integer // Размер блока хеш-функции (например, 64 байта для SHA-1) outputSize : Integer // Размер вывода хэш-функции (например, 20 байтов для SHA-1) // Ключи длиннее blockSize сокращаются путем их хеширования if (length (key)>blockSize) тогда key ← hash (key) // key is outputSize bytes long // Ключи короче blockSize дополняются до blockSize путем заполнения нулями справа if (length (key) < blockSize) then key ← Pad (key, blockSize) // Добавьте к клавише нули, чтобы она стала длиннее blockSize в байтах o_key_pad ← key xor [0x5c * blockSize] // Внешняя клавиша с заполнением i_key_pad ← key xor [0x36 * blockSize] // Внутренняя клавиша с заполнением return hash (o_key_pad ∥ hash (i_key_pad ∥ message))

Принципы проектирования

Разработка спецификации HMAC была мотивирована существованием атак на более тривиальные механизмы объединения ключа с хеш-функцией. Например, можно предположить, что такая же безопасность, которую обеспечивает HMAC, может быть достигнута с MAC = H (ключ || сообщение). Однако этот метод страдает серьезным недостатком: с большинством хэш-функций легко добавить данные к сообщению, не зная ключа, и получить другой действительный MAC («атака с увеличением длины »). Альтернатива, добавление ключа с использованием MAC = H (сообщение || ключ), страдает от проблемы, заключающейся в том, что злоумышленник, который может найти коллизию в (неключевой) хэш-функции, имеет коллизию в MAC (как два сообщения m1 и m2, дающие один и тот же хэш, предоставят одно и то же начальное условие для хэш-функции до того, как добавленный ключ будет хеширован, следовательно, окончательный хеш будет таким же). Использование MAC = H (ключ || сообщение || ключ) лучше, но различные документы по безопасности предлагали уязвимости с этим подходом, даже когда используются два разных ключа.

Нет известного расширения были обнаружены атаки на текущую спецификацию HMAC, которая определяется как H (ключ || H (ключ || сообщение)), поскольку внешнее приложение хеш-функции маскирует промежуточный результат внутреннего хеша. Значения ipad и opad не критичны для безопасности алгоритма, но были определены таким образом, чтобы иметь большое расстояние Хэмминга друг от друга, и поэтому внутренний и внешний ключи будут иметь меньше битов в общий. Снижение безопасности HMAC требует, чтобы они отличались хотя бы одним битом.

Хэш-функция Keccak, которая была выбрана NIST в качестве Победитель конкурса SHA-3 не нуждается в таком вложенном подходе и может использоваться для генерации MAC, просто добавляя ключ к сообщению, поскольку он не подвержен атакам с увеличением длины.

Безопасность

Криптографическая стойкость HMAC зависит от размера используемого секретного ключа. Самая распространенная атака на HMAC - это перебор секретного ключа. HMAC значительно меньше подвержены конфликтам, чем только их базовые алгоритмы хеширования. В частности, в 2006 году Михир Белларе доказал, что HMAC является PRF при единственном предположении, что функция сжатия является PRF. Следовательно, HMAC-MD5 не страдает теми же недостатками, которые были обнаружены в MD5.

RFC 2104 требует, чтобы «ключи длиной более B байтов сначала хешировались с использованием H», что приводит к сбивающей с толку псевдоколлизии: если ключ длиннее, чем размер блока хеширования (например, 64 символа для SHA-1), то HMAC (k, m)вычисляется как HMAC (H (k), m).Это свойство иногда упоминается как возможное слабое место HMAC в сценариях хеширования паролей: было продемонстрировано, что можно найти длинную строку ASCII и случайное значение, чей хэш будет также строкой ASCII, и оба значения будут давать одинаковый вывод HMAC.

В 2006 году Алекс Бирюков, Барт Пренил и показал, как отличить HMAC от сокращенных версий MD5 и SHA-1 или полных версий HAVAL, MD4 и SHA-0 из случайной функции или HMAC со случайной функцией. Дифференциальные распознаватели позволяют злоумышленнику разработать атаку подделки на HMAC. Кроме того, дифференциальные и прямоугольные распознаватели могут привести к атакам второго прообраза. HMAC с полной версией MD4 может быть подделан с этими знаниями. Эти атаки не противоречат доказательству безопасности HMAC, но дают представление о HMAC на основе существующих криптографических хэш-функций.

В 2009 г. Xiaoyun Wang et al. представили отличительную атаку на HMAC-MD5 без использования связанных ключей. Он может отличить создание экземпляра HMAC с MD5 от экземпляра со случайной функцией с двумя запросами с вероятностью 0,87.

В 2011 году был опубликован информационный RFC 6151, чтобы обобщить соображения безопасности в MD5 и HMAC-MD5. Для HMAC-MD5 RFC резюмирует, что - хотя безопасность самой хэш-функции MD5 серьезно скомпрометирована - известные в настоящее время «атаки на HMAC-MD5, похоже, не указывают на практическую уязвимость при использовании в качестве сообщения. код аутентификации ", но также добавлено, что" для новой конструкции протокола не следует включать набор шифров с HMAC-MD5 ".

В мае 2011 года был опубликован RFC 6234, в котором подробно описывалась абстрактная теория и исходный код для HMAC на основе SHA.

Примеры

Вот некоторые непустые значения HMAC, предполагающие 8-битную кодировку ASCII или UTF-8 :

HMAC_MD5 ("ключ", "Быстрая коричневая лиса перепрыгивает через ленивую собаку") = 80070713463e7749b90c2dc24911e275 HMAC_SHA1 ("ключ", "Быстрая коричневая лисица перепрыгивает через" ленивую собаку ") = de7c9b85b8b78a770a6HA6C8C8 коричневая лисица перепрыгивает через ленивую собаку ") = f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8

Ссылки

Примечания

Внешние ссылки

.

Последняя правка сделана 2021-05-22 08:49:50
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте