Una huella digital para los datos
Una función hash toma cualquier entrada (una palabra, un documento, un vídeo de 4 GB) y la convierte en una cadena corta de longitud fija llamada hash, resumen o checksum. La misma entrada siempre da el mismo hash, y el menor cambio da uno completamente distinto:
| Entrada | Hash SHA-256 |
hello | 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 |
Hello | 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969 |
hello! | ce06092fb948d9ffac7d1a376e404b26b7575bcc11ee05a4615fef4fec3a308b |
Una mayúscula o un signo de exclamación cambian todos los caracteres del resultado. Pruébalo en el Generador de hash.
Qué hace buena a una función hash
- Determinista: la misma entrada produce siempre el mismo hash, en cualquier ordenador.
- De un solo sentido: no se puede volver del hash a la entrada.
- Resistente a colisiones: debe ser prácticamente imposible encontrar dos entradas distintas con el mismo hash.
- Rápida de calcular para sumas de comprobación, algo útil, y también la razón por la que los hashes rápidos no sirven para contraseñas (más abajo).
Un hash no es cifrado
El cifrado funciona en los dos sentidos: con la clave recuperas el original. Un hash no tiene clave y no se puede revertir; solo permite comprobar si algo coincide. Base64 es otra cosa: es solo una codificación y cualquiera puede decodificarla.
Los algoritmos más comunes
| Algoritmo | Longitud | Estado |
| MD5 | 128 bits (32 caracteres hexadecimales) | Roto desde 2004; solo sirve para detectar daños accidentales |
| SHA-1 | 160 bits (40 caracteres hexadecimales) | Roto: la primera colisión real se publicó en 2017 |
| SHA-256 | 256 bits (64 caracteres hexadecimales) | Seguro; la opción estándar hoy |
| SHA-512 | 512 bits (128 caracteres hexadecimales) | Seguro; a menudo más rápido que SHA-256 en ordenadores de 64 bits |
Así queda la palabra hello en cada uno:
- MD5:
5d41402abc4b2a76b9719d911017c592 - SHA-1:
aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d - SHA-256:
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
Qué significa que MD5 y SHA-1 estén "rotos"
Con MD5 y SHA-1, los investigadores pueden crear a propósito dos archivos distintos con el mismo hash. Un atacante podría usarlo para cambiar un archivo inofensivo por uno malicioso con la misma suma, o para falsificar un documento firmado. Ninguno de los dos está roto en el sentido de poder revertirse, y un daño aleatorio sigue cambiando el hash, así que una suma MD5 todavía detecta una descarga que se cortó a medias. Lo que no puede es demostrar que nadie ha manipulado el archivo.
SHA-256 y SHA-512 pertenecen a la familia SHA-2, publicada en 2001, y no se conoce ningún ataque práctico contra ellos. SHA-3, estandarizado en 2015, es un diseño distinto que se mantiene como reserva.
Para qué se usan los hashes
- Comprobar descargas: los desarrolladores publican el SHA-256 de sus archivos; si el tuyo coincide, es idéntico. Consulta cómo verificar una suma de comprobación.
- Firmas digitales y certificados HTTPS: se calcula el hash del documento o del certificado y se firma ese hash.
- Git: cada commit y cada archivo se identifica por su hash. Git ha usado SHA-1 desde siempre y ha añadido soporte para SHA-256.
- Bitcoin y otras blockchains: los bloques se encadenan con SHA-256.
- Encontrar archivos duplicados: dos archivos con el mismo SHA-256 son el mismo archivo.
Hashes y contraseñas
Las webs nunca deberían guardar tu contraseña, solo un hash de ella; al iniciar sesión, calculan el hash de lo que escribes y lo comparan. Pero SHA-256 no es la herramienta adecuada para esto: es tan rápido que un atacante con una base de datos filtrada puede probar miles de millones de contraseñas por segundo. Las contraseñas necesitan un hash lento y con sal pensado para ello, como bcrypt, scrypt o Argon2. La sal es un valor aleatorio que se añade a cada contraseña antes de calcular el hash, para que dos personas con la misma contraseña obtengan hashes distintos.
Pruébalo
El Generador de hash calcula a la vez MD5, SHA-1, SHA-256, SHA-384 y SHA-512 de cualquier texto o archivo, en tu navegador, y puede compararlos con una suma publicada.