Voy a explicar cada nivel de seguridad para la contraseña almacenada en la base de datos, tal vez esto ayude a aclarar la importancia de la sal.
Nivel 1 : contraseña almacenada sin cifrar en la base de datos.
Esto es solo estupidez pura . Pero a veces, las grandes empresas ponen en peligro su base de datos y, oh sorpresa, todas las contraseñas se almacenan de forma clara. ¡Qué vergüenza!
Nivel 2 : contraseña almacenada usando un algoritmo de hash.
Este es un paso hacia una mayor seguridad. Si un atacante obtiene la contraseña con hash, aún no puede iniciar sesión usando esta credencial para el servicio. Primero deberá "deshacer" la contraseña usando una Rainbow Table o por forzar en bruto esto .
Eso significa que requiere un poco más de trabajo para el atacante, pero aún puede ser posible recuperar la contraseña original.
Nivel 3 : contraseña almacenada utilizando un algoritmo de hashing con un salt.
Esto comienza a ser interesante. Como vimos en Nivel 2 , un atacante que tiene acceso a la contraseña con hash puede forzarla o usar una tabla de arco iris. Agregar una sal a la contraseña original hace que la tabla arco iris sea totalmente inútil porque no tienen en cuenta la sal.
Todavía es posible obtener la cadena original usando una tabla de arco iris, pero eso significaría que en la tabla de arco iris, existe la contraseña + sal. Como una sal es generalmente muy larga, es casi imposible tener un valor hash de una cadena (40+). La única solución que queda es la fuerza bruta.
Nivel 4 : contraseña almacenada usando un algoritmo de hashing con un salt y un peper.
Esto es muy interesante (es la razón por la que publico mi respuesta, ya que las reales ya son interesantes).
Le recomiendo que use un algoritmo de hash como BCrypt, SCrypt o PBKDF2, ya que no están rotos hasta el momento y son muy lentos para piratear, lo que aumenta el tiempo para romper uno, y luego una base de datos completa de contraseñas. / p>
La diferencia entre la sal y la pimienta es su ubicación. La sal generalmente se almacena en la base de datos, pero la pimienta se encuentra en el código. Esto puede parecer extraño, pero la idea original es que una base de datos puede verse comprometida, pero no el código, lo que deja al atacante una sal y una lista de contraseñas de hash inútiles. Además, agrega aún más complejidad a la contraseña con hash, haciendo que las tablas arco iris sean completamente inútiles (¡si suponemos que aún son un poco útiles con un salt!).
En el caso de que solo la base de datos esté comprometida, incluso la fuerza bruta será inútil , ya que el atacante no está buscando un valor (la contraseña original) sino dos valores (la contraseña original Y la pimienta).