2013-11-14 16 views
26

Sto usando /dev/urandom per generare dati casuali per i miei programmi. Ho appreso che /dev/random può essere vuoto perché, a differenza di /dev/urandom, non usa SHA quando non ci sono abbastanza byte generati. /dev/random utilizza "il pool entropia del kernel". Apparentemente si basa su tempi di tastiera, movimenti del mouse e tempi di IDE.Come funziona il pool entropy del kernel?

Ma come funziona davvero?
E non sarebbe possibile "alimentare" il pool di entropia rendendo prevedibile l'output di/dev/random?

+0

Imho è necessario sostituire uno dei tag di dire che questa domanda è specifico per Linux; in ogni caso, circa la seconda parte - no, solo root può farlo, gli utenti normali possono solo mescolare nuovi dati, il che è innocuo. – loreb

risposta

20

Quello che stai dicendo è azzeccato, sì in teoria è possibile alimentare entropia in /dev/random, ma è necessario controllare molte delle fonti di "rumore" del kernel per renderlo significativo. È possibile guardare la fonte per random.c, per vedere dove viene rilevato il rumore /dev/random. Fondamentalmente, se controlli un numero significativo di fonti di rumore, puoi indovinare cosa stanno contribuendo gli altri al pool di entropia.

Dal /dev/urandom è un Hash chain seminato da /dev/random, quindi si potrebbe effettivamente prevedere i numeri successivi, se si conoscesse il seme. Se hai abbastanza controllo sul pool di entropia, allora dall'output di /dev/urandom potresti riuscire a indovinare questo seme, che ti consentirebbe di prevedere tutti i numeri successivi da /dev/urandom, ma solo se mantieni /dev/random esaurito, altrimenti /dev/urandom sarà riseminate.

Detto questo, non ho visto nessuno effettivamente farlo, nemmeno in un ambiente controllato. Ovviamente questa non è una garanzia, ma non mi preoccuperei.

Così Preferisco utilizzare /dev/urandom e garantisco che il mio programma non blocca durante l'attesa per l'entropia, invece di utilizzare /dev/random e chiede all'utente di fare cose stupide, come muovere il mouse o battere sulla tastiera.

Penso che dovresti leggere On entropy and randomness da LWN, si spera che possa calmare le tue preoccupazioni :-).

Se ti preoccupi ancora, prenditi un HRNG.

Modifica Ecco una piccola nota su entropia:

Credo che il concetto di entropia è generalmente difficile da afferrare. C'è un articolo con ulteriori informazioni su Wikipedia. Ma fondamentalmente, in questo caso, puoi leggere l'entropia come casualità.

Così come la vedo io, è che hai una grande sacca di palline colorate, maggiore è l'entropia in questa borsa, più difficile è predire il prossimo colore estratto dalla borsa.

In questo contesto, il pool di entropia è solo un gruppo di byte casuali, in cui uno non può essere derivato dal precedente o da nessuno degli altri. Ciò significa che hai un'alta entropia.

+0

Grazie per questa risposta davvero buona. In qualità di madrelingua inglese non nativo, la parola "entropia" è piuttosto difficile da ottenere per me. Sto immaginando il pool di entropia come un array di memoria che, quando è riempito con 8/16 bit, stampa il simbolo corrispondente, vero? – Antoninarto

+0

Ho aggiunto una piccola nota su entropia. Spero che questo renda le cose un po 'più chiare per te. – jbr

2

Apprezzo la profondità della risposta di jbr.

L'aggiunta di un aggiornamento pratico per tutti coloro che attualmente fissando un comando PKI IPsec o qualcosa di simile blocco sul pool di entropia vuota:

Ho appena installato RNG-tools in un'altra finestra e il mio comando pki completato.

apt-get install rng-tools 
0

Io sono nel mezzo di lettura di una carta alla factorable e preso nota della sezione in cui si dice:

"Per gli sviluppatori di biblioteca:. di default per la configurazione più sicura Entrambi OpenSSL e Dropbear predefinite per utilizzare /dev/urandom invece di /dev/random, e Dropbear impostazioni di default usa un meno sicuro DSA firma casualità tecnica anche se una tecnica più sicura è disponibile come opzione. "

Gli autori affrontano il compromesso di una domanda di appendere in attesa che l'entropia di costruire /dev/random per ottenere una maggiore sicurezza rispetto ad un rapido, ma meno sicura, il risultato di /dev/urandom.

+0

Potrebbe essere che ci sia qualche tipo di errore nella tua ultima frase perché c'è due volte '/ dev/random'. –

+0

Buona cattura, Kevin. La seconda occorrenza dovrebbe essere/dev/urandom. /dev/urandom restituisce risultati immediatamente indipendentemente sul livello di entropia presente. /dev/random attenderà/appendere per un adeguato livello di entropia prima di fornire risultati. – Mike

+0

Dal momento che non bloccano il corto di entropia, potrebbe non teoricamente "risucchiare" l'entropia utilizzando da soli (senza root), e lasciando molto meno entropia (o nessuno tranne pseudo) per i programmi di crittografia? –

Problemi correlati