Hashing
Una huella digital de los datos en un solo sentido: fácil de calcular, imposible de revertir.
Una función hash toma cualquier entrada (una palabra, un archivo, un disco entero) y produce una cadena corta de tamaño fijo llamada hash: SHA-256 siempre da 64 caracteres hexadecimales. La misma entrada siempre da el mismo hash. Cambiá una letra y el hash es completamente distinto. Y no hay forma de correrla al revés: desde el hash no podés reconstruir la entrada, y encontrar dos entradas con el mismo hash es, para una buena función, impracticable.
Eso convierte a los hashes en huellas digitales útiles. Una página de descarga muestra el hash del archivo para que verifiques que tu copia está intacta. Git nombra cada commit con un hash de su contenido. Las blockchains encadenan bloques hasheando el anterior. Y los sitios web guardan un hash de tu contraseña en vez de la contraseña: cuando iniciás sesión, hashean lo que escribiste y comparan. Si la base de datos se filtra, el atacante se lleva huellas, no contraseñas.
La trampa con las contraseñas es que un atacante puede hashear miles de millones de intentos por segundo y comparar. Por eso las contraseñas se hashean con funciones lentas hechas a propósito (bcrypt, scrypt, Argon2) y con una sal aleatoria por usuario, para que la misma contraseña dé hashes distintos en personas distintas y las tablas precalculadas no sirvan. Usar un hash rápido como MD5 para contraseñas es un error clásico que sigue apareciendo en los informes de filtraciones.
Hashing no es cifrado. El cifrado se revierte con la clave; un hash no tiene clave ni camino de vuelta. Si un sitio puede mandarte por correo tu contraseña vieja, no la estaba hasheando.
Para quedarse
- Misma entrada, mismo hash; un cambio mínimo da un hash completamente distinto.
- Es de un solo sentido: el hash no revela la entrada.
- Las contraseñas se guardan como hashes lentos y con sal (Argon2, bcrypt), nunca en texto plano.
- El hashing verifica e identifica; el cifrado oculta. Son herramientas distintas.