Comparativas Seguridad

Hash vs HMAC vs firma digital

Un hash es una huella de los datos, un HMAC añade un secreto compartido para que solo quien tenga la clave pueda crearlo o comprobarlo, y una firma digital usa una clave privada para que cualquiera verifique quién firmó.

Última revisión:

AdSense Placeholder
Slot: header_reference_page
En esta página

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.

Pruebe estas herramientas

Véase también

  • Guía Cómo funciona el hashing
    Qué hace una función hash, el efecto avalancha mostrado con salida real de SHA-256, qué algoritmos siguen siendo seguros.
  • Comparativa Cifrado simétrico frente a asimétrico
    El cifrado simétrico usa una clave compartida y es rápido; el asimétrico usa un par de claves pública y privada y resuelve el intercambio.
  • Glosario Hash
    Un hash es la huella de longitud fija que una función hash calcula de cualquier entrada.
  • Glosario HMAC
    HMAC (código de autenticación de mensajes basado en hash) es un hash con clave secreta que prueba que un mensaje viene de quien tiene la.
  • Glosario Firma digital
    Una firma digital es un valor calculado a partir de un mensaje y una clave privada que prueba quién lo creó y que no se ha modificado.

Preguntas frecuentes

Solo si el propio hash llega por un canal de confianza. Si un atacante puede cambiar tanto el archivo como su hash publicado, la comprobación no demuestra nada. Los HMAC y las firmas lo resuelven al incluir una clave.

Cuando ambas partes ya comparten un secreto y confían entre sí, por ejemplo para verificar webhooks o firmar tokens de sesión entre tus propios servidores. HMAC es simple y rápido. Si necesitas que otros verifiquen sin poder falsificar, usa una firma.

No. Para contraseñas usa una función lenta y con sal, como bcrypt. HMAC sirve para autenticar mensajes con una clave secreta.

AdSense Placeholder
Slot: footer_leaderboard