Ho appena incontrato uno schema di hashing password / reimpostazione password che non ho mai visto prima. Sono scettico, ma non riesco a pensare a una ragione concreta per cui questo è male.
Lo schema per la creazione di un account / reimpostazione della password va così:
1) User types password
"FuzzyCat"
into a client-side app.2) Client-side app hashes the password
hash("FuzzyCat") -> "99476bb..."
(possibly after requesting the hashing policy - salt, which hash function, etc - from the server), and passes the hash to the server.3) Server stores
"99476bb..."
in the database as the password hash for that user.4) When the user comes to log in next, they enter
"FuzzyCat"
, the server hashes it and compares it to"99476bb..."
in the database.
Il caso d'uso in cui ho visto questo è che gli account sono inizialmente creati da uno script di automazione come parte di un processo bulk di diverse ore, e preferiremmo non avere le password in chiaro che girano in memoria / su disco durante quel periodo. Tutti gli accessi successivi da parte dell'utente saranno direttamente al servizio su un canale sicuro (nota: non https
, intendo "firma il logbook per ottenere l'accesso fisico alla stanza" del canale protetto).
Per indirizzare i commenti, il motivo per cui non ci fidiamo dello script di automazione è che è scritto in una lingua con stringhe e garbage collection immutabili, quindi qualsiasi memoria contenente password verrà restituita al SO non azzerata - che non soddisfare le nostre politiche interne per la gestione delle password. Quindi sì, la preoccupazione principale è un MitM passivo.
Domanda: quali possibili vulnerabilità / problemi potrebbero esserci con questo schema?
L'unico a cui posso pensare è che il server deve fare affidamento sul fatto che il client sia onesto e che segua la politica di hashing, potenzialmente permettendo agli utenti di inserire gli hash deboli nel db. Questo non è un grosso problema perché al login, il server hash la loro password con la vera politica di hashing e gli hash non corrispondono, ergo nessun login, nessuna violazione.
Per quanto posso dire, non c'è alcun rischio che un utente malintenzionato ottenga l'hash perché non li aiuta ad accedere. Mi manca qualcosa?