En un sistema de autenticación basado en web, hago lo siguiente:
- Cliente: solicite al servidor un "nonce".
- Cliente: genere un "cnonce".
- Cliente: hash (nonce + cnonce + contraseña)
-
Cliente: envíe cnonce y el hash desde el punto 3 al servidor.
-
Servidor: hash (nonce + cnonce + password)
- Servidor: Compara los hashes.
Esto requeriría que guarde las contraseñas en texto sin formato / cifrado ya que el servidor necesita una "contraseña" para calcular el hash con el que comparar.
Por supuesto, no quiero hacer esto y, por lo tanto, hash todas las contraseñas guardadas en el servidor con hash (contraseña, salt). Pero ahora no puedo comparar con el hash que me envía el cliente ya que no tengo el componente de contraseña.
Una forma de resolver esto sería proporcionarle al cliente el usuario único salt para que el cliente pueda calcular el hash (nonce + cnonce + hash (contraseña, salt)) y enviarlo al servidor, permitiendo que el servidor compare Los hashes. Pero de acuerdo con ¿Cómo almacenar sal? la sal nunca debe compartirse.
La razón por la que uso nonce en una conexión HTTPS se describe en: ¿Debo copiar la contraseña antes de enviarla al servidor?
¿Entonces mi pregunta es cómo salir de este bucle infinito de "no hacer"?