TLDR: per alcuni utenti è già necessaria l ' autenticazione a due fattori. Sto hashing, saltando e facendo cose per incoraggiare passphrase lunghe. Non mi interessano i meriti delle regole di complessità delle password in generale. Alcuni di questi sono richiesti dalla legge e altri sono richiesti dal cliente. La mia domanda è piuttosto ristretta: devo rilevare le password in leetspeak come Tr0ub4dor&3 come parole del dizionario, e quindi fallire le password che consistono principalmente in una singola parola del dizionario (anche se leeted). Le passphrase di più parole sono sempre accettate indipendentemente dal fatto che vengano cancellate o meno, questa è solo una domanda su coloro che scelgono di utilizzare password brevi più tradizionali.
Sono lo sviluppatore principale di un imminente sito web del governo che esporrà dati personali sensibili informazioni (precedenti penali, SSN, ecc. principalmente). Il sito Web verrà utilizzato dal pubblico in generale, per eseguire controlli in background sui dipendenti, ecc.
Sul backend, sto memorizzando le password con hash PBKDF2 salate per utente con iterazioni molto elevate , quindi gli attacchi di hashing di forza bruta contro password più forti non sono realistici (attualmente) e il sito web blocca l'utente per 10 minuti dopo cinque tentativi errati, quindi non puoi nemmeno usare la forza bruta in questo modo.
Ricevo alcune critiche dai miei clienti / partner in merito alla gravità delle regole per le password che ho implementato.
Ovviamente voglio che le persone utilizzino passphrase di 16-20 caratteri, ma questa è una burocrazia lenta . Quindi, oltre a consentire / incoraggiare quelle buone password, devo consentire alcune password "dure" più brevi. Sto solo cercando di limitare la nostra visibilità.
In particolare, il requisito "nessuna parola del dizionario" sta causando frustrazione alle persone, poiché non ammetto le classiche password in leetspeak come il famoso Tr0ub4dor&3 di XKCD. (Per i curiosi, eseguo la password proposta tramite un traduttore di permutazioni leetspeak (incluso il rilascio del carattere) e quindi confronto ogni permutazione con un dizionario)
Sono troppo severo? Sono un grande sostenitore della "regola dell'usabilità Avids": la sicurezza a scapito dell'usabilità va a scapito della sicurezza. Ma in questo caso, penso che sia più una questione di abitudine / educazione. Consento password diceware / passphrase leggibili senza restrizioni, solo le password "normali" ottengono requisiti più rigorosi. XKCD # 936: password breve e complessa o passphrase del dizionario lunga?
Dovrei provare a risolvere questo problema con un aiuto dell'interfaccia utente migliore? Dovrei restare fedele alle mie pistole? I numerosi recenti hack di alto profilo, in particolare quelli che hanno esposto le password, mi fanno pensare di avere ragione, ma non voglio nemmeno rendere le cose stupide senza motivo. Dato che sono abbastanza protetto dagli attacchi di forza bruta (penso / spero), questa complessità non è necessaria? O solo una buona difesa in profondità?
Per coloro che non riescono a trovare passphrase o password veramente casuali, le password "due parole più num / simboli" sembrano essere abbastanza facili e almeno più difficili da hackerare , se riesco a convincere la gente a leggere le istruzioni ...
Idee:
- Suggerimenti per la password migliori / visualizzati in modo più visibile (troppo soggettivo?)
- Miglior misuratore di forza (qualcosa basato su zxcvbn? - fallirebbe le parole del dizionario sul lato client piuttosto che dopo un invio)
- Non consentire tutte le password "brevi", costringere le persone a utilizzare solo passphrase, il che rende le regole sono più semplici?
- pulsante "fammi una password" che genera una passphrase per loro e li fa copiarla nei campi della password
- Rinunciare e lasciare passare le password leetspeek?
Ecco cosa ho attualmente nelle mie istruzioni / regole per la password:
-
Passphrase di 16 caratteri o più lunga (massimo illimitato)
o
-
Almeno otto caratteri
- Contiene tre dei seguenti
- MAIUSCOLO
- minuscolo
- Numeri 0123456789
- Simboli! @ # $% ^ & * () _ - + =,. / <>?;: '"
- Non basato su una parola del dizionario
- Non è il tuo nome utente
Esempi di password che non saranno accettate
- Troubador (parola del dizionario singola)
- Troubador&3 (parola del dizionario singola più numeri e simboli)
- Tr0ub4dor&3 (Basato su una singola parola del dizionario)
- 12345678 (Non contiene tipi di carattere 3/4)
- abcdefgh (Non contiene tipi di carattere 3/4)
- ABCDEFGH (Non contiene tipi di caratteri 3/4)
- ABCdefgh (Non contiene tipi di caratteri 3/4)
- ABC @ # $%! (Non contiene non contengono 3/4 tipi di carattere)
- ab12CD (Troppo corto)
Esempi di password che verranno accettate (non utilizzare nessuna di queste password ds):
- corretta graffetta della batteria del cavallo (password Diceware)
- dovrebbe fluttuare le cose modellano il mandato (Passphrase leggibile - collegamento a makemeapassword.org)
- GoodPassword4! (più parole, maiuscole, minuscole, numeri, simboli)
- Yyqlzka6IAGMyoZPAGpP (stringa casuale che utilizza maiuscole, minuscole e numeri)