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 \) — конкатенация.
Процесс состоит из двух этапов:
- Внутренний этап: ключ XOR-ится с \( ipad \), к результату дописывается сообщение \( m \), затем вычисляется MD5-хеш.
- Внешний этап: ключ 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-MD5 | 128 | 128 | Устаревший, потенциально уязвим | Не рекомендуется для новых систем |
| HMAC-SHA1 | 160 | 160 | Устаревший, но более безопасен | Рекомендуется только для обратной совместимости |
| HMAC-SHA256 | 256 | 256 | Безопасен | Рекомендуется для большинства приложений |
| HMAC-SHA384 | 384 | 384 | Безопасен | Для высокозащищённых систем |
| HMAC-SHA512 | 512 | 512 | Безопасен | Для максимальной безопасности |
Современное состояние
На 2025 год HMAC-MD5 считается устаревшим и небезопасным для использования в новых криптографических системах. Основные криптографические стандарты (NIST, IETF, ISO) рекомендуют замену на HMAC-SHA256 или более сильные алгоритмы. Однако в существующих системах, где требуется обратная совместимость, HMAC-MD5 может всё ещё применяться при условии, что:
- ключ имеет длину не менее 128 бит и генерируется криптостойким генератором;
- протокол не допускает многократных адаптивных запросов к HMAC-функции;
- система защищена от атак по сторонним каналам.
В Российской Федерации в соответствии с ГОСТ Р 34.11-2012 («Стрибог») и рекомендациями ФСБ России, для целей аутентификации сообщений рекомендуется использовать HMAC на основе хеш-функций ГОСТ Р 34.11-2012 (256 или 512 бит). Использование HMAC-MD5 в государственных информационных системах РФ не допускается.
Источники
- RFC 2104 — HMAC: Keyed-Hashing for Message Authentication (1997).
- NIST Special Publication 800-107 — Recommendation for Applications Using Approved Hash Algorithms (2012, Revision 1).
- Wang, X., et al. — Collisions for Hash Functions MD4, MD5, HAVAL-128 and RIPEMD (2004).
- Fouque, P.-A., Wang, G. — A Practical Attack on HMAC-MD5 (2009).
- RFC 7321 — Cryptographic Algorithm Implementation Requirements and Usage Guidance for Encapsulating Security Payload (ESP) and Authentication Header (AH) (2014).
- RFC 3414 — User-based Security Model (USM) for version 3 of the Simple Network Management Protocol (SNMPv3) (2002).
- RFC 2865 — Remote Authentication Dial In User Service (RADIUS) (2000).
- ГОСТ Р 34.11-2012 — Информационная технология. Криптографическая защита информации. Функция хеширования (2012).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →