Tengo problemas para entender el propósito de una sal a una contraseña. Tengo entendido que el uso principal es obstaculizar un ataque de la mesa del arco iris. Sin embargo, los métodos que he visto para implementar esto no parecen realmente dificultar el problema.
He visto muchos tutoriales que sugieren que la sal se use de la siguiente manera:
$hash = md5($salt.$password)
El razonamiento es que el hash ahora no se asigna a la contraseña original, sino a una combinación de la contraseña y la sal. Pero di $salt=foo
y $password=bar
y $hash=3858f62230ac3c915f300c664312c63f
. Ahora, alguien con una tabla de arcoíris podría revertir el hash y generar la entrada "foobar". Luego podrían probar todas las combinaciones de contraseñas (f, fo, foo, ... oobar, obar, bar, ar, ar). Puede tomar algunos milisegundos más obtener la contraseña, pero no mucho más.
El otro uso que he visto es en mi sistema Linux. En / etc / shadow, las contraseñas hash se almacenan realmente con la sal. Por ejemplo, una sal de "foo" y la contraseña de "barra" sería hash en esto: $1$foo$te5SBM.7C25fFDu6bIRbX1
. Si un pirata informático pudo de alguna manera tener en sus manos este archivo, no veo para qué sirve la sal, ya que te5SBM.7C25fFDu6bIRbX
se sabe que el hash inverso contiene "foo".
Gracias por cualquier luz que alguien pueda arrojar sobre esto.
EDITAR : Gracias por la ayuda. Para resumir lo que entiendo, la sal hace que la contraseña hash sea más compleja, por lo que es mucho menos probable que exista en una tabla de arco iris precalculada. Lo que antes entendí mal fue que estaba asumiendo que existía una mesa arcoiris para TODOS los hashes.