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

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-MD5 — основан на MD5. Считается устаревшим из-за уязвимостей MD5 к коллизиям, но всё ещё используется в некоторых унаследованных системах.
  • HMAC-SHA1 — основан на SHA-1. Долгое время был стандартом, но с 2005 года рекомендуется к замене на более стойкие варианты.
  • HMAC-SHA256 — основан на SHA-256. Является современным стандартом для большинства приложений.
  • HMAC-SHA3 — основан на SHA-3 (Keccak). Используется в новых системах, где требуется повышенная криптостойкость.

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

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

  • Секретность ключа: Без знания ключа невозможно вычислить корректный MAC для произвольного сообщения.
  • Целостность: Любое изменение сообщения или MAC приводит к несовпадению при проверке.
  • Устойчивость к атакам: HMAC устойчив к атакам на основе удлинения сообщения, которые возможны для простых схем типа H(key || message).
  • Длина выхода: Равна длине выхода используемой хеш-функции (например, 32 байта для SHA-256).

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

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

Применение

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

  • IPsec — для аутентификации пакетов в протоколах AH и ESP.
  • TLS/SSL — для аутентификации сообщений в рукопожатии и записи.
  • SSH — для аутентификации сеансовых ключей и сообщений.
  • HTTP Digest Authentication — для аутентификации пользователей.
  • API-ключи и токены — для проверки подлинности запросов (например, в AWS Signature Version 4).
  • JSON Web Tokens (JWT) — для подписи токенов (алгоритм HS256).
  • Системы управления паролями — для хеширования паролей с солью (PBKDF2 использует HMAC).

Примеры

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

Пусть:

  • Ключ: 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b (20 байт)
  • Сообщение: 4869205468657265 (ASCII "Hi There")

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

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

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

  • Зависимость от хеш-функции: HMAC наследует слабости используемой хеш-функции. Например, HMAC-MD5 считается небезопасным для новых приложений.
  • Управление ключами: Безопасность HMAC полностью зависит от секретности ключа. Утечка ключа компрометирует все сообщения.
  • Отсутствие шифрования: HMAC не шифрует данные, только аутентифицирует. Для конфиденциальности требуется дополнительное шифрование.
  • Атаки на реализацию: Неправильная реализация (например, использование одинакового ключа для разных целей) может привести к уязвимостям.

Источники

  • RFC 2104: HMAC: Keyed-Hashing for Message Authentication
  • RFC 4231: Identifiers and Test Vectors for HMAC-SHA-224, HMAC-SHA-256, HMAC-SHA-384, and HMAC-SHA-512
  • RFC 6151: Updated Security Considerations for the MD5 Message-Digest and the HMAC-MD5 Algorithms
  • NIST SP 800-107: Recommendation for Applications Using Approved Hash Algorithms

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

На главную BFOmetr →