Gli algoritmi di hashing della password come PBKDF2, bcrypt e scrypt sono pensati per l'uso con password e sono volutamente lenti. Gli algoritmi di hashing crittografici sono veloci. Il digiuno è buono nella maggior parte delle situazioni, ma non qui. Rallentando l'algoritmo (di solito con l'iterazione) il lavoro dell'aggressore diventa molto più difficile. Gli hash delle password aggiungono anche un valore salt a ciascun hash per renderlo univoco in modo che un utente malintenzionato non possa attaccare più hash contemporaneamente.
Gli aggressori cercheranno di recuperare le password eseguendo attacchi di tipo "brute-force" dove indovinano le password tagliandole e confrontandole con la password memorizzata per determinare se corrispondono. Con le normali funzioni di hash crittografico (ad esempio MD5, SHA256), un utente malintenzionato può indovinare miliardi di password al secondo. Con PBKDF2, bcrypt o scrypt, l'utente malintenzionato può effettuare solo alcune migliaia di tentativi al secondo (o meno, a seconda della configurazione).
Questo significa che ogni password è molto più potente se vengono utilizzati PBKDF2, bcrypt o scrypt invece di una normale funzione di hash.
Inoltre, PBKDF2, bcrypt e scrypt utilizzano tutti valori "salt" casuali di grandi dimensioni per assicurarsi che la password di ciascun utente sia hash in modo univoco. Attaccare 100 hash delle password richiederà 100 volte più a lungo che attaccare un hash. Attaccare un milione richiederà un milione di volte più a lungo, ecc. Con SHA256, l'attaccante può tentare di crackare migliaia o milioni di hash allo stesso tempo con un minimo rallentamento.
Dovresti sempre utilizzare un hash della password o una "formula di derivazione della chiave" per le password piuttosto che un normale hash crittografico. È molto difficile selezionare password sufficientemente forti da resistere a uno sforzo di cracking dedicato se sono sottoposte a hash con qualcosa come SHA o MD5. Con PBKDF2, bcrypt o scrypt, le password possono essere di soli 7 o 8 caratteri, ma con MD5 o SHA devono avere almeno 13-14 caratteri.