Come devo generare in modo sicuro password casuali quando si importano nuovi utenti?

2

Ho bisogno di generare password casuali quando importi nuovi utenti da una fonte esterna. Al momento lo faccio prendendo un assortimento casuale di 8 lettere minuscole / maiuscole e numeri. Sto anche usando rand di Ruby come PRNG. È crittograficamente sicuro?

    
posta 123 22.05.2017 - 16:14
fonte

8 risposte

8

Prima di tutto, devi usare un generatore di numeri casuali sicuro, come SecureRandom .

In secondo luogo, dovresti scegliere un livello di sicurezza di destinazione per le password generate, cioè quanto dovrebbero essere difficili da decifrare? I livelli di sicurezza sono spesso indicati in bit , cioè il logaritmo di base 2 del numero di password equiprobabili distinte. In parole più semplici:

  • Un livello di sicurezza a 64 bit significa che ci sono 2 ^ 64 password distinte e il tuo sistema ha la stessa probabilità di sceglierne uno come gli altri;
  • Un "assortimento casuale di 8 lettere minuscole / maiuscole e numeri" è composto da 62 caratteri distinti, il che significa che scegliere uno di questi caratteri a caso fornisce log2 (62) ≈ 6 bit di sicurezza. Scegliendo 8 di questi caratteri in modo indipendente a caso fornisce log2 (62) * 8 ≈ 48 bit di sicurezza.

48 bit sono crackabili nella pratica per un attaccante davvero dedicato; Consiglierei un livello di sicurezza a 64 bit come minimo indispensabile per le password e preferisco circa 80 bit per il mio. Con lettere minuscole / maiuscole + cifre, sono necessari 11 caratteri casuali per un livello di sicurezza a 64 bit e 13 caratteri per un livello di sicurezza a 78 bit.

Prima di una modifica, la tua domanda ha chiesto l'effetto dell'aggiunta di simboli alle tue password, come pure la dimensione dell'alfabeto a circa 95 caratteri, e log2 (95) ≈ 6.6, che porta quelle dimensioni della password di un carattere: 10 caratteri per una password a 64 bit e 12 per una password a 79 bit. Se stai generando password casuali, puoi quindi vedere che non è un grande effetto.

    
risposta data 22.05.2017 - 19:37
fonte
5

8 lowercase/uppercase letters, and numbers

Questo è il minimo indispensabile di una politica di password debole. Soprattutto 8 caratteri non sono sufficienti.

Come stai generando le tue password, perché limitarti alle password che sono abbastanza deboli e facili da applicare? Suggerirei almeno 64bits , ma non c'è davvero nessuna buona ragione per non andare con 128/160, che sarebbe essere più sicuro.

Avrai anche il problema di distribuire le password, che probabilmente saranno insicuri (probabilmente email?).

Per questo motivo, suggerirei vivamente di creare queste uniche password che l'utente deve modificare dopo il successivo login riuscito (quindi in pratica diventa un token di reimpostazione della password).

    
risposta data 22.05.2017 - 16:31
fonte
4

In Ruby, puoi semplicemente utilizzare SecureRandom.hex per le password casuali che l'utente deve modificare.

[1] pry(main)> require 'securerandom'
=> true
[2] pry(main)> SecureRandom.hex
=> "c3c4fe04dcc0d388fa37fc5991423a5d"
[3] pry(main)> 

