Перейти к содержимому
ecdsa.com

HMAC

Код аутентификации сообщения на основе хеш-функции с ключом из RFC 2104 и FIPS 198-1, вычисляемый как H((K ⊕ opad) ‖ H((K ⊕ ipad) ‖ m)); он подтверждает целостность и источник сообщения любому, у кого есть тот же секретный ключ.
Другие написанияHMAC-SHA256keyed-hash message authentication codeHMAC-SHA1

HMAC работает с любой хеш-функцией (HMAC-SHA256 даёт 32-байтовый тег) и остаётся стойким даже с хешами, у которых нарушена стойкость к коллизиям, поэтому HMAC-SHA1 до сих пор встречается в TOTP. Ключи длиннее размера блока хеш-функции (64 байта для SHA-256) сначала хешируются, более короткие дополняются нулями; рекомендуется, чтобы энтропия ключа в битах была не меньше требуемого уровня стойкости. RFC 7518 (§ 3.2) требует для HS256 ключей длиной не менее 256 бит.

Применение: JWT с HS256/HS384/HS512, подписи вебхуков (например, X-Hub-Signature-256 у GitHub и Stripe-Signature у Stripe), подпись запросов AWS Signature Version 4, внутреннее устройство HKDF и PBKDF2, MAC записей в TLS 1.2 и коды TOTP/HOTP. Сравнивайте теги функцией с постоянным временем выполнения.

HMAC — не подпись: у каждой проверяющей стороны тот же ключ, и она могла сама создать тег, поэтому HMAC не обеспечивает неотказуемости и не подходит, если проверяющие стороны не должны иметь возможности выпускать токены. Калькулятор HMAC вычисляет и проверяет теги локально.

Стандарты и ссылки

Все термины