In un sistema di autenticazione basato sul web faccio quanto segue:
- Client: chiedi al server un "nonce".
- Cliente: genera un "cnonce".
- Cliente: hash (nonce + cnonce + password)
-
Client: invia cnonce e l'hash dal punto 3 al server.
-
Server: hash (nonce + cnonce + password)
- Server: confronta gli hash.
Questo mi imporrebbe di salvare le password in testo semplice / crittografato poiché il server ha bisogno di "password" per calcolare l'hash da confrontare.
Certo che non voglio farlo e quindi ho cancellato tutte le password salvate sul server con hash (password, salt). Ma ora non riesco a confrontarmi con l'hash che il client mi invia poiché non ho il componente della password.
Un modo per risolverlo sarebbe quello di fornire al client l'utente unico salt in modo che il client possa calcolare hash (nonce + cnonce + hash (password, salt)) e inviarlo al server, permettendo al server di confrontare gli hash. Ma secondo Come conservare il sale? il sale non dovrebbe mai essere condiviso.
Il motivo per cui utilizzo nonce su una connessione HTTPS è descritto in: Dovrei cancellare la password prima di inviarla al server?
Quindi la mia domanda è come uscire da questo ciclo infinito di "non fare"?