HMAC (Hash-based Message Authentication Code) — это механизм для проверки подлинности и целостности сообщения с использованием хеш-функции и секретного ключа.
Работает он следующим образом:
- Сообщение и секретный ключ обрабатываются через хеш-функцию определенным образом.
- В результате получается уникальный хеш-код (HMAC).
- Этот HMAC отправляется вместе с сообщением.
- Получатель, имея то же сообщение и секретный ключ, заново вычисляет HMAC.
- Если вычисленный HMAC совпадает с полученным, считается, что сообщение не было изменено и пришло от источника, владеющего секретным ключом.
HMAC_K(m) = Hash((K ⊕ opad) || Hash((K ⊕ ipad) || m))
Где:
K — секретный ключ.
m — сообщение.
Hash — используемая хеш-функция (например, SHA-256).
|| — конкатенация.
⊕ — операция XOR.
ipad (inner pad) и opad (outer pad) — константы, используемые в алгоритме.
Отличие от обычной хеш-функции в том, что HMAC использует секретный ключ, что делает его устойчивым к определенным видам атак, направленных на подделку хеша.
Применение в веб-разработке:
- Bearer tokens: Для создания и верификации токенов аутентификации.
- Подпись запросов: Для проверки подлинности запросов к API.
- Верификация данных: Гарантия того, что данные не были изменены при передаче.
Преимущества:
- Высокая криптографическая стойкость.
- Совместим с различными хеш-функциями.
- Прост в реализации.