Una función hash convierte cualquier entrada, desde una sola letra hasta una película entera, en una huella corta de tamaño fijo. La misma entrada da siempre la misma huella; una entrada distinta da una completamente distinta; y no hay forma práctica de volver de la huella a la entrada. Cree una con el Generador de Hash.
Propiedades de un buen hash
- Determinista.
hellocon SHA-256 da siempre2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824. - Longitud fija. El hash de una cadena vacía y el de un archivo de 4 GB son ambos de 64 caracteres hexadecimales (256 bits) con SHA-256.
- Efecto avalancha. Cambie una letra y cambia aproximadamente la mitad de los bits de salida.
helloyhellpdifieren en un carácter, pero sus hashes SHA-256 difieren en 131 de 256 bits:fdd7585e08c4e2afd71dcabdb4636c89d557a3f42db9e2040c8bbd1708aa4ce7. - Unidireccional. Conocer el hash no permite recuperar la entrada, salvo adivinando entradas y calculando su hash.
- Resistente a colisiones. Debería ser inviable encontrar dos entradas distintas con el mismo hash.
Algoritmos habituales
| Algoritmo | Tamaño de salida | Longitud hex | Estado |
|---|---|---|---|
| MD5 | 128 bits | 32 | Roto: las colisiones son fáciles. Solo vale para sumas de control sin fines de seguridad |
| SHA-1 | 160 bits | 40 | Roto para firmas: existen colisiones prácticas. Evítelo |
| SHA-256 | 256 bits | 64 | Seguro; la opción estándar |
| SHA-512 | 512 bits | 128 | Seguro; a menudo más rápido que SHA-256 en CPU de 64 bits |
| SHA3-256 | 256 bits | 64 | Seguro; un diseño distinto al de la familia SHA-2 |
Para qué se usan los hashes
- Comprobar la integridad de archivos. Publique el SHA-256 de una descarga para que se confirme que se obtuvo el archivo exacto. Un solo bit cambiado da un hash distinto.
- Firmas digitales. Se firma el hash de un mensaje en lugar del mensaje entero.
- Deduplicación y caché. El contenido idéntico tiene hash idéntico.
- Guardar contraseñas, pero solo con los métodos especiales de abajo. Un SHA-256 simple es la herramienta equivocada.
- Autenticación de mensajes. HMAC mezcla una clave secreta en el hash: el HMAC-SHA-256 de
The quick brown fox jumps over the lazy dogcon la clavekeyesf7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8. Solo quien tiene la clave puede producirlo o comprobarlo.
Hashear no es cifrar
El cifrado se puede revertir con una clave; un hash no se puede revertir en absoluto. Un hash tampoco dice que un archivo sea seguro, solo que está sin cambios desde que se calculó.
Guardar contraseñas correctamente
El problema son los hashes rápidos: un atacante con una base de datos robada puede probar miles de millones de intentos SHA-256 por segundo con una tarjeta gráfica, y las contraseñas comunes caen al instante.
- Añada una sal (salt), un valor aleatorio único por usuario guardado junto al hash. Dos usuarios con la misma contraseña obtienen entonces hashes distintos y las «tablas arcoíris» precalculadas no sirven.
- Use un hash de contraseñas deliberadamente lento y que consuma memoria: Argon2id (preferido), scrypt, bcrypt o PBKDF2 con muchas iteraciones. Pruebe bcrypt con el Generador Bcrypt.
- No invente nunca su propio esquema ni guarde contraseñas en texto plano, cifradas de forma reversible o con MD5 o SHA-1.
Calcule lo adivinable que es una contraseña con el Auditor de Fortaleza y Entropía de Contraseñas.
Errores habituales
- Usar MD5 o SHA-1 donde importa la seguridad.
- Comparar hashes con una comparación de cadenas normal cuando protegen secretos. Use una comparación de tiempo constante para evitar fugas por tiempos.
- Hashear entradas cortas o predecibles (un teléfono, una fecha de nacimiento) y llamar anónimo al resultado. Cualquiera puede calcular el hash de todos los valores posibles y buscarlo.
Vea Hash, Sal (salt) y HMAC.