Attualmente sto sviluppando un piccolo progetto in PHP, e poiché implica l'autenticazione dell'utente, ho cercato le opzioni che ho riguardo all'hashing. Ho optato per PBKDF2 principalmente per la sua natura iterativa, la flessibilità con gli algoritmi hash e l'estensione.
Quello che ho letto è che 8 ms (o 0,008 secondi) è qualcosa di un obiettivo per generare un hash. Perché questo valore specifico è l'obiettivo? Capisco il ragionamento che sta dietro ci vuole più tempo per generare un hash, ma perché 8ms in particolare? È semplicemente un buon valore bilanciato tra il tempo impiegato e la sicurezza, o c'è una ragione più specifica?
teorica
Diciamo che ho un server che può fare 6400 iterazioni con SHA256 con una lunghezza della chiave di 6 caratteri, con un sale che ha caratteri X e una password con caratteri Y lunghi in meno di 9 ms. Non sono sicuro che sia la "paura" che mi è stata inflitta, ma non la considererei sufficiente a causa del basso numero di iterazioni e della lunghezza della chiave estremamente breve nonostante sia salata e sottoposta a hash con ciò che è per tutti gli effetti e scopi un algoritmo sicuro. Quanto 9ms sul mio sistema saranno significativamente meno su un sistema dedicato a "crackare" l'hash. Di nuovo, questi valori sono solo teorici - non guardarli troppo.
Quindi, supponiamo di andare a 64000 iterazioni con una lunghezza della chiave di 60. Questo richiede quasi 90ms per calcolare, e lo considero sicuro a tutti gli effetti, sia a causa del suo elevato conteggio iterativo, sia della chiave di output la lunghezza e il tempo necessario per generare.
Più precisamente, ci vorrebbe 10 volte più a lungo per calcolare l'ultimo hash (rispetto al primo) indipendentemente dal sistema su cui viene calcolato, nonostante abbia impiegato circa il 91% in più della "regola 8ms" quando viene eseguito nel ambiente originale.
Quindi, da dove proviene questo valore di 8ms e su quali basi è raccomandato esattamente? L'8ms è basato sul tempo di calcolo del tuo ambiente o è calcolato con altri mezzi (ad esempio tramite un'applicazione di hash dedicata in esecuzione su una GPU)?