Il punto delle forti funzioni di hashing della password è rendere l'elaborazione della password lenta in modo che gli aggressori trovino più difficile eseguire un attacco di forza bruta sulla tua password. Sfortunatamente rende anche più lento per te; questo è il limite dell'esercizio. Al meglio , rendi la funzione n più lenta per te e n volte più lenta (con lo stesso n ) per l'attaccante; ma l'attaccante può acquistare alcuni "hardware specializzati" (ad esempio GPU o FPGA) che, a seconda della funzione utilizzata, possono permettergli di soffrire meno di te da tutte le iterazioni.
Quindi ciò che si desidera evitare è una funzione che aumenta l'attività di calcolo più per te che per l'utente malintenzionato. Usi una semplice CPU generica, probabilmente una sorta di PC compatibile x86. L'attaccante può acquistare PC, ma può anche acquistare alcune GPU o alcuni FPGA che possono fornire più potenza di calcolo (cioè più tentativi di password al secondo) per lo stesso budget.
Quindi, dovresti evitare SHA-256 e RIPEMD-160, entrambi basati su operazioni con interi a 32 bit che sono notevolmente efficienti su GPU. SHA-512 sarebbe un affare migliore: la CPU del tuo PC è piuttosto buona con operazioni a 64 bit (sia in modalità a 64 bit, sia tramite opcode SSE2 in modalità a 32 bit), mentre una GPU tipica no. L'uso di SHA-512 renderà l'attività 2 o 3 volte più difficile per l'aggressore che maneggia la GPU (guadagnerà comunque dall'uso della GPU, ma non tanto quanto con l'SHA-256).
Whirlpool è normalmente implementato con tabelle di ricerca e probabilmente sarà piuttosto lento su una GPU (ma dovrebbero essere esplorate le implementazioni bitslice). Tuttavia, ci si può aspettare che Whirlpool si dia una mappa abbastanza buona all'Fpga (proprio come AES), quindi se temi gli attaccanti avanzati che non evitano l'uso di FPGA, allora non usare Whirlpool qui.
Per riassumere , si può dire che PBKDF2 / SHA-512 sia la scelta migliore (probabilmente sarebbe meglio se si potesse usare bcrypt). Tuttavia, ricorda che tali differenze tendono ad essere sminuite da ciò che puoi ottenere con un password più sicura . L'uso di una password ad alta entropia è la prima linea di difesa e più importante della scelta della funzione di hashing.