Inicio / Guías / Fundamentos de las funciones de hash — unidireccionalidad, colisiones y sal

Una función de hash es una función que convierte datos de longitud arbitraria en un valor de longitud fija (hash o digest). La misma entrada produce siempre el mismo hash, pero si la entrada cambia aunque sea en un solo bit, el hash resultante es completamente distinto.

La propiedad clave de un buen hash criptográfico es la unidireccionalidad. Es prácticamente imposible revertir la entrada original a partir del hash. Por eso, si las contraseñas se almacenan como hash en lugar de en texto plano, aunque los datos se filtren no se puede conocer de inmediato el original.

Una colisión se da cuando dos entradas diferentes tienen el mismo hash. Teóricamente existen, pero en un hash seguro debe ser computacionalmente inviable crearlas de forma intencionada. MD5 y SHA-1 quedaron obsoletos precisamente porque se llegó a poder provocar colisiones.

Para almacenar contraseñas no basta con el hash. Como la misma contraseña produce el mismo hash, se añade a cada entrada un valor aleatorio llamado sal (salt) antes de hashear, y se usan hashes lentos como bcrypt o Argon2 para ralentizar los ataques de adivinación masiva.

Hashear con este algoritmo