Что HMAC добавляет поверх хеша
Обычный криптографический хеш ставит отпечаток данных: любой может пересчитать SHA-256(message) и сравнить. HMAC (Hash-based Message Authentication Code) смешивает секретный ключ с сообщением перед хешированием, чтобы только стороны, знающие ключ, могли создать или проверить тег. Результат — дайджест фиксированной длины—часто в hex,—который аутентифицирует целостность и происхождение в модели общего секрета.
HMAC широко используют для подписей API-запросов, проверки webhook и подписанных cookie. Он не шифрует сообщение; для конфиденциальности нужен шифр или TLS. Он также не заменяет подписи с открытым ключом, когда стороны не должны делить один секрет.
Вычислите современный тег через HMAC SHA-256 на примере сообщения и тестовом секрете.
Подинструменты этого семейства
Хаб предлагает одну и ту же конструкцию HMAC поверх трёх базовых хеш-функций:
- HMAC SHA-256 — предпочтительный default для новых интеграций; обычен в подписях в стиле AWS, JWT HS256 и многих схемах webhook.
- HMAC SHA-1 — всё ещё встречается в старых API; мигрируйте, когда контролируете оба конца.
- HMAC MD5 — только legacy; полезен для понимания старых MAC в стиле checksum, не для новых проектов безопасности.
Выберите подинструмент, совпадающий с именем алгоритма в реализуемом протоколе. HMAC SHA-256 не проверится против HMAC MD5 того же сообщения и ключа.
Как устроен HMAC (интуиция)
RFC 2104 примерно определяет HMAC как хеширование комбинации ключа и сообщения с внутренними и внешними дополненными блоками ключа. Важные инженерные свойства:
- Ключ остаётся секретом; один дайджест не должен его раскрывать.
- Изменение любого бита сообщения (или ключа) с подавляющей вероятностью даёт другой тег.
- Проверка — пересчёт и сравнение—в идеале за константное время на чувствительных к безопасности путях.
Вам не нужно реализовывать padding вручную, если есть стандартная библиотечная функция HMAC(hashAlg, key, message)—и в производстве стоит предпочитать эти библиотеки.
Ключи, сообщения и кодировки
Качество ключа. Используйте длинные случайные ключи из CSPRNG. Человеческие passphrase слабее, если не прогнать через нормальный KDF. Не используйте один ключ для двух разных протоколов без domain separation.
Байты сообщения. HMAC аутентифицирует точные байты. JSON с другим порядком ключей или пробелами даёт другой тег даже при той же семантике. Канонизируйте структурированные данные перед подписью, если есть несколько производителей.
Кодировка выхода. Библиотеки могут возвращать сырые байты, hex или Base64. Две системы, сравнивающие теги, должны согласовать кодировку и регистр hex. JWT и многие HTTP-схемы используют Base64URL, а не hex—следуйте спецификации.
Типичные рабочие процессы
Проверка webhook. Провайдер шлёт полезную нагрузку плюс заголовок X-Signature. Ваш сервер пересчитывает HMAC по сырому телу с общим секретом и сравнивает.
Подпись API-запросов. Каноническая строка (метод, путь, метка времени, хеш тела) покрывается HMAC, чтобы посредники не могли незаметно изменить запрос.
Изучение JWT HS256. JSON Web Token, подписанные HS256, — это HMAC-SHA-256 над base64url(header) + "." + base64url(payload). См. также хаб JWT для потоков encode/decode/verify.
Выбор MD5, SHA-1 или SHA-256
Атаки коллизиями на MD5 и SHA-1 важнее всего для хеширования без ключа и злоупотребления сертификатами. HMAC-MD5 и HMAC-SHA-1 сильнее голых MD5/SHA-1 для аутентичности в некоторых моделях угроз, но современные рекомендации всё ещё направляют новые проекты к HMAC-SHA-256 (или сильнее) ради гибкости алгоритмов и простоты политики. Если вендор даёт только HMAC-MD5, считайте это ограничением совместимости и изолируйте интеграцию.
Частые ошибки
- Публиковать секрет в мобильных приложениях или фронтенд-JavaScript и ждать, что HMAC что-то докажет серверу.
- Хешировать SHA-256, забыв шаг ключа HMAC (или наоборот).
- Подписывать распарсенное и заново сериализованное тело вместо сырых байтов запроса.
- Использовать небезопасное по времени сравнение строк (
===в некоторых контекстах) для тегов в high-assurance коде. - Ротировать ключи без окна двойной проверки, вызывая внезапные сбои верификации.
Ограничения и среда
Эти браузерные инструменты помогают генерировать и сравнивать дайджесты при обучении или отладке. Это не система управления ключами. Реальные производственные секреты держите в серверных хранилищах; для демо — одноразовые ключи.
Кратко
HMAC превращает хеш-функцию в keyed-аутентификатор. Этот хаб даёт HMAC-MD5, HMAC-SHA-1 и HMAC-SHA-256, чтобы соответствовать требованиям протокола и видеть, как дайджесты меняются с сообщением или ключом. Для новой работы предпочитайте SHA-256, канонизируйте байты перед подписью и помните: HMAC аутентифицирует—он не шифрует.