Da dove proviene il requisito "precedente 15"? Sembra improbabile che la sicurezza aumenti di molto: il mio primo passo sarebbe quello di ridurre questo se non proviene da requisiti legali, normativi, di settore o di controllo.
- Un utente malintenzionato che sta effettuando un attacco online non si noterà affatto
- Un utente malintenzionato con il tuo database PW che effettua un attacco offline contro solo le password correnti non si preoccuperà durante l'attacco
- Un'analisi complessa della notazione di pattern sulla parte degli attaccanti è troppo complessa per entrare qui, ma immagina un utente che usa football1, poi football10, football100, ecc. Lo schema è ovvio se hai qualche password, anche se football100000000 potrebbe non essere provato fino a quando non si è in grado di indovinare una password (se non del tutto, visto quante centinaia di migliaia di iterazioni si devono usare)
Si noti inoltre che provare N diversi valori PBKDF2 in una volta significa che è possibile utilizzare più core; Ad esempio, per 15 PBKDF2 viene eseguito a 1s ciascuno, se si dispone di 10 core, questo potrebbe richiedere un minimo di 2 secondi (10 nel primo secondo, 5 nel secondo secondo). Ti servirà lo stesso (o un po 'di più) tempo della CPU, però: attenzione.
Riducendo in modo significativo il tempo di esecuzione di PBKDF2 diminuisce , poiché l'autore dell'attacco deve eseguire meno lavoro nella stessa proporzione con meno lavoro. Se puoi permetterti di scegliere 1s di tempo CPU (presumibilmente per accessi poco frequenti o per una server farm molto potente), mantienilo! Ciò aumenterà drasticamente il carico di lavoro di un attaccante allo stesso livello che riduce il tuo; Non lo consiglio.
Se stai mirando a un secondo di lavoro su PBKDF2 per accesso, 15 utenti che effettuano l'accesso all'incirca nello stesso momento sono esattamente lo stesso carico di lavoro di 15 altre operazioni PBKDF2 salt uniche: assicurati di poterti permettere i tuoi attuali tempi target il carico di punta previsto per i prossimi 2-3 anni. Inoltre, con quale frequenza gli utenti cambieranno le loro password?
Un'altra alternativa:
- Non modificare il sale di un utente ogni volta.
- Questa è non una grande idea, ma può essere eseguita e risolverà il tuo problema di prestazioni. Tuttavia, gli attaccanti offline con l'elenco completo delle password avranno 16 volte le possibilità di indovinare le password per ogni tentativo.
- Solo cambiando il sale ogni 2 o 6 cambi di password finirebbe in una posizione intermedia - sarebbe meno grave se si hanno cambiamenti di password molto frequenti.
P.S. Sai che stai per ottenere utenti che usano P @ $$ w0rd1, P @ $$ w0rd2, P @ $$ w0rd3, P @ $$ w0rd ..., P @ $$ w0rd999, vero?