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

HMAC

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

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

Концепция HMAC была разработана в 1996 году Михиром Белларе (Mihir Bellare), Раном Канетти (Ran Canetti) и Хьюго Кравчиком (Hugo Krawczyk) из корпорации IBM. Предложенный ими алгоритм был опубликован в документе Internet Engineering Task Force (IETF) как RFC 2104 в феврале 1997 года. В том же году HMAC был принят в качестве стандарта Национальным институтом стандартов и технологий США (NIST) в документе FIPS PUB 198. Позднее, в 2002 году, стандарт был обновлён до FIPS PUB 198-1, а в 2008 году — до FIPS PUB 198-2. HMAC также является частью стандартов ISO/IEC 9797-2 и ISO/IEC 10116.

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

HMAC использует любую криптографическую хеш-функцию (например, MD5, SHA-1, SHA-256, SHA-3) в качестве строительного блока. Алгоритм состоит из двух этапов хеширования, которые включают XOR-операции с ключом и двумя константами (ipad — inner pad, внутренняя прокладка, и opad — outer pad, внешняя прокладка). Формально HMAC(K, m) вычисляется следующим образом:

  1. Если длина ключа K больше длины блока хеш-функции (обычно 64 байта для MD5 и SHA-1, 128 байт для SHA-256), то K сначала хешируется, и результат используется как новый ключ.
  2. Ключ дополняется нулями до длины блока хеш-функции, получая K'.
  3. Вычисляется внутренний хеш: H((K' ⊕ ipad) || m), где ipad — повторяющийся байт 0x36, а || обозначает конкатенацию.
  4. Вычисляется внешний хеш: H((K' ⊕ opad) || H((K' ⊕ ipad) || m)), где opad — повторяющийся байт 0x5C.

Результат — дайджест фиксированной длины (зависит от используемой хеш-функции). Такая конструкция защищает от атак на основе удлинения сообщения (length extension attack), уязвимых для некоторых хеш-функций (например, MD5, SHA-1, SHA-2).

Классификация и варианты

По используемой хеш-функции

  • HMAC-MD5 — использует MD5 (128-битный дайджест). Считается устаревшим из-за криптографических уязвимостей MD5, но всё ещё применяется в некоторых легаси-системах.
  • HMAC-SHA1 — использует SHA-1 (160-битный дайджест). Также считается устаревшим, но широко распространён в протоколах (например, TLS 1.0/1.1, IPsec).
  • HMAC-SHA256 — использует SHA-256 (256-битный дайджест). Рекомендуется NIST и большинством современных стандартов.
  • HMAC-SHA384, HMAC-SHA512 — варианты с увеличенной длиной дайджеста.
  • HMAC-SHA3 — использует SHA-3 (Keccak). Новый стандарт, набирающий популярность.

По области применения

  • HMAC для аутентификации сообщений — используется в сетевых протоколах (TLS, SSH, IPsec, Kerberos).
  • HMAC для генерации псевдослучайных чисел — применяется в алгоритмах выработки ключей (например, HKDF — HMAC-based Key Derivation Function).
  • HMAC для проверки целостности данных — в системах хранения и передачи файлов.

Свойства и криптостойкость

Безопасность HMAC основана на стойкости используемой хеш-функции и секретности ключа. При условии, что хеш-функция удовлетворяет требованиям криптографической стойкости (устойчивость к коллизиям, необратимость), HMAC считается защищённым от атак подбора ключа (brute-force) и атак на основе известного текста. Длина ключа обычно составляет от 128 до 512 бит; NIST рекомендует ключи длиной не менее 128 бит для HMAC-SHA256.

Основные атаки на HMAC:

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

Применение

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

  • TLS/SSL — для аутентификации сообщений в записях протокола.
  • IPsec — в протоколах AH (Authentication Header) и ESP (Encapsulating Security Payload).
  • SSH — для проверки целостности пакетов.
  • Kerberos — для аутентификации билетов.
  • API-аутентификация — многие веб-сервисы (например, Amazon Web Services, Google Cloud) используют HMAC для подписи запросов.
  • Блокчейн и криптовалюты — для генерации ключей и проверки транзакций (например, в Bitcoin используется HMAC-SHA512 в процессе генерации адресов).
  • Системы хранения паролей — HMAC применяется в алгоритмах PBKDF2 (Password-Based Key Derivation Function 2) для защиты паролей.

Реализации

HMAC реализован во всех основных криптографических библиотеках: OpenSSL, GnuTLS, Crypto++ (C++), Bouncy Castle (Java), PyCrypto (Python), .NET Cryptography (C#), libsodium (C). В операционных системах HMAC доступен через системные криптографические API (например, Windows CryptoAPI, macOS Security Framework).

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

Основные недостатки HMAC:

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

В 2010-х годах были предложены альтернативы, такие как KMAC (Keccak Message Authentication Code) на основе SHA-3, которые устраняют некоторые ограничения HMAC, но HMAC остаётся наиболее распространённым стандартом.

Источники:

  • RFC 2104 — HMAC: Keyed-Hashing for Message Authentication
  • FIPS PUB 198-1 — The Keyed-Hash Message Authentication Code (HMAC)
  • NIST Special Publication 800-107 — Recommendation for Applications Using Approved Hash Algorithms
  • Bellare, M., Canetti, R., Krawczyk, H. — Keying Hash Functions for Message Authentication (1996)

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

На главную BFOmetr →