Parece que piensa que el algoritmo de sal y / o salado y hash debe mantenerse en secreto. Ellos no. La sal solo protege contra escenarios de amenazas muy específicos.
Recuerde que calcular un hash en un valor siempre devuelve el mismo valor de hash (de lo contrario, sería inútil). Pero eso significa que un atacante puede usar esa propiedad para probar los valores de hash en su base de datos mediante la comprobación de contraseñas de hashing. Si su suposición tiene el mismo valor que un hash en la tabla, su suposición fue correcta y él conoce esa contraseña. La salazón ayuda a evitar que esto sea un problema de dos maneras.
-
Al agregar un salt largo y aleatorio a la contraseña antes del hash, protege contra alguien que calcula previamente los valores de hash de las conjeturas de contraseña. (Esto se denomina "ataque de la tabla arco iris"; puede conectarse y comprar un disco duro de 1TB con miles de millones de hashes precalculados que ya se encuentran en una tabla de búsqueda).
-
Al usar un salt único para cada contraseña, protege contra alguien que detecta colisiones en su base de datos. Sin usar un salt único para cada contraseña, si mi contraseña era ABC y estaba hash a 123, y si también usaba ABC como su contraseña, también lo haría a 123. Cualquiera que busque en la base de datos verá que ambos compartimos Una contraseña común.
En ningún caso, el algoritmo de sal y hash debe mantenerse en secreto para preservar estas protecciones, de modo que pueda abrir todo este trabajo de fuente.
Para mayor seguridad, algunas personas agregan lo que se llama "pimienta" a este algoritmo; "pimienta" es un nombre lindo para un valor de sal común que se aplica a todas las contraseñas en un sistema y se mantiene en secreto.
Lo que también es importante para proteger sus contraseñas en un escenario de incumplimiento es que el algoritmo de hashing de contraseñas sea computacionalmente costoso. Esto ayuda a prevenir ataques de fuerza bruta, porque el atacante generalmente no puede gastar suficiente tiempo de CPU para probar miles de millones de conjeturas. La forma de lograrlo es mediante la repetición de un algoritmo de hash criptográficamente seguro. Una computadora moderna con una tarjeta GPU puede calcular 10s de billones de hashes SHA-1 por segundo. Si usó SHA-1 como el algoritmo de hash de contraseña, eso significa que un atacante podría probar 10 mil millones de conjeturas de contraseña por segundo. Al utilizar una función de hashing de contraseñas como PBKDF2, repite el hash miles de veces, asegurando que el atacante solo pueda probar unos pocos cientos de intentos por segundo.