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 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/