Un hash es un valor de longitud fija que una función hash unidireccional calcula a partir de unos datos: la misma entrada siempre produce el mismo hash y no es posible recuperar los datos originales a partir de él.
Cómo funcionan las funciones hash
Una función hash criptográfica recibe datos de cualquier tamaño —una contraseña, un archivo, una imagen de disco completa— y produce una «huella» corta, por ejemplo un valor de 256 bits con SHA-256. Una buena función cumple tres propiedades: no se puede invertir, dos entradas distintas prácticamente nunca dan el mismo hash (resistencia a colisiones) y cambiar un solo bit de la entrada cambia por completo el resultado.
MD5 y SHA-1 se consideran rotos: los investigadores lograron colisiones prácticas, entre ellas el ataque SHAttered contra SHA-1 en 2017. Hoy lo habitual es usar SHA-256, SHA-3 o BLAKE2.
Dónde se usan los hashes
- Comprobación de integridad: comparar un archivo descargado con el hash publicado por el fabricante o verificar actualizaciones.
- Detección de amenazas: los hashes de archivos son un indicador de compromiso clásico en los informes de amenazas.
- Almacenamiento de contraseñas: los servicios no guardan la contraseña, sino su hash con una sal aleatoria.
- Firmas digitales y blockchain: lo que se firma o se encadena son hashes, no los datos en bruto.
Ataques contra hashes
El hash no es cifrado, pero los hashes de contraseñas débiles se pueden «crackear»: quien roba una base de datos lanza ataques de fuerza bruta y de diccionario en GPU con herramientas como hashcat o usa tablas arcoíris precalculadas. En redes Windows, los ataques pass-the-hash reutilizan directamente los hashes NTLM sin conocer la contraseña.
Buenas prácticas
Para contraseñas, usar algoritmos deliberadamente lentos y con sal —Argon2, bcrypt o scrypt— y nunca MD5 ni SHA-1 sin más. Para comprobar la integridad, SHA-256 o superior.