it-swarm.it

Nutrire / dev / pool di entropia casuale?

Quale modo di nutrire ulteriormente /dev/random pool di entropia suggeriresti per produrre password casuali? Oppure, c'è forse un modo migliore per creare localmente password completamente casuali?

51
pootzko

Puoi alimentarlo con rumore bianco dal tuo chip audio, se presente. Vedi questo articolo: http://www.linuxfromscratch.org/hints/downloads/files/entropy.txt

24
Henri

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 . Questo è il tipo di algoritmo che è sicuro contro la tecnologia di oggi, e anche la tecnologia di domani, e la tecnologia usata dagli alieni e anche dall'iPad di Dio. Gli algoritmi teoricamente sicuri sono sicuri 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 usa le funzioni hash convenzionali, quindi è probabile che avrebbe comunque dei punti deboli se attaccato con un potere infinito (niente di cui preoccuparsi per gli attaccanti basati sulla Terra).

  • /dev/urandom non bloccherà, mentre /dev/random potrebbe farlo. /dev/random mantiene un contatore di "quanta entropia ha ancora" supponendo che qualsiasi bit che ha prodotto sia un bit di entropia perso. Il blocco provoca problemi molto reali, ad es. un server che non si avvia dopo un'installazione automatica perché è bloccato sulla creazione della sua chiave del server SSH (sì, l'ho visto). /dev/urandom utilizza un generatore di numeri pseudo-casuali crittograficamente forte, quindi non si bloccherà mai.

Quindi vuoi usare /dev/urandom e smetti di preoccuparti di questo business dell'entropia.

Ora potresti voler preoccuparti dell'entropia se stai scrivendo il programma di installazione di Linux. Il trucco è che /dev/urandom non blocca mai, mai, anche quando dovrebbe: /dev/urandom è sicuro purché abbia ricevuto abbastanza byte di "entropia iniziale" dall'ultimo avvio (sono sufficienti 32 byte casuali). Una normale installazione Linux creerà un seed casuale (da /dev/random) al momento dell'installazione e salvarlo sul disco. Ad ogni riavvio, il seme verrà letto, inserito in /dev/urandom e un nuovo seme generato immediatamente (da /dev/urandom) per sostituirlo. Pertanto, ciò garantisce che /dev/urandom avrà sempre abbastanza entropia iniziale per produrre alea crittograficamente forte, perfettamente sufficiente per qualsiasi banale lavoro crittografico, inclusa la generazione di password. L'unico punto critico è durante l'installazione: il programma di installazione deve ottenere entropia da /dev/random, che potrebbe bloccare. 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 qualche fonte di entropia per assicurarti che /dev/random sarà ben nutrito e non si bloccherà.

Il sistema operativo stesso, e più precisamente il kernel, è nel posto giusto per raccogliere 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 lotti di dati , è un buon raccoglitore di entropia. Quindi basta prendere alcuni frame dalla webcam, cancellarli con una funzione hash sicura (SHA-256) e scriverli in /dev/urandom. Questo è ancora eccessivo.

50
Thomas Pornin

Conosco demone entropia audio e demone che viene utilizzato da demone cancellato , provali.

13
krempita

Il miglior valore che ho visto in un dispositivo di casualità HW è simtec entropy key.
Ha un certo numero di protezioni integrate per proteggersi da guasti e attacchi. Ad esempio, esegue FIPS 140-2 test di casualità su ogni batch di 20Kb, spegnendosi se un numero statisticamente significativo di test fallisce. Ne ho ottenuto uno mentre stavo eseguendo molte chiavi generazione per la ricerca DNSSEC, e ha velocizzato notevolmente il mio lavoro. Supera tutti i test dieharder. (nota, testa sempre periodicamente i tuoi flussi di casualità, qualunque cosa il venditore ti dica ;-)

7
spinkham

1) Non è necessario aggiungere ulteriore entropia a /dev/random, per usarlo 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 presenta alcuni problemi: blocca, esaurisce il pool di entropia in un modo che può causare altri utenti di /dev/random bloccare. /dev/urandom è la migliore interfaccia per tutti gli usi.)

3) Ecco un semplice script che utilizzo per generare una password casuale. Sei il benvenuto per usarlo.

#!/bin/sh
# Make a 48-bit password (8 characters, 6 bits per char)
dd if=/dev/urandom count=1 2>/dev/null | base64 | head -1 | cut -c4-11 
7
D.W.

Uso una combinazione di origini dati e un buon algoritmo di hashing per generare dati casuali.

Su un web server è possibile combinare dati del server (HW, SW, prestazioni), dati del client (user-agent, tempo di richiesta, cookie, variabili URL, qualunque cosa tu possa raccogliere), alcuni dati esterni (come random.org), mescola tutto con diciamo sha1 (mixed_data + time + some_secret_key) e ottieni bit abbastanza imprevedibili di dati casuali.

Puoi anche prendere in considerazione l'utilizzo di P2PEG per raccogliere facilmente entropia da client e server.

2
DUzun

Le password, se sono brevi, sono sempre crackabili con la forza bruta se la velocità o il conteggio dei tentativi non sono limitati. Se, d'altra parte, i tentativi sono limitati (es. Login interattivo), anche una piccola quantità di entropia praticamente non crackabile - la quantità di tentativi richiesti diventa proibitiva molto presto.

Quindi, non dovrebbero esserci casi in cui ottenere l'entropia davvero buona per le password.

Quindi basta usare/dev/urandom, è più che abbastanza buono.

Le altre risposte fornite qui sono buoni commenti su come mantenere il tuo/dev/random fornito con abbastanza entropia, se ne hai bisogno.

1
Nakedible