Oltre all'eccellente risposta di John, c'è un'altra cosa importante da considerare.
Quando si controlla una password, viene speso molto tempo in azioni come cercare le informazioni sull'account memorizzate (nome utente, password) in un database.
Se si dispone di un algoritmo di hash veloce, tale ricerca occupa ora una parte significativa della convalida della password. Ciò rende relativamente facile per un intruso fare un attacco in cui spara solo nomi e password casuali e determina quali nomi invece di password non esistono sincronizzando le risposte.
Facendo un hashing lento della password in entrata prima di inviarlo al database per il confronto con la password memorizzata, si sta prendendo la durata della ricerca del database e il confronto delle password da soli per il tempo necessario per il controllo delle password.
Il risultato è che una ricerca fallita ora richiede lo stesso tempo (all'interno del margine per la latenza della rete, ecc.) Come uno di successo.
Naturalmente questo presuppone che hai cancellato la password in arrivo prima di provare a recuperare le informazioni dell'utente.
In caso contrario, un errore per un utente inesistente sarebbe molto più rapido di un errore per un utente esistente con una password errata, dando alla persona un attacco al sistema potenziale informazioni su quali dei tentativi effettuati conteneva nomi utente reali, anche se non sapeva che erano veri e propri nomi utente per cominciare.
Questo succede in pratica? Nessuna idea. Ma questa era una delle ragioni per i lenti meccanismi di hashing che il nostro team ci aveva detto diversi anni fa.