Estoy aprendiendo Rails, por el momento, pero la respuesta no tiene que ser específica de Rails.¿Cómo se usa una sal para hacer una contraseña más segura si se almacena en la base de datos?
Así que, como yo lo entiendo, un sistema de contraseña segura funciona así:
- usuario crea una contraseña
- sistema encripta la contraseña con un algoritmo de cifrado (por ejemplo SHA2).
- Almacena el hash de la contraseña cifrada en la base de datos.
Tras el intento de inicio de sesión:
- usuario intenta iniciar sesión
- sistema crea hash del intento con el algoritmo de cifrado misma
- sistema compara con el hash del intento de hash de la contraseña en la base de datos.
- Si coinciden, se les deja entrar. De lo contrario, tienen que volver a intentarlo.
Según tengo entendido, este enfoque está sujeto a un ataque de arcoíris, en el que puede ocurrir lo siguiente.
Un atacante puede escribir un script que esencialmente prueba cada permutación de caracteres, números y símbolos, crea un hash con el mismo algoritmo de cifrado y lo compara con el hash en la base de datos.
Así que la forma de hacerlo es combinar el hash con una sal única. En muchos casos, la fecha y hora actual (hasta milisegundos) que el usuario registra.
Sin embargo, esta sal se almacena en la columna de la base de datos 'salt'.
Así que mi pregunta es, ¿cómo cambia esto el hecho de que si el atacante tiene acceso a la base de datos y tiene el hash creado para la contraseña 'real' y también tiene el hash para la sal, cómo es esto no solo como sujeto a un ataque de arcoiris? Porque, la teoría sería que él intenta cada permutación + el hash de sal y compara el resultado con el hash de la contraseña. Puede tomar un poco más de tiempo, pero no veo cómo es infalible.
Perdona mi ignorancia, solo estoy aprendiendo esto y esto nunca tuvo mucho sentido para mí.
posible duplicado de [¿Dónde almacena sus cadenas de sal?] (Http://stackoverflow.com/questions/1219899/where-do-you-store-your-salt-strings) – blowdart
No. No estoy defendiendo o preguntando si tiene más sentido almacenar la sal en otro lugar que el db. Estoy tratando de explorar la idea de cómo una sal es realmente más segura, en una era en la que los recursos informáticos son tan baratos. – marcamillion
SHA-2 es un algoritmo hash. Hashing es un concepto diferente al cifrado. – wulfgarpro