Actualmente soy ingeniero en un proyecto en fase de desarrollo. Un 'módulo' en este proyecto proporciona la capacidad de autenticación / autorización del usuario. Sin embargo, hemos llegado a nuestra preocupación de que el algoritmo de hash de contraseñas puede no estar a la altura de la copia (alias no BCrypt). (¡Lo terrible no está muy seguro de qué es y de dónde vino!).
Esto obviamente tiene que cambiar y el parche está siendo programado. Naturalmente, tenemos que actualizar a todos nuestros usuarios de prueba porque sus contraseñas utilizarán el antiguo método de hash, no es un problema, todos los usuarios de demostración están automatizados en la compilación, por lo que está actualizando el script. Pero la siguiente pregunta es qué pasa si se trata de un sistema de producción con usuarios activos y obsoletos, de todas las cantidades. Lo que sería la mejor práctica.
- ¿Forzar automáticamente un restablecimiento de contraseña en cada usuario? Esto notificará a cada usuario que su contraseña ha sido cambiada y puede causar dudas / confusión y puede sospechar que ha habido una violación de seguridad. Es posible que se formulen más preguntas que no necesariamente puedan ser respondidas por las partes interesadas del sitio web.
- Actualice la base de datos para marcar si es el método nuevo o antiguo, luego, una vez que el usuario haya sido autenticado, actualice su contraseña en la base de datos usando. Requiere un poco de lógica en el servicio y la transición será impecable para cualquier usuario existente. El problema es que si hubo una violación, puede ser evidente que hay dos métodos aquí y si se encuentra que el menos seguro es tan inseguro, obviamente podría romperse.
- Restablece todas las contraseñas, usando una versión BCrypted del hash existente. Marcarlo como el estilo antiguo, por lo que para una autenticación exitosa solo se mantiene un hash de la contraseña en lugar de un hash de un hash.