Un hash convierte datos en una huella de tamaño fijo que cualquiera puede recalcular; detecta cambios accidentales pero no demuestra quién lo creó. Un HMAC mezcla una clave secreta compartida en el hash, de modo que solo quien tenga la clave puede crearlo o verificarlo: demuestra la integridad y que el emisor conocía el secreto. Una firma digital usa una clave privada para firmar y una clave pública para verificar, así que cualquiera puede comprobar quién firmó y el firmante no puede negarlo después.
De un vistazo
| Hash | HMAC | Firma digital | |
|---|---|---|---|
| Clave necesaria | Ninguna | Un secreto compartido | Clave privada para firmar, pública para verificar |
| Detecta cambios | Sí | Sí | Sí |
| Demuestra quién lo creó | No | Solo ante quien comparte el secreto | Sí, ante cualquiera con la clave pública |
| No repudio | No | No (cualquiera de las partes pudo crearlo) | Sí |
| Velocidad | Muy rápido | Muy rápido | Más lenta |
| Uso típico | Sumas de verificación, deduplicación | Firma de peticiones de API, webhooks, tokens HS256 | Firma de software, certificados, tokens RS256/ES256 |
El mismo mensaje, de tres maneras
Para el mensaje hello:
| Método | Resultado |
|---|---|
| Hash SHA-256 | 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 |
HMAC-SHA256, clave secret |
88aab3ede8d3adf94d26ab90d3bafd4a2083070c3bcce9c014ee04a443847c0b |
HMAC-SHA256, clave other |
ccba5a99c3e0c7f2bc6c6f02bc752217c3c71fb91b41211dffc0c1d0981d1663 |
El hash es igual para todos. El HMAC cambia por completo con la clave, así que sin secret nadie puede producir la segunda línea. Una firma digital del mismo mensaje se produciría con una clave privada y se comprobaría con la clave pública correspondiente; una firma Ed25519 mide siempre 64 bytes y una firma RSA-2048, 256 bytes.
Calcula los dos primeros con el generador de hash y el generador HMAC, y crea un par de claves para firmas con el generador de pares de claves.
¿Cuál deberías elegir?
- Comprobar que una descarga coincide con una suma publicada: hash, publicado por un canal de confianza (consulta Cómo verificar el checksum de un archivo).
- Verificar un webhook o llamada de API entre sistemas que comparten un secreto: HMAC.
- Permitir que cualquiera verifique quién publicó un software o documento: firma digital.
- Almacenar contraseñas: ninguno de ellos directamente; usa un hash de contraseñas, consulta MD5 frente a SHA-256 frente a bcrypt.
El contexto de las claves implicadas está en Cifrado simétrico frente a asimétrico y Cómo funciona el hashing explica el hashing en profundidad.