Soy un principiante (casi completo) y esta es mi primera incursión en el cifrado; de hecho, esta es probablemente la primera vez que uso la palabra.¿Cómo elegir una sal para una función de hash destinada a proteger las contraseñas?
Aquí está mi pregunta: Para una aplicación web no bancaria/militar, o incluso comercial, ¿cuál es la forma correcta de elegir una sal para una función de hash usada para contraseñas?
Puedo generar fácilmente una sal pseudoaleatoria para cada nuevo usuario y anexar esa sal a su pw antes de aplicar la función hash. Pero aún necesito almacenar la sal, así que, presumiblemente, cualquiera que tenga acceso a las contraseñas hash también obtiene las sales.
¿El beneficio de la sal es simplemente hacer que el pw sea "más aleatorio" y, por lo tanto, anular las tablas de arcoiris basadas en diccionarios estándar?
¿Alguno de los siguientes ser buenos & ideas prácticas:
- tienda de la sal en una base de datos separada - tal vez un sistema separado, sin duda un host diferente, nombre, PW, etc.
- generar el sal basado en un hash de un nombre de usuario (o primero + apellido, o fecha de registro), presumiblemente usando una función hash diferente? Entonces, la sal misma no se almacenaría en el DB; solo los datos utilizados para calcularlo ...
- Almacenar en el db un valor que concatene el hash pw y la sal, de una manera no obvia (p. sal es 10 claves aleatorias, y se inyectan dentro del hash pw entre los números de letra 1 & 2, 4 & 5, 8 & 9, etc.).
Como una pregunta complementaria, ¿qué tan fácil es cambiar un algoritmo hash salado al actualizar el software del sitio web? Se siente una pesadilla en este momento.
Duplicado: http://stackoverflow.com/questions/1191112/password-hashing-salt-and-storage-of-hashed-values – tangens
Gracias. No aborda 1, 2 y 3, ¿o me falta algo? – JDelage
Ya hay MUCHA información sobre esto. En resumen: use sales por usuario, use datos ALEATORIOS para la sal y no se preocupe por "proteger" las sales ya que no son secretas como tal. – snemarch