1) Como el almacenamiento de contraseñas en texto sin formato en las bases de datos no es seguro y por lo tanto no es una buena práctica.
contraseña almacenada en db="abcde" (texto sin formato)
2) Para evitar esto, las contraseñas se almacenan después de ser procesadas utilizando algunas técnicas de hash confiables como SHA256 o SHA 512, etc.
3) Pero como las contraseñas con hash son vulnerables a los ataques de tabla arco iris o ataques de diccionario, se aplica una nueva técnica de salado. Aquí se agrega una sal (alguna cadena) (normalmente con un prefijo o un sufijo) a la contraseña y luego la contraseña resultante + sal se rellena y se almacena en db.
contraseña + sal="abcde" + "catsarecool" y < br>
contraseña almacenada en db = SHA256 ("abcdecatsarecool") = 8A85335AB6B09405FF34DCC146A0B690A3BFA834B8C53EBAD77F64C653A89F82
Ahora puedo explicar / preguntar sobre lo que quiero confirmar y las preocupaciones que tengo -
1) al usar salting (3), supongo que la cadena de sal también debe almacenarse en la base de datos. Por favor confirme?
2) Si la cadena de sal debe almacenarse en la base de datos, ¿cuál es la mejor práctica? Usar una sal común para todos los usuarios de la aplicación o una sal por usuario.
3) a) El objetivo principal del hash era que cualquier atacante que obtenga el volcado de DB pueda ver las contraseñas en texto sin formato, lo que es menos seguro que cuando se utiliza el hash.
b) Y el propósito de la salazón es hacer que este trabajo sea más difícil al hacer imposibles los ataques de tabla arco iris o diccionario, ya que el atacante también tendrá que hacer una conjetura de "sal" junto con la contraseña. Pero si un atacante puede obtener un volcado de base de datos de alguna manera, entonces el atacante también tendría las "sales" que, si se almacenan en db, se almacenan como texto simple. Así que ahora que el atacante sabe la "sal", no es su tarea de descifrar la contraseña tan difícil como lo era cuando estaba tratando de descifrar las contraseñas de hash.
No soy un experto en seguridad, pero soy consciente de que para almacenar contraseñas, las técnicas más lentas como bcrypt o scrypt o PBKDF2 serán más apropiadas. Los comentarios sobre estas u otras técnicas que son mejores para almacenar contraseñas son bienvenidos. Pero estoy preocupado por el escenario anterior para el propósito de aprendizaje? Así que amablemente comparte tus pensamientos.