RANDOM(4)

NOME
random, urandom - dispositivi kernel che producono numeri aleatori

DESCRIZIONE
I file speciali a caratteri /dev/random e /dev/urandom (presenti sin da Linux 1.3.30) forniscono un'interfaccia al generatore del kernel di numeri aleatori. Il file /dev/random ha numero primario 1 e numero secondario 8. Il file /dev/urandom ha numero primario 1 e numero secondario 9.

Il generatore di numeri aleatori raccoglie rumore di fondo dai device driver e da altre sorgenti nel pozzo d'entropia. Il generatore mantiene anche una stima del numero di bit di rumore nel pozzo di entropia. Da questo pozzo di entropia vengono creati i numeri aleatori.

Quando viene letto, /dev/random restituisce solo un numero di byte aleatori compatibili con la stima dei bit di rumore nel pozzo d'entropia. /dev/random dovrebbe essere adatto ad usi che richiedono un alto grado di aleatorietà, come la generazione di chiavi. Quando il pozzo d'entropia è vuoto, le letture di /dev/random vengono bloccate finché non viene raccolto abbastanza rumore ambientale.

Quando viene letto, /dev/urandom restituisce tanti byte quanti ne sono stati richiesti. Di conseguenza, se non c'è abbastanza entropia nel pozzo d'entropia, i valori restituiti sono teoricamente vulnerabili ad un attacco criptografico sull'algoritmo usato dal dispositivo. Nella letteratura (non coperta da segreto militare) non c'è conoscenza di un metodo per fare ciò, ma è in teoria possibile che esista un simile metodo. Se questo è fonte di problemi per il proprio programma, si usi invece /dev/random.

  Configurazione
Se il sistema non comprende già /dev/random né /dev/urandom, li si può creare coi seguenti comandi:
        mknod -m 644 /dev/random c 1 8
        mknod -m 644 /dev/urandom c 1 9
        chown root:root /dev/random /dev/urandom
Quando un sistema Linux viene avviato senza molta interazione da parte di un utente, il pozzo d'entropia potrebbe essere in una condizione tutto sommato prevedibile. Questo porta a sovrastimare la quantità di rumore realmente presente nel pozzo d'entropia. Per contrastare questo effetto, può aiutare riportare le informazioni nel pozzo d'entropia fra un arresto e un riavvio. Per farlo, si aggiunga le righe seguenti ad uno script appropriato che venga eseguito durante le procedure di avvio di un sistema Linux:
	echo "Inizializzazione del generatore di numeri aleatori..."
	random_seed=/var/run/random-seed
	# Porta il seme aleatorio da un avvio al successivo
	# Carica e successivamente salva l'intero pozzo di entropia
	if [ -f $random_seed ]; then
	    cat $random_seed >/dev/urandom
	else
	    touch $random_seed
	fi
	chmod 600 $random_seed
	poolfile=/proc/sys/kernel/random/poolsize
	[ -r $poolfile ] && bytes=`cat $poolfile` || bytes=512
	dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
Inoltre, si aggiungano le righe seguenti ad uno script appropriato che venga eseguito durante le procedure di arresto di un sistema Linux:
	# Riporta un seme aleatorio dall'arresto al riavvio.
	# Salva l'intero pozzo di entropia
	echo "Salvataggio del seme aleatorio..."
	random_seed=/var/run/random-seed
	touch $random_seed
	chmod 600 $random_seed
	poolfile=/proc/sys/kernel/random/poolsize
	[ -r $poolfile ] && bytes=`cat $poolfile` || bytes=512
	dd if=/dev/urandom of=$random_seed count=1 bs=$bytes

  Interfaccia /proc
i file nella directory /proc/sys/kernel/random (Presente da 2.3.16) forniscono un'interfaccia aggiuntiva al dispositivo /dev/random.

Il file in sola lettura entropy_avail fornisce l'entropia disponibile. Normalmente questo sarà 4096 (bit), un popzzo di entropia pieno.

Il file poolsize fornisce la dimensione del pozzo di entropia. Normalmente questo sarà 512 (byte). Esso può essere cambiato in qualsiasi valore per il quale sia disponibile un algoritmo. Attualmente le scelte sono 32, 64, 128, 256, 512, 1024, 2048.

Il file read_wakeup_threshold contiene il numero di bit di entropia richiesti per svegliare i processi che dormono in attesa dell'entropia da /dev/random. Il default è 64. Il file write_wakeup_threshold contiene il numero di bit di entropia sotto i quali svegliamo i processi che eseguono un select() o poll() per accedere in scrittura a /dev/random. Questi valori possono venire cambiati scrivendo sui file.

I file in sola lettura uuid e boot_id contengono stringhe casuali come 6fd5a44b-35f4-4ad4-a9b9-6b9be13e1fe9. Il più vecchio è generato di nuovo a ciascuna lettura, l'ultimo viene generato una volta.

FILE
/dev/random
/dev/urandom

AUTORE
Il generatore di numeri aleatori è stato scritto da Theodore Ts'o (tytso@athena.mit.edu).

VEDERE ANCHE
mknod (1)
RFC 1750, "Randomness Recommendations for Security"