RANDOM

Section: Linux Programmer's Manual (4)
Updated: 10 gennaio 2008
Index Return to Main Contents
 

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/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 pozzo di entropia pieno.

Il file poolsize fornisce la dimensione del pozzo di entropia. La semantica di questo file è diversa a seconda della versione del kernel:

Linux 2.4:
Questo file indica la dimensione del posso di entropia in byte. Normalmente questo file ha valore 512, ma è scrivibile e può essere cambiato in qualunque valore per il quale sia disponibile un algoritmo. Le scelte sono: 32, 64, 128, 256, 512, 1024 o 2048.
Linux 2.6:
Questo file è di sola lettura, e indica la dimensione del pozzo di entropia in bit. Contiene il valore 4096.

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 valore predefinito è 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"  

COLOPHON

Questa pagina fa parte del rilascio 2.76 del progetto man-pages di Linux. Si può trovare una descrizione del progetto, e informazioni su come riportare bachi, presso http://www.kernel.org/doc/man-pages/. Per la traduzione in italiano si può fare riferimento a http://www.pluto.it/ildp/collaborare/


 

Index

NOME
DESCRIZIONE
Configurazione
Interfaccia /proc
FILE
AUTORE
VEDERE ANCHE
COLOPHON

This document was created by man2html, using the manual pages.
Time: 23:03:52 GMT, June 17, 2008