Tengo las contraseñas de las cuentas de usuario almacenadas en una base de datos mediante una función de hash criptográfica insegura (antigua).
¿Cuál es el enfoque mejor / usual para cambiar la función de hash de contraseña? Solo dos ideas vienen a mi mente:
-
Indica a todos los usuarios que cambien sus contraseñas en el próximo inicio de sesión y hagan un hash de sus contraseñas con la nueva función cuando lo hagan. Esta no es una buena opción debido a muchos problemas (usuarios inactivos, largo período de migración, implementación complicada ...)
-
Hash los valores hash antiguos con la nueva función hash, y vuelve a escribir el método para verificar las contraseñas en la base de datos: newHash (salt + oldHash (salt + password))
Este doble hash me parece una buena idea, elegante y simple de implementar.
Me gustaría saber si hay advertencias que no estoy notando aquí. ¿Es así como se hace normalmente, o hay otro método? ¿Existe alguna vulnerabilidad criptográfica conocida en el uso de la salida de la función hash débil como entrada de la función hash fuerte.
Si es una buena idea, ¿qué pasa con la sal? ¿Estaría bien usar la misma sal para ambas funciones hash?