✍️

HMAC

HMAC (Hash-based Message Authentication Code) es un mecanismo criptográfico que combina una función hash (como SHA-256) con una clave secreta compartida para generar un código de autenticación. Garantiza que un mensaje no fue alterado y que proviene de quien dice ser.

Ejemplos

  • HMAC-SHA256('mensaje', 'clave123') → a3f5e8d9c1b2...
  • JWT firmado: eyJhbGci... (header + payload + HMAC-SHA256)
  • Webhook Stripe: X-Stripe-Signature: t=timestamp,v1=hmac
  • AWS API request: Authorization: AWS4-HMAC-SHA256 Credential=...
  • Cookie Express firmada: session=s%3A...; Signature=hmac_value

Preguntas frecuentes

¿Cuál es la diferencia entre HMAC y un hash simple?

Un hash simple (SHA-256, MD5) es público: cualquiera puede calcularlo. HMAC requiere una clave secreta, entonces solo quien tiene la clave puede generar o verificar el código. Esto previene falsificaciones.

¿HMAC encripta los datos?

No. HMAC solo verifica integridad y autenticidad. El mensaje viaja en claro. Si necesitás confidencialidad, combiná HMAC con encriptación (por ejemplo: encrypt-then-MAC con AES + HMAC).

¿Puedo truncar un HMAC para ahorrar espacio?

Sí, pero con cuidado. HMAC-SHA256 puede truncarse a 128 bits sin perder demasiada seguridad (NIST recomienda mínimo 80 bits). Nunca bajes de 64 bits o te exponés a ataques de fuerza bruta.