Genera firmas HMAC-SHA1, SHA256, SHA384 y SHA512 con clave secreta
Escribe un mensaje y una clave secreta para generar las firmas HMAC
HMAC (Hash-based Message Authentication Code) combina una función hash con una clave secreta compartida. A diferencia de un hash simple —que solo garantiza integridad—, HMAC garantiza también la autenticidad: solo quien tiene la clave puede generar o verificar la firma.
Todo el cómputo ocurre en tu navegador usando la Web Crypto API nativa. Ningún dato se envía a servidores.
También podrías necesitar
HMAC (Hash-based Message Authentication Code) es el mecanismo estándar para autenticar mensajes en sistemas distribuidos: combina una función hash con una clave secreta para producir una firma que garantiza tanto la integridad del contenido como la autenticidad del emisor. A diferencia de un hash simple — que cualquiera puede calcular sobre cualquier mensaje — el HMAC solo puede ser generado o verificado por quien posee la clave secreta compartida. Esta propiedad lo hace imprescindible en APIs REST (AWS Signature v4, Twilio), webhooks (Stripe, GitHub, Shopify firman sus payloads con HMAC-SHA256), JWT con algoritmos HS256 y HS512, cookies firmadas, y cualquier protocolo donde dos partes necesiten autenticar mensajes sin una PKI. Esta herramienta calcula simultáneamente los cuatro HMACs más usados (SHA-1, SHA-256, SHA-384, SHA-512) y presenta la salida en formato HEX o Base64 con un clic. Todo el cómputo ocurre en tu navegador usando la Web Crypto API nativa — ningún mensaje ni clave sale de tu dispositivo.
¿En qué se diferencia HMAC de un hash simple?
Un hash (SHA-256, MD5) solo garantiza integridad: cualquiera puede calcular el hash de cualquier mensaje. HMAC agrega autenticidad porque incorpora una clave secreta al cálculo: HMAC(K, M) = H((K ⊕ opad) ∥ H((K ⊕ ipad) ∥ M)). Sin la clave, es computacionalmente imposible generar o falsificar un HMAC válido, incluso conociendo el mensaje y el resultado.
¿Qué longitud de clave debo usar para HMAC-SHA256?
La RFC 2104 recomienda una clave de al menos L bytes, donde L es la longitud del bloque del hash (64 bytes para SHA-256 y SHA-1, 128 bytes para SHA-384 y SHA-512). En la práctica, cualquier clave de 32–64 bytes (256–512 bits) generada criptográficamente es más que suficiente. Evita claves cortas, predecibles o derivadas de texto plano sin una función KDF como PBKDF2 o HKDF.
¿Cuándo elegir HEX versus Base64?
HEX es más legible para debugging y logging: cada byte se representa como 2 caracteres hexadecimales (0-9, a-f). Base64 es más compacto (~33% menos caracteres) y se usa en headers HTTP, cookies y tokens JWT. HMAC-SHA256 en HEX tiene 64 caracteres; en Base64 son 44. Elige Base64 si necesitas incluir el HMAC en un header o URL-safe context.
¿Cómo verifico un HMAC recibido?
Calcula el HMAC del mensaje recibido con la misma clave y algoritmo, y compara el resultado byte a byte con el HMAC recibido usando comparación en tiempo constante (para evitar timing attacks). En código: en Node.js usa crypto.timingSafeEqual(); en Python, hmac.compare_digest(); en Go, subtle.ConstantTimeCompare(). Nunca uses == o === directo porque permite inferir información sobre el HMAC correcto midiendo el tiempo de respuesta.
¿Por qué los algoritmos SHA-1 y SHA-384 están disponibles si SHA-1 es inseguro?
SHA-1 como función hash independiente está rota (colisiones encontradas). Sin embargo, HMAC-SHA1 sigue siendo seguro para autenticación de mensajes según el estándar NIST SP 800-107, porque las vulnerabilidades de colisión en SHA-1 no se aplican a su uso en HMAC. Aun así, prefiere HMAC-SHA256 o HMAC-SHA512 para sistemas nuevos. SHA-384 está aquí por compatibilidad con sistemas que lo requieren específicamente (ciertos estándares OpenBanking y PSD2).