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

RFC 2104

HMAC (Hash-based Message Authentication Code, RFC 2104) — это механизм аутентификации сообщений, основанный на криптографической хеш-функции, который позволяет проверить целостность и подлинность данных с помощью секретного ключа. Определён в стандарте RFC 2104, опубликованном в феврале 1997 года.

История и стандартизация

Разработка HMAC была вызвана необходимостью создания надёжного и универсального метода аутентификации сообщений, который не зависел бы от конкретной реализации хеш-функции. До появления HMAC существовали различные схемы, но они часто были уязвимы для атак, связанных с удлинением ключа или коллизиями хешей.

Стандарт RFC 2104 был предложен Хьюго Кравчиком, Михалиром Белларе, Раном Канецци и Джоном Кершоу. Он был принят как интернет-стандарт (STD 54) и с тех пор широко внедрён в протоколы безопасности, такие как IPsec, TLS, SSH и другие.

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

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

Формально HMAC(K, m) вычисляется как:

HMAC(K, m) = H( (K' ⊕ opad) || H( (K' ⊕ ipad) || m ) )

Где:

Этапы вычисления

  1. Подготовка ключа: Если длина ключа K превышает длину блока хеш-функции, он сначала хешируется, и результат используется как новый ключ. Если ключ короче блока, он дополняется нулями до длины блока.
  2. Внутреннее хеширование: Ключ XOR-ится с ipad, к результату добавляется сообщение m, и всё это хешируется.
  3. Внешнее хеширование: Ключ XOR-ится с opad, к результату добавляется хеш из предыдущего шага, и всё это снова хешируется.

Результат — фиксированной длины код аутентификации, который прикрепляется к сообщению.

Классификация и виды

HMAC не имеет строгой классификации по типам, но различается по используемой хеш-функции. Наиболее распространённые варианты:

Устройство и характеристики

Ключевые свойства

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

Безопасность HMAC зависит от стойкости используемой хеш-функции и длины ключа. Стандарт рекомендует использовать ключи длиной не менее длины выхода хеш-функции (например, 32 байта для SHA-256). При правильном использовании HMAC считается криптостойким.

Применение

HMAC широко применяется в различных протоколах и системах безопасности:

Примеры

Пример вычисления HMAC-SHA256

Пусть:

Результат HMAC-SHA256 (в шестнадцатеричном виде): b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7

Этот пример соответствует тестовому вектору из RFC 4231.

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

Источники

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

На главную BFOmetr →