🍋
Menu
Security

HMAC

HMAC (Hash-Based Message Authentication Code)

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

Техническая деталь

HMAC (RFC 2104) вычисляется как: HMAC(K, m) = H((K' XOR opad) || H((K' XOR ipad) || m)), где H — хеш-функция (SHA-256), K' — ключ, дополненный до размера блока, ipad — повторяющийся 0x36, opad — повторяющийся 0x5c. Двойное хеширование предотвращает атаки удлинения, которым подвержен простой hash(key || message). HMAC-SHA256 используется в подписях JWT, аутентификации API (AWS Signature V4), проверке вебхуков (Stripe, GitHub) и выводе ключей (HKDF). Web Crypto API поддерживает HMAC через subtle.sign() и subtle.verify(). Для предотвращения атак по времени критически важно использовать сравнение с постоянным временем выполнения при проверке HMAC.

Пример

```javascript
// HMAC — Web Crypto API example
const data = new TextEncoder().encode('sensitive data');
const hash = await crypto.subtle.digest('SHA-256', data);
const hex = Array.from(new Uint8Array(hash))
  .map(b => b.toString(16).padStart(2, '0')).join('');
```

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

Связанные термины