Quale modo di alimentare ulteriormente il pool di entropia / dev / random
suggeriresti per produrre password casuali? Oppure esiste forse un modo migliore per creare in locale password completamente casuali?
Quale modo di alimentare ulteriormente il pool di entropia / dev / random
suggeriresti per produrre password casuali? Oppure esiste forse un modo migliore per creare in locale password completamente casuali?
Dovresti usare / dev / urandom
, non / dev / random
. Le due differenze tra / dev / random
e / dev / urandom
sono (sto parlando di Linux qui):
/ dev / random
potrebbe essere teoricamente migliore nel contesto di un algoritmo teoricamente sicuro delle informazioni . Questo è il tipo di algoritmo che è protetto contro la tecnologia di oggi, e anche la tecnologia di domani e la tecnologia utilizzata dagli alieni e anche dall'iPad di Dio. L'algoritmo di informazione teoricamente sicuro è protetto contro una potenza di calcolo infinita. Inutile dire che tali algoritmi sono piuttosto rari e se ne usassi uno, lo sapresti. Inoltre, questo è un " potrebbe ": internamente, / dev / random
utilizza le funzioni hash convenzionali, quindi è probabile che avrebbe comunque dei punti deboli se attaccato con potenza infinita (niente di cui preoccuparsi per gli aggressori terrestri, però).
/ dev / urandom
non si bloccherà, mentre / dev / random
può farlo. / dev / random
mantiene un contatore di "quanta entropia ha ancora" assumendo che qualsiasi bit che ha prodotto sia un bit di entropia persa. Il blocco induce problemi molto reali, ad es. un server che non riesce ad avviarsi dopo un'installazione automatizzata perché si sta bloccando nella creazione della chiave del server SSH (sì, l'ho visto). / dev / urandom
utilizza un generatore di numeri pseudo-casuali crittograficamente potente, quindi non si bloccherà mai.
Quindi vuoi usare / dev / urandom
e smettila di preoccuparti di questa faccenda dell'entropia.
Ora potresti preoccuparti dell'entropia se stai scrivendo l'installatore di Linux. Il trucco è che / dev / urandom
non si blocca mai, mai, anche quando dovrebbe: / dev / urandom
è sicuro fintanto che ha ricevuto abbastanza byte di "entropia iniziale "dall'ultimo avvio (sono sufficienti 32 byte casuali). Una normale installazione di Linux creerà un seme casuale (da / dev / random
) al momento dell'installazione e lo salverà sul disco. Ad ogni riavvio, il seme verrà letto, inserito in / dev / urandom
e un nuovo seme immediatamente generato (da / dev / urandom
) per sostituirlo. Quindi, questo garantisce che / dev / urandom
avrà sempre abbastanza entropia iniziale per produrre alea crittograficamente forte, perfettamente sufficiente per qualsiasi lavoro crittografico banale, inclusa la generazione di password. L'unico punto critico è durante l'installazione: l'installatore deve ottenere un po 'di entropia da / dev / random
, che potrebbe bloccarsi. Questo problema si verifica anche con CD live e altre varianti senza area di archiviazione permanente di lettura / scrittura. In queste situazioni, potresti voler trovare una fonte di entropia per assicurarti che / dev / random
sia ben alimentato e non si blocchi.
Il sistema operativo stesso, e più precisamente il kernel, è nel posto giusto per raccogliere l'entropia dall'evento hardware, poiché gestisce l'hardware. Quindi c'è relativamente poco che puoi usare per l'entropia che il kernel non usa già. Una di quelle fonti rimanenti sono i dati della webcam: una webcam, anche di fronte a un muro bianco, emetterà dati con rumore termico e poiché emette molti dati, è un buon raccoglitore di entropia. Quindi prendi alcuni fotogrammi dalla webcam, sottoponili a hash con una funzione hash sicura (SHA-256) e scrivili in / dev / urandom
. Questo è ancora un grosso problema.
Puoi alimentarlo con il rumore bianco del tuo chip audio, se presente. Vedi questo articolo: http://www.linuxfromscratch.org/hints/downloads/files/entropy.txt
Conosco il demone di entropia audio e hasge che viene utilizzato da demone avente, provali.
Il miglior valore che ho riscontrato in un dispositivo HW per la casualità è la chiave di entropia simtec.
Ha una serie di protezioni integrate per proteggere da guasti e attacchi. Ad esempio, esegue i test di casualità FIPS 140-2 su ogni batch di 20 KB, spegnendosi se un numero statisticamente significativo di test fallisce. Ne ho ottenuto uno durante la generazione di molte chiavi per la ricerca DNSSEC e ha velocizzato notevolmente il mio lavoro. Supera tutti i test più difficili. (nota, verifica sempre periodicamente i tuoi flussi di casualità, indipendentemente da ciò che ti dice il venditore ;-)
1) Non è necessario aggiungere altra entropia a / dev / random
, per usarla per le password. Il sistema lo fa già per te.
2) Per generare una password casuale, è meglio usare / dev / urandom
, non / dev / random
. ( / dev / random
ha alcuni problemi: si blocca, esaurisce il pool di entropia in un modo che potrebbe causare il blocco di altri utenti di / dev / random
. / dev / urandom
è la migliore interfaccia per scopi generali.)
3) Ecco un semplice script che uso per generare una password casuale. Puoi usarlo.
#! / Bin / sh # Crea una password a 48 bit (8 caratteri, 6 bit per carattere) dd if = / dev / urandom count = 1 2> / dev / null | base64 | testa -1 | cut -c4-11
Uso una combinazione di origini dati e un buon algoritmo di hashing per generare dati casuali.
Su un server web puoi combinare i dati del server (HW, SW, prestazioni), i dati del cliente (utente- agent, request-time, cookie, URL variable, qualunque cosa tu possa raccogliere), alcuni dati esterni (come random.org), mescola tutto con let say sha1 (mixed_data + time + some_secret_key) e ottieni bit abbastanza imprevedibili di dati casuali.
Potresti anche prendere in considerazione l'utilizzo di P2PEG per raccogliere facilmente l'entropia da client e server.
Le password, se sono brevi, possono sempre essere violate con la forza bruta se la velocità o il numero di tentativi non è limitato. Se, d'altra parte, i tentativi sono limitati (es. Login interattivo), anche una piccola quantità di entropia fondamentalmente non crackabile - la quantità di tentativi richiesti diventa molto presto proibitiva.
Quindi, non dovrebbero esserci casi dove sarebbe importante ottenere un'entropia veramente buona per le password.
Quindi usa / dev / urandom, è più che sufficiente.
Le altre risposte fornite qui sono buoni commenti su come conservare il tuo / dev / random ha fornito abbastanza entropia, però, se ne hai bisogno.
GUChaos.c recupera numeri casuali da random.org e li modifica al volo tramite un codice di sostituzione prima di alimentare / dev / random
.
È strano vedere un sacco di raccomandazioni sull'uso di / dev / urandom invece di usare / dev / random perché quando / dev / random si esaurisce e / dev / urandom usa ripetutamente l'ultima entropia ciò che è fortemente insicuro per criticità a lungo termine parametri.