HMAC (Hash-based Message Authentication Code) — это механизм для проверки целостности и аутентичности сообщения с использованием секретного ключа и криптографической хеш-функции.
Алгоритм работы:
- Формирование внутреннего и внешнего ключей из секретного ключа и констант (
ipad, opad).
- Вычисление внутреннего хеша:
hash(секретный ключ XOR ipad + сообщение).
- Вычисление внешнего хеша:
hash(секретный ключ XOR opad + внутренний хеш). Это и есть HMAC.
Использование:
- Аутентификация API запросов: Сервер и клиент имеют общий секретный ключ. Клиент вычисляет HMAC для данных запроса и отправляет его в заголовке. Сервер вычисляет HMAC по тем же данным и ключу, сравнивая с присланным значением. Если совпадает, запрос считается аутентичным.
- Проверка целостности данных: Если HMAC сообщения совпадает с повторно вычисленным HMAC, можно быть уверенным, что данные не были изменены во время передачи.
- Использование в JSON Web Tokens (JWT): HMAC часто применяется как алгоритм цифровой подписи (HS256, HS384, HS512) для обеспечения целостности данных токена.
Пример реализации (псевдокод):
javascript
Ключевое отличие от простого хеширования с добавлением ключа (hash(ключ + сообщение) или hash(сообщение + ключ)) в том, что HMAC устойчив к атакам удлинения сообщений, так как используется две фазы хеширования с разными константами padding.