Qué añade HMAC sobre un hash
Un hash criptográfico sencillo crea una huella de los datos: cualquiera puede recalcular SHA-256(message) y comparar. Un HMAC (Hash-based Message Authentication Code) mezcla una clave secreta con el mensaje antes de hashear, de modo que solo las partes que conocen la clave pueden producir o verificar la etiqueta. El resultado es un digest de longitud fija—a menudo en hex—que autentica integridad y origen bajo el modelo de secreto compartido.
HMAC se usa ampliamente en firmas de peticiones API, verificación de webhooks y cookies firmadas. No cifra el mensaje; si necesita confidencialidad, use un cifrado o TLS. Tampoco sustituye las firmas de clave pública cuando las partes no deben compartir un único secreto.
Calcule una etiqueta moderna con HMAC SHA-256 usando un mensaje de muestra y un secreto solo de prueba.
Subtools de esta familia
El hub ofrece la misma construcción HMAC sobre tres funciones hash subyacentes:
- HMAC SHA-256 — valor por defecto preferido para nuevas integraciones; común en firmas estilo AWS, JWT HS256 y muchos esquemas de webhook.
- HMAC SHA-1 — aún aparece en APIs antiguas; migre cuando controle ambos extremos.
- HMAC MD5 — solo legacy; útil para entender MAC estilo checksum antiguos, no para diseños de seguridad nuevos.
Elija el subtool que coincida con el nombre del algoritmo en el protocolo que implementa. Un HMAC SHA-256 no verificará frente a un HMAC MD5 del mismo mensaje y clave.
Cómo se construye HMAC (intuición)
RFC 2104 define HMAC a grandes rasgos como hashear una combinación de clave y mensaje con bloques de clave rellenados internos y externos. Propiedades de ingeniería importantes:
- La clave permanece secreta; el digest solo no debería revelarla.
- Cambiar cualquier bit del mensaje (o de la clave) produce otra etiqueta con probabilidad aplastante.
- La verificación es recalcular y comparar—idealmente en tiempo constante en rutas sensibles a la seguridad.
No necesita implementar el relleno a mano cuando existe una función de biblioteca estándar HMAC(hashAlg, key, message)—y en producción debería preferir esas bibliotecas.
Claves, mensajes y codificaciones
Calidad de la clave. Use claves largas y aleatorias de un CSPRNG. Las passphrases humanas son más débiles salvo que pasen por un KDF adecuado. No use la misma clave en dos protocolos distintos sin separación de dominio.
Bytes del mensaje. HMAC autentica bytes exactos. Un JSON con distinto orden de claves o espacios produce otra etiqueta aunque la semántica coincida. Canonice datos estructurados antes de firmar si hay varios productores.
Codificación de salida. Las bibliotecas pueden devolver bytes crudos, hex o Base64. Dos sistemas que comparan etiquetas deben acordar codificación y mayúsculas/minúsculas del hex. JWT y muchos esquemas HTTP usan Base64URL en lugar de hex—siga la especificación.
Flujos típicos
Verificación de webhooks. Un proveedor envía una carga más una cabecera X-Signature. Su servidor recalcula HMAC sobre el cuerpo crudo con el secreto compartido y compara.
Firma de peticiones API. Una cadena canónica (método, ruta, marca de tiempo, hash del cuerpo) queda cubierta por HMAC para que intermediarios no alteren la petición sin ser notados.
Aprender JWT HS256. Los JSON Web Tokens firmados con HS256 son HMAC-SHA-256 sobre base64url(header) + "." + base64url(payload). Véase también el hub JWT para flujos encode/decode/verify.
Elegir MD5, SHA-1 o SHA-256
Los ataques de colisión contra MD5 y SHA-1 importan más en hashing sin clave y abuso de certificados. HMAC-MD5 y HMAC-SHA-1 son más fuertes que MD5/SHA-1 desnudos para autenticidad en algunos modelos de amenaza, pero la guía moderna sigue orientando diseños nuevos a HMAC-SHA-256 (o más fuerte) por agilidad de algoritmo y simplicidad de política. Si un proveedor solo ofrece HMAC-MD5, trátalo como restricción de compatibilidad y aísle esa integración.
Errores comunes
- Publicar el secreto en apps móviles o JavaScript de front-end y esperar que HMAC pruebe algo al servidor.
- Hashear con SHA-256 pero olvidar el paso de clave HMAC (o al revés).
- Firmar un cuerpo parseado y re-serializado en lugar de los bytes crudos de la petición.
- Usar igualdad de cadenas insegura en tiempo (
===en algunos contextos) para comparar etiquetas en código de alta garantía. - Rotar claves sin ventana de doble verificación, provocando fallos súbitos de verificación.
Limitaciones y entorno
Estas herramientas de navegador ayudan a generar y comparar digests al aprender o depurar. No son un sistema de gestión de claves. Mantenga secretos de producción reales en almacenes del servidor; use claves desechables para demos.
Resumen
HMAC convierte una función hash en un autenticador con clave. Este hub ofrece HMAC-MD5, HMAC-SHA-1 y HMAC-SHA-256 para que pueda cumplir requisitos de protocolo y ver cómo cambian los digests con mensaje o clave. Prefiera SHA-256 para trabajo nuevo, canonice bytes antes de firmar y recuerde que HMAC autentica—no cifra.