Questa domanda è un follow-up di un commento di Tobias Kienzler alla risposta a" Qual è lo scopo dell'impostazione "Età minima della password"? .
Considerare una politica per le password che le nuove password non possono essere identiche alla password corrente o alle cinque password dell'utente che precedono la password corrente. Né possono essere simili alla password corrente o a nessuna di queste password precedenti, dove "simile" è definito come Levenshtein distanza 2 o inferiore. (Per rispondere a questa domanda, non assumere requisiti di complessità diversi da sei o più caratteri, una lettera e una cifra.) Ciò protegge, ad esempio, da "bush41", "clinton42", "bush-43" (che deve essere fermato) ), "obama44" (che dovrebbe essere consentito) e "clinton 45" o "bush 45" (entrambi devono essere fermati).
Il normale flusso di modifica della password richiede la password corrente in modo che qualcuno non possa eseguire una modifica della password con un cookie di sessione Firesheeped. Il flusso di modifica della password alternativo invia un token di ripristino attraverso un altro canale, ad esempio e-mail, voce o testo. Nel flusso ordinario, posso verificare se la nuova password è simile alla password corrente utilizzando la funzione di distanza Levenshtein da una libreria. Ma non ho la password precedente; tutto ciò che ho sono salate di PBKDF2. Né posso verificare la somiglianza con la password corrente se l'utente ha inserito un token di reimpostazione della password anziché la password corrente.
Nel suddetto commento, Tobias Kienzler ha raccomandato di "calcolare tutte le mutazioni della nuova password entro l'inaccettabile distanza di modifica, calcolare i loro hash e confrontarli con gli hash delle password precedenti (con i rispettivi sali)." In una risposta a "Sicurezza della password" , un rispondi a" Facebook memorizza le password in testo semplice? " e una risposta a "Come può un sistema imporre un numero minimo di caratteri modificati nelle password, senza memorizzare o elaborare vecchie password in chiaro?" , apsillers, Michał Šrajer e Ori hanno suggerito qualcosa di simile.
Ma non vedo come sia trattabile sull'hardware attuale per calcolare l'insieme di tutte le stringhe con la distanza 2 di Levenshtein da una passphrase di 20 caratteri oltre e tutte le stringhe, specialmente con un hash intenzionalmente lento come PBKDF2 e un set di caratteri grandi come Unicode. Sembrerebbe richiedere intorno agli hash h ( nc ) s , dove h è la lunghezza della cronologia (qui 5), n è il numero di caratteri in una password (e quindi il numero di posizioni in cui può avvenire una sostituzione o un inserimento), c è il numero di caratteri nel set di caratteri (95 per ASCII stampabile o molto più grande per Unicode stampabile), e s è la distanza di modifica massima per chiamare due password "simili".
Quindi, qual è questo modo computazionalmente fattibile per testare una password per la somiglianza con le password precedenti senza memorizzare le password precedenti con crittografia reversibile? Richiederebbe l'applicazione di alcune o tutte le seguenti semplificazioni alla definizione di somiglianza e, in caso affermativo, tali semplificazioni comprometterebbero la sicurezza del sistema di password nella pratica?
- Richiede che tutti i caratteri nelle password siano stampabili ASCII (spazio a ~).
- Riduci la distanza di Levenshtein di una "password simile" a 1.
- Confronta solo la password corrente per somiglianza e le password precedenti solo per identità.
- Sacrifica volontariamente la disponibilità per proteggere la riservatezza delle password. Quando un utente richiede una modifica della password, blocca l'utente per il resto della giornata, mentre il sistema enumera tutte le possibili password simili e impedisce ad altri utenti di modificare le proprie password se vengono inserite in coda troppe ricerche di similarità.