I crittografi potrebbero sottolineare che, quando leggete la stampa fine, non vi è alcuna prova che esistano effettivamente funzioni di hash sicure. L'unica cosa che abbiamo ora sono candidati per i quali non è stata ancora trovata alcuna debolezza.
Quindi il meglio che puoi sperare è una funzione che è sopravvissuta da molti crittografi per lungo tempo. Inoltre, è necessario disporre di un output sufficientemente ampio (256 bit sono sufficienti se si desidera ottenere una "sicurezza a 128 bit" e andare oltre ha poco senso). In questo momento, a partire dall'estate 2011, questo indica SHA-256 o SHA-512, non Whirlpool.
Basare il conteggio delle iterazioni sul tempo impiegato da una macchina tipica è una buona idea - ma basandola sul tempo in cui realmente assume la tua macchina è < strong> non una buona idea. Altrimenti, si potrebbero ottenere conteggi di iterazioni bassi per alcune password perché la macchina stava gestendo molte richieste in quel momento (una situazione che un utente malintenzionato potrebbe forzare, comunque). L'uso di molte iterazioni ha lo scopo di ostacolare gli hacker rendendo l'hashing della password lento sul computer dell'attaccante - che rende anche lento il tuo sistema è uno sfortunato sottoprodotto; ma il vero bersaglio è qualunque sia la potenza della macchina che l'attaccante potrebbe radunare. Dal momento che non puoi davvero fare benchmark sulla macchina dell'attaccante, devi ricorrere a stime approssimative, quindi a un conteggio fisso, il più alto possibile, purché l'onere medio sia tollerabile sul tuo sistema (la parola chiave qui è "media", che squalifica una misura dinamica come intendi eseguire).
Inoltre, la macchina dell'attaccante non ha bisogno del tuo; potrebbe essere, ad esempio, una GPU o un FPGA , che offre capacità di calcolo distinte da ciò che è possibile ottenere su un server tipico. Si desidera una funzione per la quale un utente malintenzionato non sarà in grado di ottenere enormi incrementi di prestazioni utilizzando hardware non PC. Anche in questo caso, questo promuove SHA-256 o SHA-512, che sono pensati per l'efficienza della CPU (con operazioni aritmetiche a 32 o 64 bit), non Whirlpool, che può beneficiare di ottimizzazioni hardware simili a quelle per cui è stato progettato AES.
Infine, le iterazioni sono solo una parte del lavoro; hai anche bisogno di un sale abbastanza lungo, abbastanza unico. Le iterazioni e la salatura possono essere un po 'complicate da fare allo stesso tempo; sei caldamente incoraggiato a utilizzare una costruzione standard come PBKDF2 (sebbene fosse inteso come una funzione di derivazione della chiave, non una password hasher, PBKDF2 risulta essere abbastanza buono anche in questo caso.