Глоссарий

HMAC

код аутентификации сообщения на основе хешаключевой хеш

HMAC — код аутентификации сообщения с секретным ключом, построенный на криптографической хеш-функции.

Определение

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

Проверяющая сторона с тем же секретным ключом заново вычисляет тег по точным байтам сообщения и сравнивает его с полученным тегом. Совпадение показывает, что сообщение не изменилось и тег создал участник, знающий общий ключ.

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

HMAC хеширует ключ и сообщение в два вложенных этапа с разными константами заполнения. Такая конструкция безопаснее, чем простое hash(key || message), которое может быть уязвимо с некоторыми хеш-функциями.

Выбранная хеш-функция определяет размер тега: HMAC-SHA256 выдаёт 32 байта, обычно записанные как 64 шестнадцатеричных символа. HMAC-SHA512 и HMAC-SHA384 дают более длинные теги, а HMAC-SHA1 в основном остаётся для совместимости.

Применение и ограничения

HMAC используют для подписей API, вебхуков, сессионных данных, JWT HS256 и протокольных сообщений, где обе стороны уже знают общий секрет. Он обеспечивает целостность и аутентификацию, но не конфиденциальность: само сообщение не скрывается.

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

Частые вопросы

Нет. HMAC аутентифицирует сообщение, но не скрывает его. Если нужна конфиденциальность, шифрование применяют отдельно.

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

Нет. Проверка заново вычисляет тег из исходного сообщения и секретного ключа; она не восстанавливает эти значения из тега.

См. также
Связанные инструменты