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

HMAC-MD5

HMAC-MD5 — это криптографический алгоритм, использующий хеш-функцию MD5 для вычисления имитовставки (кода аутентичности сообщения, MAC) на основе секретного ключа. Относится к семейству HMAC (Hash-based Message Authentication Code), определённому в стандартах RFC 2104, NIST FIPS PUB 198 и ГОСТ Р 34.11-2012 (в части общей концепции HMAC). HMAC-MD5 обеспечивает проверку целостности данных и аутентификацию источника сообщения при условии, что ключ известен только отправителю и получателю.

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

Алгоритм HMAC был предложен в 1996 году Хьюго Кравчиком, Михалиром Белларе, Раном Канедой и другими криптографами как способ устранения уязвимостей простого конкатенации ключа с сообщением при использовании итеративных хеш-функций (таких как MD5, SHA-1). В 1997 году он был опубликован как RFC 2104. HMAC-MD5 стал одной из первых реализаций этого подхода, так как MD5 на тот момент был широко распространённой и быстрой хеш-функцией.

Долгое время HMAC-MD5 считался безопасным для практического применения, несмотря на то, что сама хеш-функция MD5 была признана криптографически нестойкой (коллизии были найдены ещё в 2004 году группой китайских учёных под руководством Сяоюня Ваня). Устойчивость HMAC к коллизиям хеш-функции обусловлена его конструкцией: секретный ключ дважды подаётся на вход хеш-функции (внутренний и внешний этапы), что делает атаки на MD5 неэффективными для подделки HMAC-MD5 без знания ключа. Однако с развитием криптоанализа, особенно атак на основе восстановления ключа (например, атака «relational» на HMAC-MD5, описанная в 2009 году), безопасность HMAC-MD5 была поставлена под сомнение.

В 2011 году NIST (Национальный институт стандартов и технологий США) в документе SP 800-107 рекомендовал прекратить использование HMAC-MD5 для новых приложений, а с 2013 года — полностью отказаться от него в государственных системах США. Тем не менее, HMAC-MD5 продолжал использоваться в устаревших протоколах (например, в некоторых реализациях IPsec, TLS 1.0/1.1, SNMPv3, RADIUS) и в системах, где требовалась обратная совместимость.

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

HMAC-MD5 вычисляется по формуле, определённой в RFC 2104:

\[ HMAC(K, m) = H((K' \oplus opad) \parallel H((K' \oplus ipad) \parallel m)) \]

