Acabo de encontrar un esquema de restablecimiento de contraseña / hashing de contraseña que nunca había visto antes. Soy escéptico, pero no puedo pensar en una razón concreta por la que esto es malo.
El esquema para la creación de una cuenta / el restablecimiento de la contraseña es así:
1) El usuario escribe la contraseña
"FuzzyCat"
en una aplicación del lado del cliente.2) La aplicación del lado del cliente anula la contraseña
hash("FuzzyCat") -> "99476bb..."
(posiblemente después de solicitar la política de hash - sal, qué función de hash, etc. - del servidor), y pasa el hash al servidor.3) El servidor almacena
"99476bb..."
en la base de datos como el hash de contraseña para ese usuario.4) Cuando el usuario ingresa a continuación, ingresa
"FuzzyCat"
, el servidor lo crea y lo compara con"99476bb..."
en la base de datos.
El caso de uso en el que vi esto es que las cuentas se crean inicialmente mediante un script de automatización como parte de un proceso masivo de varias horas, y preferiríamos que las contraseñas de texto simple floten en la memoria / en el disco durante ese tiempo. Todos los inicios de sesión posteriores por parte del usuario serán directamente al servicio a través de un canal seguro (nota: no https
, me refiero a "firmar el libro de registro para obtener acceso físico a la sala" tipo de canal seguro).
Para abordar los comentarios, la razón por la que no confiamos en el script de automatización es que está escrito en un idioma con cadenas inmutables y recolección de basura, por lo que cualquier memoria que contenga contraseñas se devolverá al sistema operativo sin poner a cero, lo cual no Cumplir con nuestras políticas internas para el manejo de contraseñas. Así que sí, la principal preocupación es un MitM pasivo.
Pregunta: ¿Qué posibles vulnerabilidades / problemas podría haber con este esquema?
El único en el que puedo pensar es que el servidor debe confiar en que el cliente sea honesto y siga la política de hash, lo que potencialmente permitirá a los usuarios colocar hashes débiles en la base de datos. Esto no es un gran problema porque al iniciar sesión, el servidor mantendrá su contraseña con la política de hash real y los hashes no coincidirán, por lo que no habrá inicio de sesión ni violación.
Por lo que puedo decir, no hay riesgo de que un atacante obtenga el hash porque no les ayuda a iniciar sesión. ¿Me estoy perdiendo algo?