Creazione di più password sicure e facili da ricordare

6

Recentemente ho sviluppato una nuova applicazione web a cui i nostri clienti si collegano utilizzando un nome utente e una password. Mentre stiamo installando questo sistema, imposteremo noi stessi i nomi utente e le password, il cliente non potrà decidere quale sarà la sua password iniziale.

Quindi devo assegnare una password a ciascuno dei nostri clienti.

Il guaio è che il mio capo vuole che sia facile da ricordare. Ha suggerito l'uso di "mela", "arancia", "banana", ecc. Questo ci lascerebbe a rischio di un attacco di dizionario e, visto che l'applicazione può visualizzare alcune informazioni sensibili, sarebbe una preoccupazione.

In un mondo perfetto, le password dovrebbero essere lunghe circa 6-8 caratteri, facili da ricordare e non includere spazi o caratteri speciali. Ma devono anche essere al sicuro.

Qual è il modo migliore per farlo? Ho visto il x fumetto kcd riguardante parole casuali per password sicure ma, se accorcio l'idea da quattro a solo due brevi, casuali parole, sarebbe sicuro? Quanto sarebbe sicura una password generata da questo sito essere?

La mia soluzione scelta: come da risposta di Terry, permetterò agli utenti di cambiare la loro password da soli, perché credo che questo sia il modo migliore per noi.

    
posta bobble14988 18.09.2012 - 12:26
fonte

6 risposte

14

Qual è esattamente il problema con una password completamente casuale?

Le password generate automaticamente dovrebbero essere cambiate dai tuoi clienti al primo accesso comunque, quindi non ci sarà un problema di usabilità. Non è una buona pratica per i tuoi clienti mantenere la password iniziale, in quanto dovrebbe essere inviata a loro in un formato testo normale. A tale scopo, i token di accesso una tantum sarebbero molto più sicuri.

Una password contenente due parole del dizionario IS NOT secure. Un semplice attacco di dizionario che provi varie combinazioni di parole creerebbe facilmente la tua password.

    
risposta data 18.09.2012 - 12:38
fonte
4

Utilizzare più parole invece di una singola password è in realtà una buona idea, ma solo perché ci sono così tante parole possibili disponibili. Puoi calcolare tu stesso le combinazioni possibili:

Random characters:
26 characters in alphabet ^ 8 places = 2.0E11 combinations
52 case sensitive characters ^ 8 places = 5.3E13 combinations

Sentence with words:
135'000 words in dictionary ^ 4 places = 3.3E20 combinations

Questo si ispira ai seguenti punti importanti:

  1. Hai bisogno di un dizionario abbastanza grande ("mela", "arancia" e "banana" è ovviamente uno scherzo)
  2. Usa abbastanza parole, 4 mi sembra necessario, specialmente se la tua frase dovrebbe essere leggibile (gruppi più piccoli con sostantivi / verbi).

Se crei frasi leggibili, possono essere un po 'più lunghe senza perdere il vantaggio di una facile memorizzazione. "Il cane salta sul recinto blu" non è più difficile da ricordare di "recinzione per cani sopra il blu" .

    
risposta data 18.09.2012 - 13:32
fonte
3

Ecco un tipo di password che è "ragionevolmente" robusta e tuttavia "ragionevolmente" facile da ricordare e digitare:

Select two random lowercase letters, then two random digits, then two random uppercase letters, then two random digits.

Il mix minuscolo / maiuscolo e le cifre consentono a tali password di essere accettate dalla maggior parte delle "regole password". L'entropia di tali password è di circa 32 bit (perché 26 2 * 10 2 * 26 2 * 10 2 = 4569760000, che è leggermente superiore a 2 32 ). Questo non è molto, ma è sufficiente per contrastare gli attacchi di dizionario online (quando gli aggressori tentano di accedere al server "indovinando" la password, possibilmente con uno script). Offrono una resistenza non trascurabile agli attacchi del dizionario offline (ad esempio per un file crittografato con password o la memorizzazione di password hash in un database) SE (e solo se) vengono utilizzati con tecniche di rafforzamento password appropriate, ovvero sali e hashing lento ( bcrypt ).

Si scopre che trovo tali password facili da ricordare. Ci sono indizi indiretti relativamente convincenti che io sono un essere umano e che il mio cervello funziona, almeno qualitativamente, sulla stessa linea di qualsiasi altro essere umano, inclusi i "manager". Pertanto, è plausibile che il tuo manager troverebbe anche queste password facili da ricordare.

Importante: quando dico random , intendo. La casualità appropriata non può essere raggiunta nella privacy di un cervello umano. Devi:

  1. utilizzare un computer per generare cifre e lettere casuali;
  2. all'interno di quel computer, si basano su un PRNG crittograficamente sicuro (ad esempio /dev/urandom su Linux / FreeBSD / MacOS X o CryptGenRandom() su Windows);
  3. accetta la password. Non generare un centinaio di password finché non ne raggiungi una che ti piace, perché questo riduce la tua entropia. Genera una password e imparala.