Где:

  • \( H \) — хеш-функция MD5 (выдаёт 128-битный дайджест);
  • \( K \) — секретный ключ;
  • \( K' \) — ключ, приведённый к длине блока хеш-функции (для MD5 блок равен 64 байтам): если \( K \) короче, он дополняется нулями; если длиннее — сначала хешируется через MD5, а затем дополняется;
  • \( ipad \) — внутренняя константа (0x36, повторённая 64 раза);
  • \( opad \) — внешняя константа (0x5C, повторённая 64 раза);
  • \( \oplus \) — операция XOR (исключающее ИЛИ);
  • \( \parallel \) — конкатенация.

Процесс состоит из двух этапов:

  1. Внутренний этап: ключ XOR-ится с \( ipad \), к результату дописывается сообщение \( m \), затем вычисляется MD5-хеш.
  2. Внешний этап: ключ XOR-ится с \( opad \), к результату дописывается хеш из первого этапа, затем снова вычисляется MD5-хеш.

Результат — 128-битная (16-байтовая) имитовставка.

Криптостойкость и критика

Устойчивость к коллизиям

Конструкция HMAC делает её устойчивой к атакам на основе коллизий хеш-функции. Даже если злоумышленник может найти два сообщения с одинаковым MD5-хешем, это не позволяет ему подделать HMAC-MD5 без знания ключа, так как ключ участвует в обоих этапах хеширования. Однако в 2009 году была опубликована атака «relational» (Фу, Ван, 2009), которая позволяет с некоторой вероятностью восстановить ключ HMAC-MD5 при наличии достаточного количества пар «сообщение — MAC», собранных с помощью адаптивных запросов. Эта атака делает HMAC-MD5 потенциально уязвимым в сценариях, где злоумышленник может многократно взаимодействовать с системой (например, в протоколах аутентификации).

Атаки на основе длины ключа

HMAC-MD5 теоретически уязвим к атакам на основе длины ключа, если ключ слишком короткий (менее 128 бит). Рекомендуемая минимальная длина ключа для HMAC-MD5 — 128 бит (16 байт), оптимальная — 256 бит (32 байта).

Атаки на основе времени (timing attacks)

Реализации HMAC-MD5, не защищённые от атак по сторонним каналам (например, сравнение MAC без постоянного времени), могут быть скомпрометированы. Однако это относится ко всем HMAC-алгоритмам и решается корректной реализацией.

Атаки на основе коллизий ключей

В 2011 году была продемонстрирована атака, позволяющая с помощью коллизий в MD5 подобрать такой ключ, который даёт одинаковый HMAC для разных сообщений (атака «key-collision»). Однако на практике такая атака требует огромных вычислительных ресурсов и доступа к системе подбора ключа.

Применение

Несмотря на рекомендации по отказу, HMAC-MD5 исторически использовался в следующих областях:

  • Протокол IPsec: в некоторых реализациях (например, в AH и ESP) для обеспечения целостности и аутентификации пакетов. В современных версиях IPsec (RFC 7321) HMAC-MD5 заменён на HMAC-SHA256 или HMAC-SHA384.
  • TLS/SSL: в версиях 1.0 и 1.1 (ныне устаревших) HMAC-MD5 использовался как один из алгоритмов для вычисления MAC. В TLS 1.2 и 1.3 он исключён.
  • SNMPv3: для аутентификации сообщений в протоколе управления сетью. В RFC 3414 указан как обязательный к реализации, но не рекомендуемый.
  • RADIUS: для защиты аутентификационных запросов в протоколе AAA (аутентификация, авторизация, учёт). В RFC 2865 HMAC-MD5 используется для вычисления аутентификатора ответа.
  • Kerberos: в версии 5 (RFC 4120) HMAC-MD5 применяется для некоторых типов шифрования (например, des-cbc-md5).
  • DNS-безопасность (DNSSEC): в RFC 2535 был предложен как один из алгоритмов подписи, но позже заменён на RSA/SHA-256.
  • Протоколы аутентификации в беспроводных сетях: например, в WPA (Wi-Fi Protected Access) для генерации временного ключа (PTK) используется HMAC-MD5 в сочетании с другими алгоритмами.

Сравнение с другими HMAC-алгоритмами

АлгоритмДлина хеша (бит)Длина MAC (бит)Статус безопасностиРекомендация
HMAC-MD5128128Устаревший, потенциально уязвимНе рекомендуется для новых систем
HMAC-SHA1160160Устаревший, но более безопасенРекомендуется только для обратной совместимости
HMAC-SHA256256256БезопасенРекомендуется для большинства приложений
HMAC-SHA384384384БезопасенДля высокозащищённых систем
HMAC-SHA512512512БезопасенДля максимальной безопасности

Современное состояние

На 2025 год HMAC-MD5 считается устаревшим и небезопасным для использования в новых криптографических системах. Основные криптографические стандарты (NIST, IETF, ISO) рекомендуют замену на HMAC-SHA256 или более сильные алгоритмы. Однако в существующих системах, где требуется обратная совместимость, HMAC-MD5 может всё ещё применяться при условии, что:

  • ключ имеет длину не менее 128 бит и генерируется криптостойким генератором;
  • протокол не допускает многократных адаптивных запросов к HMAC-функции;
  • система защищена от атак по сторонним каналам.

В Российской Федерации в соответствии с ГОСТ Р 34.11-2012 («Стрибог») и рекомендациями ФСБ России, для целей аутентификации сообщений рекомендуется использовать HMAC на основе хеш-функций ГОСТ Р 34.11-2012 (256 или 512 бит). Использование HMAC-MD5 в государственных информационных системах РФ не допускается.

Источники

  1. RFC 2104 — HMAC: Keyed-Hashing for Message Authentication (1997).
  2. NIST Special Publication 800-107 — Recommendation for Applications Using Approved Hash Algorithms (2012, Revision 1).
  3. Wang, X., et al. — Collisions for Hash Functions MD4, MD5, HAVAL-128 and RIPEMD (2004).
  4. Fouque, P.-A., Wang, G. — A Practical Attack on HMAC-MD5 (2009).
  5. RFC 7321 — Cryptographic Algorithm Implementation Requirements and Usage Guidance for Encapsulating Security Payload (ESP) and Authentication Header (AH) (2014).
  6. RFC 3414 — User-based Security Model (USM) for version 3 of the Simple Network Management Protocol (SNMPv3) (2002).
  7. RFC 2865 — Remote Authentication Dial In User Service (RADIUS) (2000).
  8. ГОСТ Р 34.11-2012 — Информационная технология. Криптографическая защита информации. Функция хеширования (2012).

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

На главную BFOmetr →