Supongamos que tenemos una base de datos con nombres de usuario y contraseñas, donde las contraseñas se protegen de forma ingenua utilizando una sola ronda de SHA-1 (como la práctica recomendada hace algunos años).
Ahora, digamos que deseamos actualizar la seguridad del almacenamiento de credenciales, pero los usuarios deben permanecer felizmente inconscientes de que se están produciendo cambios.
Obviamente, no tenemos las contraseñas en texto sin formato, pero estoy considerando simplemente tratar el sha1 (contraseña) como si fuera la contraseña en texto sin formato, y estoy seguro de eso.
Aquí está mi pensamiento:
- Generar sal aleatoria por usuario (128 bits)
- Reemplace
"username","sha1(password)"
en la base de datos con"username","salt","bcrypt(salt,sha1(password)),iterations=20000"
- Cambie el código de validación para validar las contraseñas haciendo primero sha1, luego codifique el resultado con el salt n veces y luego verifique.
¿Hay fallas evidentes en esta estrategia?
Aunque no es perfecto, ¿es razonable decir que esto mejora enormemente la seguridad de las contraseñas de los usuarios, en el caso de una infracción?