Spiega in inglese semplice sull'entropia disponibile


28

Se eseguo questo comando in Ubuntu

sudo cat /proc/sys/kernel/random/entropy_avail

restituisce un numero che indica quanta "entropia" è disponibile per il kernel, ma questo è tutto ciò che so. In quale unità viene misurata questa entropia? A cosa serve? Mi è stato detto che è "cattivo" se quel numero è "basso". Quanto è basso "basso" e quali "cattive" cose accadranno se lo è? Qual è una buona gamma per essere? Come viene determinato?

Risposte:


22

Il sistema raccoglie alcuni numeri casuali "reali" tenendo d'occhio diversi eventi: attività di rete, generatore di numeri casuali hardware (se disponibile; ad esempio i processori VIA di solito hanno un generatore di numeri casuali "reali") e così via. Se li alimenta al pool di entropia del kernel, che è usato da / dev / random. Le applicazioni che richiedono una sicurezza estrema tendono a usare / dev / random come fonte di entropia, o in altre parole, la fonte di casualità.

Se / dev / random esaurisce l'entropia disponibile, non è in grado di erogare più casualità e l'applicazione in attesa che la casualità si blocchi fino a quando non sono disponibili più elementi casuali. L'esempio che ho visto durante la mia carriera è che il demone Cyrus IMAP voleva usare / dev / random per la casualità e le sue sessioni POP volevano generare le stringhe casuali nelle connessioni APOP da / dev / random. In un ambiente frenetico ci sono stati più tentativi di accesso del traffico per alimentare / dev / random -> tutto bloccato. In quel caso ho installato rng-tools e attivato l'rngd che aveva - che spalava numeri semi-casuali da / dev / urandom a / dev / random nel caso / dev / random finiva l'entropia "reale".


19

Se desideri una panoramica più semplice del problema sottostante: alcune applicazioni (come la crittografia) richiedono numeri casuali. Puoi generare numeri casuali usando un algoritmo, ma sebbene questi sembrino casuali in un certo senso, sono totalmente prevedibili in un altro. Ad esempio, se ti do le cifre 58209749445923078164062862089986280348253421170679, sembrano abbastanza casuali. Ma se ti rendi conto che in realtà sono cifre di PI, allora sapresti che il prossimo sarà 8.

Per alcune applicazioni questo va bene, ma per altre applicazioni (specialmente quelle legate alla sicurezza) le persone vogliono autentica casualità imprevedibile - che non può essere generata da un algoritmo (cioè un programma) poiché questo è per definizione prevedibile. Questo è un problema in quanto il tuo computer è essenzialmente un programma, quindi come può ottenere veri numeri casuali? La risposta è misurando eventi realmente casuali dal mondo esterno, ad esempio lacune tra i tasti premuti e utilizzandoli per iniettare casualità autentica nel generatore di numeri casuali altrimenti prevedibile. Il "pool di entropia" potrebbe essere pensato come il deposito di questa casualità che viene creata dalle sequenze di tasti (o da qualunque cosa venga utilizzata) e svuotata dalla generazione di numeri casuali.


2
Bella spiegazione ...
pradipta,

Ma PI è irrazionale e includerebbe ogni sequenza inclusa la sequenza sopra seguita da 9 (anziché 8).
Ajay Brahmakshatriya,

9

Entropia è un termine tecnico per "casualità". I computer non generano realmente entropia ma la raccolgono guardando cose come le variazioni della velocità di rotazione del disco rigido (un fenomeno fisico che è molto difficile da prevedere a causa dell'attrito, ecc.) Quando un computer vuole generare dati pseudo casuali, lo farà semina una formula matematica con vera entropia che ha trovato misurando i clic del mouse, le variazioni di spin del disco rigido ecc. In parole povere entropy_availè la misura dei bit attualmente disponibili da leggere/dev/random

Ci vuole tempo perché il computer legga l'entropia dal suo ambiente a meno che non abbia hardware interessante come un diodo rumoroso o qualcosa del genere.

Se hai a disposizione 4096 bit di entropia e sei un gatto /dev/randompuoi aspettarti di essere in grado di leggere 512 byte di entropia (4096 bit) prima che il file si blocchi mentre attende più entropia.

Ad esempio, se " cat /dev/random" la tua entropia si ridurrà a zero. All'inizio otterrai 512 byte di immondizia casuale ma si fermerà e a poco a poco vedrai più troppi dati casuali.

Non è così che dovrebbero funzionare le persone /dev/random. Normalmente gli sviluppatori leggono una piccola quantità di dati, come 128 bit, e li usano per seminare un qualche tipo di algoritmo PRNG. È educato non leggere più entropia /dev/randomdel necessario perché richiede molto tempo per essere edificato ed è considerato prezioso. Quindi, se lo scarichi, cattrascinando distrattamente il file come sopra, causerai il /dev/randomblocco di altre applicazioni che devono leggere . Su un sistema al lavoro abbiamo notato che molte funzioni di crittografia erano in stallo. Abbiamo scoperto che un cron job stava chiamando uno script Python che continuava a inizializzarsiramdom.random()ad ogni corsa che ha funzionato ogni pochi secondi. Per risolvere questo problema, abbiamo riscritto lo script Python in modo che funzionasse come un demone inizializzato una sola volta e il cron job leggesse i dati tramite XMLRPC in modo che non continuasse a leggere /dev/randomall'avvio.


1
"Per risolvere questo problema abbiamo riscritto lo script python in modo che funzionasse come un demone che si inizializzava solo una volta e il cron job leggeva i dati tramite XMLRPC in modo che non continuasse a leggere da / dev / random all'avvio." --- Tranne la parte che ho citato, che è difficile da valutare perché non è chiaro se la tua sceneggiatura abbia davvero bisogno di casualità o meno, la tua risposta è molto chiara ed esplicita.
Craig Hicks,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.