Se gli utenti hanno fornito password casuali con l'equivalente di oltre 128 bit di entropia che non vengono mai utilizzati altrove, non c'è bisogno di una funzione hash lenta come bcrypt, scrypt, sha256crypt, sha512crypt o PBKDF. Allo stesso modo, non ci sarebbe bisogno di un sale sull'hash.
Perché? La forzatura bruta è semplicemente irrealizzabile quando il tempo previsto è O (2 128 ); ad es., anche con miliardi di computer che eseguono miliardi di hash per millisecondo, non sarai in grado di forzare un hash entropico a 128 bit in milioni di anni (precisamente avresti circa 1 su 10000 possibilità di romperlo). Certo, non esiste un metodo affidabile per testare la forza delle password create dall'utente, poiché l'entropia dipende molto dal modello. Ad esempio, una password come: Qwertyuiopasdfghjklzxcvbnm
apparirà come 132 bit nonostante sia l'ordine dei tasti della tastiera e sia piuttosto bassa entropia. O se la mia password per security.stackexchange.com era https://security.stackexchange.com
quella calcolatrice dice 147 bit di entropia (quando è estremamente debole). D'altra parte, conoscendo il metodo di generazione della password è possibile calcolare in modo affidabile l'entropia delle password; quindi, se imponi a tutti gli utenti di imparare una password casuale a 128 bit che hai generato, puoi assicurarti che le password siano abbastanza forti.
Ci sarebbe comunque bisogno di una funzione di hash anche se non dovresti mai memorizzare le password in testo semplice. Un utente malintenzionato non dovrebbe essere in grado di trovare un elenco di password in chiaro nel database da altri compromessi (ad es. Trovare un vecchio backup, SQL injection, perdita di memoria, ecc.). Un semplice hash (ad esempio, SHA-2) potrebbe funzionare per impedirlo.