Utilizza il generatore di numeri casuali sicuro fornito dal sistema operativo, mentre la funzione rand() è un Mersenne Twister (facile da prevedere una volta visualizzato l'output).

Anche la lunghezza predefinita va bene.

    
risposta data 22.05.2017 - 18:35
fonte
2

Il modo in cui lo fai è generalmente buono.

Assicurati di utilizzare un generatore di numeri casuali sicuro. Alcuni PRNG creano output prevedibili, rendendo possibile indovinare la password di un altro utente dalla mia.

Maggiore è il rendimento dell'algoritmo, maggiore sarà la sicurezza della password. Ciò significa che più lunga è la password, più sicura è. Tuttavia, una password più lunga sarà anche più difficile da digitare per l'utente. Usa otto caratteri, che è un po 'basso. Raccomando almeno 10 caratteri.

Allo stesso modo, inclusi i caratteri di punteggiatura, aumenta un po 'la sicurezza.

Per rendere le password più semplici per i tuoi utenti, potresti voler rimuovere caratteri uguali, come 0, o e O. Esistono anche algoritmi che creano password un po 'memorabili, come "NaughtyChopstick21 @". Tuttavia, spesso è meglio se gli utenti utilizzano un gestore di password o creano personalmente una password memorabile e sicura.

    
risposta data 22.05.2017 - 16:23
fonte
1

I requisiti della tua password potrebbero essere migliori ma probabilmente funzionano come password temporanea. Sarei più preoccupato di come distribuirai quelle password. Probabilmente via email? Se sei che è molto insicuro. Se segui questo percorso, dovresti consentire l'utilizzo delle password una sola volta.

rand non è crittograficamente sicuro. Vorrei invece utilizzare sysrandom .

    
risposta data 22.05.2017 - 18:04
fonte
0

Per le password generate casualmente esistono due misure importanti:

  • Rendi l'entropia della password abbastanza alta
  • Rendi il più semplice possibile.

Devi decidere quanti bit di sicurezza sono necessari. 8 caratteri alfanumerici non forniscono abbastanza entropia, ci sono due modi per migliorarli:

  • Utilizza un set più grande di possibili caratteri
  • Utilizza una password più lunga

Rendere la password più lunga è il modo più efficace per aumentare l'entropia delle tue password. È anche l'approccio più user friendly perché i personaggi più diversi che usi più difficile saranno quelli da digitare. E anche se non verranno digitati dall'utente, i caratteri più diversi renderanno anche la password più difficile da copiare e incollare e più probabilmente innescheranno problemi di interoperabilità.

Direi che sei già andato troppo oltre usando tutti i caratteri alfanumerici. Per renderlo più facile da usare, consiglierei di attenersi solo alle lettere minuscole. E per renderlo sicuro ti consiglio di rendere la password abbastanza lunga.

Supponete che il vostro obiettivo di sicurezza sia di 64 bit, potreste scegliere:

  • 14 caratteri minuscoli casuali
  • 10 caratteri casuali da tutti i caratteri ASCII stampabili

L'inconveniente di dover gestire tutti i caratteri speciali è molto peggio per l'utente che l'inconveniente di avere la password generata di 4 caratteri in più.

    
risposta data 22.05.2017 - 22:15
fonte
0

Con qualsiasi sistema di password e sicurezza è necessario considerare molto più della lunghezza / casualità della password, è molto più importante pensare a come verranno attaccati.

Ci sono due modi in cui le password vengono attaccate

  • forza bruta online . Qui l'attaccante sta attaccando la password dell'utente tramite il tuo sistema. A meno che il tuo utente non abbia scelto una password che può essere indovinata prima che il blocco dell'account entri a calci, l'attaccante non riuscirà ad entrare. In genere, in questo scenario, è molto improbabile che i personaggi in generale siano casuali. Le cose importanti da fare qui è assicurarsi che il tuo sistema blocchi gli aggressori e cercare di garantire che gli utenti non scelgano password molto comuni come 123456.

  • brute-force offline qui l'utente malintenzionato ha una copia del database delle password (presumibilmente tramite un difetto come SQL Injection, se si tratta di un sistema basato sul web) e sta cercando di decifrare Le password. Probabilmente il controllo più importante qui è quale algoritmo stai usando per memorizzare le password. Ecco che rimanderò a Thomas Pornin per spiegare le opzioni , ma vale la pena notare che ruby ha un supporto decente per le librerie per bcrypt (Rails lo usa per SecurePassword). Anche la lunghezza della password è importante qui come la casualità, ma il cracking di 8 caratteri generati da password casuali hash con bcrypt e un fattore di lavoro decente, è una cosa non banale per la maggior parte degli attaccanti. Senza conoscere il tuo modello di rischio non posso dire che andrà bene, ma non lo vedo nemmeno terribilmente male.

Riguardo al punto su crittografia sicura, come altri hanno detto che il ruby SecureRandom è migliore di Rand

    
risposta data 22.05.2017 - 22:35
fonte
0

Utilizza invece passate frasi a cinque parole generate casualmente. È possibile adattare il wordlist trovato qui:

link

Rendi tutto in minuscolo: facile da digitare, facile da memorizzare, se necessario.

    
risposta data 28.05.2017 - 04:14
fonte

Leggi altre domande sui tag