Mantiene una aplicación existente con una base de usuarios establecida. Con el tiempo se decide que la técnica actual de hashing de contraseñas está desactualizada y debe actualizarse. Además, por razones de UX, no desea que los usuarios existentes se vean obligados a actualizar su contraseña. Toda la actualización de hashing de contraseñas debe realizarse detrás de la pantalla.
Suponga un modelo de base de datos 'simplista' para usuarios que contiene:
- CARNÉ DE IDENTIDAD
- Contraseña
¿Cómo se llega a resolver tal requisito?
Mis pensamientos actuales son:
- crear un nuevo método de hash en la clase apropiada
- actualizar la tabla de usuario en la base de datos para contener un campo de contraseña adicional
- Una vez que un usuario inicia sesión con éxito utilizando el hash de contraseña obsoleto, complete el segundo campo de contraseña con el hash actualizado
Esto me deja con el problema de que no puedo diferenciar razonablemente entre los usuarios que tienen y los que no han actualizado su hash de contraseña y, por lo tanto, me veré obligado a verificar ambos. Esto parece terriblemente defectuoso.
Además, esto básicamente significa que la antigua técnica de hashing podría verse obligada a permanecer indefinidamente hasta que cada usuario haya actualizado su contraseña. Solo en ese momento podría comenzar a eliminar la antigua comprobación de hashing y eliminar el campo de base de datos superfluo.
Estoy buscando principalmente algunos consejos de diseño aquí, ya que mi 'solución' actual está sucia, incompleta y lo que no, pero si se requiere un código real para describir una posible solución, siéntase libre de usar cualquier lenguaje.