Idealmente, non permetteremo agli utenti di scegliere le proprie password; forniremmo uno strumento che genera password per loro. A seconda della situazione, sicuro trasmettere la password generata dal computer all'utente umano potrebbe rivelarsi difficile, motivo per cui non siamo sempre nel caso ideale.

Sembra eccessivamente ottimistico aspettarsi che gli utenti medi usino e ricordino le password con un'entropia di oltre 32 bit o giù di lì.

Se il tuo manager non è cooperativo, c'è un piano alternativo: digli di scrivere la sua password su un pezzo di carta e di conservarla nel suo portafoglio. Un portafoglio è relativamente sicuro: almeno, se ne prende cura quotidianamente. Questo si prende cura della parte "facile da ricordare", almeno per i primi giorni. Inoltre, questo è ciò che il presidente degli Stati Uniti fa per alcuni dei suoi codici di lancio nucleari (assicurati di far sapere anche al tuo manager).

Fai non applica una regola di modifica della password ogni mese: tali regole sono fastidiose e trasformano utenti in nemici (ovvero più o meno complici volontari per l'aggressore).

Assicurati che gli utenti sappiano che dovrebbero segnalare tempestivamente la perdita di password e che non saranno biasimati . Realisticamente, quando si hanno più di una dozzina di utenti, si verificherà una perdita di password (indipendentemente dal fatto che la password sia memorizzata in un portafoglio o in un cervello). L'unica cosa peggiore di una password persa è un utente che nasconde la fuga dalla paura di una sanzione.

    
risposta data 18.09.2012 - 14:40
fonte
3

The trouble is that my boss wants it to be easy to remember

Poi chiedigli come lo ha quantificato e quanto dovrebbe essere facile entrare nel sistema.

La risposta è stata accettata, tuttavia ci sono problemi importanti che nessuno sta affrontando. Sì, le password dovrebbero avere un'entropia adeguata per impedire che vengano forzate brutalmente, tuttavia, poiché lo sviluppatore dell'applicazione non è l'unico modo per proteggere il sistema. È necessario aggiungere ulteriori controlli per limitare la frequenza con cui un determinato account tenta di accedere e, probabilmente, limitare il numero di accessi non riusciti per un account e da un indirizzo remoto specifico, il che implica anche un meccanismo di segnalazione e un mezzo di sblocco.

Come per la risposta accettata, NON dovresti scegliere le password per gli utenti. Genera in ogni modo una password iniziale, ma la tua applicazione dovrebbe costringere l'utente a cambiarla al primo accesso a qualcosa che soddisfi i tuoi requisiti di complessità ma che l' utente può ricordare. Se questo è un servizio pubblico, allora meglio usare openid.

    
risposta data 18.09.2012 - 22:28
fonte
2

Se dici 6-8 caratteri, sceglierei 8.

La massima sicurezza per una password con solo lettere minuscole e numeri ma comunque facile da ricordare sarebbe questa:
Utilizza alterazione di vocali e consonanti, quindi la password è sempre pronunciabile .

In PHP questa sarebbe la funzione:

function generate_pass(){
    $b="euioayj"; // counts as vowel
    $v="qwrtzpsdfghklxcvbnm1234567890qwrtzpsdfghjklxcvbnm"; // count as consonants
    $blen=strlen($b)-1;
    $vlen=strlen($v)-1;

    do{
        $pass=$b[rand(1,$blen)].$v[rand(1,$vlen)]. 
        $b[rand(1,$blen)]. $v[rand(1,$vlen)]. 
        $b[rand(1,$blen)]. $v[rand(1,$vlen)]. 
        $b[rand(1,$blen)]. $v[rand(1,$vlen)];
    } while (!preg_match('/\d/',$pass));
    return $pass;
}
    
risposta data 18.09.2012 - 21:00
fonte
-1

Crea una parola / password universale. Ad esempio: 12howareyou

Quindi aggiungi ad esso il nome che ti viene in primo luogo su dove hai bisogno della password. Ad esempio: stackexchange12howareyou o 12howareyoustackexchange. Per quest'ultimo esempio, se si conosce a memoria la password universale, sarà possibile digitarla molto rapidamente. Guardando il titolo del sito web, o l'url, o qualcos'altro, conoscerai il resto della password, dovrai solo aggiungerlo.

12howareyoureddit

12howareyougmail

12howareyoumicrosoft

12howareyouSOMEWORDABOUTTHEPLACEWHEREYOUNEEDIT

In questo modo conoscerai sempre la password (una parte di essa già conosci, l'altra parte che puoi facilmente conoscere) e nessuno può trovarla poiché non conoscono la parola / password universale né dove si trova ( dopo, prima di websitename),

    
risposta data 06.08.2017 - 01:55
fonte

Leggi altre domande sui tag