🍋
Menu
Security

HMAC

HMAC (Hash-Based Message Authentication Code)

Una construcción específica para crear un código de autenticación de mensajes utilizando una función hash criptográfica combinada con una clave secreta, verificando tanto la integridad de los datos como la autenticidad de un mensaje.

Detalle técnico

HMAC (RFC 2104) calcula: HMAC(K, m) = H((K' XOR opad) || H((K' XOR ipad) || m)), donde H es una función hash (SHA-256), K' es la clave rellenada al tamaño del bloque, ipad es 0x36 repetido y opad es 0x5c repetido. Esta construcción de doble hashing previene ataques de extensión de longitud que afectan a hash(clave || mensaje) simple. HMAC-SHA256 se usa en firmas JWT, autenticación API (AWS Signature V4), verificación de webhooks (Stripe, GitHub) y derivación de claves (HKDF). La Web Crypto API soporta HMAC via subtle.sign() y subtle.verify(). La comparación de tiempo seguro es crítica al verificar HMACs para prevenir ataques de canal lateral de temporización.

Ejemplo

```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('');
```

Herramientas relacionadas

Términos relacionados