Las sales no ayudan a evitar que alguien descifre una contraseña en particular. Ayudan a evitar que alguien pueda descifrar muchas contraseñas a la vez utilizando una tabla de arco iris.
Supongamos que tiene los siguientes usuarios en su sitio (la contraseña no se almacenaría en la base de datos, solo la versión con hash).
USER PASSWORD HASHED PASSWORD
========================================
hamfist god de898928393a893
bttltoad god de898928393a893
woob god de898928393a893
marco-fiset mypass1 1238ffff2342399
dean password2 a44ca77446ff449
Si alguien programara previamente los hashes para un montón de contraseñas y almacenara esto en la memoria (una tabla de arco iris), sería trivial para ellos verificar si de898928393a893
existía en la lista de contraseñas. Entonces sabrían que a todas estas cuentas de usuarios se podría acceder con la contraseña, god
. En muy poco tiempo, tendrían acceso a las cuentas de todos con una contraseña simple que existe en su tabla de arco iris (y en cualquier otro lugar en la web esa persona usa el mismo combo de correo electrónico / contraseña).
Ahora, si agrega un salt al azar, todos los que tengan la misma contraseña terminarán con diferentes hashes:
USER PASSWORD SALT HASHED PASSWORD
===============================================
hamfist god ae#o abf4388ff343401
bttltoad god cdo@ 29292d919100001
woob god !doe 3902dda99210099
marco-fiset mypass1 12uo aaffff121bcce13
dean password2 TEe9 b44ca7743324234
Ahora, una mesa de arco iris no ayuda mucho. En lugar de simplemente necesitar el hash para god
, por ejemplo, necesitaría calcular previamente el hash para god + <all_potential_salts>
. Tipo de límites que puedes almacenar en la memoria.
Sin embargo, si alguien quiere obtener hamfist
específicamente, tiene la sal ya que está almacenada en la base de datos, por lo que no va a ralentizar el intento de craqueo.