Skip to main content
CheckTown
Инструменты разработчика

HMAC: как работает аутентификация сообщений на основе хеша

Опубликовано 6 мин чтения
В этой статье

Что такое HMAC?

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

HMAC определен в RFC 2104 и используется в TLS, IPsec, подписях JWT и верификации вебхуков API. Алгоритм устойчив к атакам удлинения, которые влияют на простые хеш-функции.

Как работает HMAC

HMAC использует двухпроходный подход к хешированию с внутренним и внешним дополнением. Секретный ключ дополняется до размера блока хеш-функции и комбинируется с двумя различными константами.

  • Внутренний хеш — ключ комбинируется с ipad (0x36), конкатенируется с сообщением и хешируется: H(K XOR ipad || сообщение)
  • Внешний хеш — ключ комбинируется с opad (0x5C), конкатенируется с результатом внутреннего хеша: H(K XOR opad || inner_hash)
  • Итоговый результат — результат внешнего хеша является значением HMAC, обычно представленным в виде шестнадцатеричной строки

Эта конструкция двойного хеширования предотвращает атаки удлинения. Даже если злоумышленник знает H(сообщение), он не может вычислить HMAC(ключ, сообщение || доп_данные) без секретного ключа.

Алгоритмы HMAC

Конструкция HMAC работает с любой криптографической хеш-функцией. Наиболее распространенные варианты — SHA-256, SHA-384 и SHA-512.

  • HMAC-SHA256 — 256-битный вывод, наиболее широко используемый вариант для аутентификации API, подписей JWT HS256 и верификации вебхуков. Рекомендуемый размер ключа: 32 байта
  • HMAC-SHA384 — 384-битный вывод, используется в наборах шифров TLS 1.3 и приложениях высокой безопасности. Рекомендуемый размер ключа: 48 байт
  • HMAC-SHA512 — 512-битный вывод, предпочтителен когда нужен максимальный запас безопасности. Рекомендуемый размер ключа: 64 байта

Ключ должен быть как минимум такой же длины, как вывод хеша. Для большинства применений HMAC-SHA256 с случайным 32-байтным ключом обеспечивает отличную безопасность.

Попробуйте бесплатно — без регистрации

Сгенерировать подписи HMAC →

Типичные случаи использования

HMAC является основой многих протоколов безопасности и схем аутентификации API.

  • Аутентификация API — сервисы вроде Stripe, GitHub и AWS используют подписи HMAC для верификации нагрузок вебхуков
  • Подписание JWT — алгоритмы HS256, HS384 и HS512 используют HMAC для подписания нагрузки токена
  • Целостность сообщений — HMAC проверяет, что данные не были изменены при передаче
  • OAuth 1.0a — метод подписи HMAC-SHA1 подписывает параметры запроса OAuth для подтверждения авторизации клиента

HMAC vs другие методы аутентификации

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

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

Часто задаваемые вопросы

Какова идеальная длина ключа HMAC?

Ключ должен быть как минимум такой же длины, как вывод хеша — 32 байта для HMAC-SHA256, 48 для HMAC-SHA384, 64 для HMAC-SHA512. Более короткие ключи ослабляют безопасность.

HMAC — это то же самое, что шифрование?

Нет. HMAC обеспечивает аутентификацию и целостность, но не конфиденциальность. Сообщение остается читаемым. Используйте шифрование (AES, ChaCha20) в дополнение к HMAC.

Могу ли я использовать HMAC в браузере с Web Crypto API?

Да. Web Crypto API поддерживает HMAC нативно через crypto.subtle.importKey() и crypto.subtle.sign(). Вы можете генерировать подписи HMAC полностью на стороне клиента.

Похожие инструменты