Los hash se pueden romper con fuerza bruta. Eso significa que usted prueba el hash en cada entrada posible hasta que encuentre una que genere la salida correcta. Para detener esto, una función hash utilizada para el almacenamiento de contraseñas o la obtención de claves debe ser deliberadamente lenta (para que la prueba de muchas entradas lleve mucho tiempo).
Un sitio como el que mencionas también puede almacenar una gran lista de pares conocidos de entradas y salidas comunes. Por lo tanto, no necesitan hacer una fuerza bruta cada vez que alguien les envía un hash para romperlos, solo necesitan buscarlo en la tabla. Para detener esto, usa un salt (para que incluso una contraseña común obtenga un hash único).
Observará que no conocen el valor de los hash todos , solo los comunes. Un ejemplo:
-
5f4dcc3b5aa765d61d8327deb882cf99
se invierte correctamente a password
, porque está en su base de datos.
-
039c004d00c02a193144e96b3e8aa4ba
no se puede revertir a la cadena aleatoria tUGPP*yq24p+EgpQ
que acabo de generar, porque no pueden incluir todos los miles de millones de cadenas aleatorias posibles en su base de datos.
Entonces, ¿cómo te proteges contra sitios como este? Use un algoritmo de hashing lento y una sal.