He estado dando vueltas por la cuestión de cómo almacenar las contraseñas en mi base de datos desde hace un tiempo. Esta es la primera vez que hago una aplicación segura con un inicio de sesión web, por lo que quería establecer algunas buenas prácticas.Hashing y salazón de un campo de contraseña
Primero, leo sobre hash y salazón. Parece que la idea es ...
- Get algoritmo de hash
- obtener la contraseña de usuario
- Add 'sal' a contraseña en texto plano de usuario
- hash de la contraseña completa (incluyendo sal)
- tienda de la sal en el PP para que pueda recuperarlo más tarde (para la verificación de PSWD)
Y eso me hizo pensar ... Si un hacker conoce su sal (b Debido a que está almacenado en la base de datos en algún lugar, tal vez una columna llamada this_is_not_the_salt_ur_looking_for
o algo igualmente ambiguo, pueden volver a generar el diccionario de contraseñas y obtener acceso.
Entonces tuve una idea. ¿Qué pasa si almacenó su sal dentro de el campo de contraseña hash. Así que siga los pasos 1-4 (generación aleatoria de la sal), entonces en el paso 5, insertar la sal en la contraseña en algún lugar conocido por la clase de interpretación contraseña o servicio:
xxxxxsaltvaluexxxxxxxxxxxxxxxx
donde x es los valores de cadena hash . ¿Alguien puede ver algún problema con esto? ¿Es completamente innecesario?
Respuesta:
No hay ninguna razón por la cual no podía hacerse de esta. Como dice Yahia, otros métodos para asegurar una contraseña incluyen doble (o n) hash. En otra nota, BCrypt parece un buen método para detener los ataques de fuerza bruta casi por completo, pero no pude encontrar una biblioteca confiable para C#
¡Gracias!
TTD
He estado pensando en esto yo mismo, gracias por preguntar al respecto . –