.\" Copyright (c) 1997 John S. Kallal (kallal@voicenet.com) .\" .\" %%%LICENSE_START(GPLv2+_DOC_ONEPARA) .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as .\" published by the Free Software Foundation; either version 2 of .\" the License, or (at your option) any later version. .\" %%%LICENSE_END .\" .\" Some changes by tytso and aeb. .\" .\" 2004-12-16, John V. Belmonte/mtk, Updated init and quit scripts .\" 2004-04-08, AEB, Improved description of read from /dev/urandom .\" 2008-06-20, George Spelvin , .\" Matt Mackall .\" Add a Usage subsection that recommends most users to use .\" /dev/urandom, and emphasizes parsimonious usage of /dev/random. .\" .\" Traduzione in italiano di Ottavio G. Rizzo .\" Gennaio 1999 .\" Aggiornamento a man-pages-2.11 di Giulio Daprelà .\" novembre 2005 .\" Aggiornamento a man-pages-2.62 di Elisabetta Galli .\" luglio 2007 .\" Aggiornamento a man-pages-3.01 di Elisabetta Galli .\" settembre 2008 .\" Aggiornamento a man-pages-3.53 di Marco Curreli .\" agosto 2013 .\" .TH RANDOM 4 2013-03-15 "Linux" "Linux Programmer's Manual" .SH NOME random, urandom \- dispositivi kernel che producono numeri casuali .SH SINTASSI #include .sp .BI "int ioctl(" fd ", RND" request ", " param ");" .SH DESCRIZIONE I file speciali a caratteri \fI/dev/random\fP e \fI/dev/urandom\fP (presenti a partire da Linux 1.3.30) forniscono un'interfaccia al generatore del kernel di numeri casuali. Il file \fI/dev/random\fP ha numero primario 1 e numero secondario 8. Il file \fI/dev/urandom\fP ha numero primario 1 e numero secondario 9. .LP Il generatore di numeri casuali raccoglie rumore di fondo dai dispositivi dei driver e da altre sorgenti nella fonte di entropia. Il generatore mantiene anche una stima del numero di bit di rumore nella fonte di entropia. Da questa fonte di entropia vengono creati i numeri casuali. .LP Quando viene letto, il dispositivo \fI/dev/random\fP restituisce solo un numero di byte casuali compatibili con la stima dei bit di rumore nella fonte di entropia. \fI/dev/random\fP dovrebbe essere adatto ad usi che richiedono un alto grado di casualità, come la cifratura "one-time pad" e la generazione di chiavi. Quando la fonte di entropia è vuota, le letture di \fI/dev/random\fP vengono bloccate finché non viene raccolto abbastanza rumore ambientale. .LP La lettura del dispositivo \fI/dev/urandom\fP non bloccherà l'attesa di ulteriore entropia. Di conseguenza, se non c'è abbastanza entropia nella fonte di entropia, i valori restituiti sono teoricamente vulnerabili ad un attacco crittografico sull'algoritmo usato dal driver. Nella letteratura attualmente non classificata non c'è prova di un metodo per fare ciò, ma è in teoria possibile che un attacco del genere possa esistere. Se questo è fonte di problemi per la propria applicazione, si usi invece \fI/dev/random\fP. .LP La scrittura su \fI/dev/random\fP o \fI/dev/urandom\fP aggiorna la fonte d'entropia con i dati scritti, ma ciò non si tradurrà in un numero di entropia più alto. Ciò vuo dire che esso influirà sui contenuti letti da entrambi i file, ma non farà letture da \fI/dev/random\fP più velocemente. .SS Uso Se non si è sicuri di quale programma usare, .IR /dev/random o .IR /dev/urandom , probabilmente la scelta migliore è l'ultimo. Come regola generale, si dovrebbe usare per tutto .IR /dev/urandom , fatta eccezione per chiavi GPG/SSL/SSH esistenti da molto tempo. Se si salva un file seed ai riavvii, come si raccomanda più avanti (tutte le più importanti distribuzioni Linux lo fanno almeno dal 2000), l'output sarà crittograficamente al sicuro dagli attaccanti senza accesso di root in locale dato che viene ricaricato nella sequenza di boot, e sarà perfettamente adeguato alle chiavi criptate per le sessioni di rete. Dato che le letture da .I /dev/random possono bloccarsi, gli utenti solitamente vorranno aprirlo in modo non bloccante (o eseguire una lettura senza timeout), e fornire un qualche tipo di notifica se l'entropia desiderata non è immediatamente disponibile. Il generatore di numeri casuali del kernel è stato sviluppato per produrre un piccolo quantitativo di materiale di seed di alta qualità, necessario a creare un generatore di numeri pseudo-casuali crittografico (CPRNG). È stato creato per essere sicuro, non per essere veloce, e non è adatto a generare grandi quantità di dati casuali. Gli utenti dovrebbero creare una piccola quantità di materiale di seed da leggere da .IR /dev/urandom (e .IR /dev/random ): leggere grandi quantitativi di dati da questi dispositivi avrà un impatto negativo sugli altri utenti dei dispositivi. La quantità di materiale di seed richiesto per generare una chiave crittografica è uguale alla dimensione reale della chiave. Per esempio, una chiave privata RSA a 3072 bit o una Diffie-Hellmann ha una dimensione effettiva di 128 bit (e richiede circa 2^128 operazioni per essere forzata), quindi un generatore di chiavi avrà bisogno solo di 128 bit (16 byte) di materiale di seed da .IR /dev/random . Benché sia ragionevole avere margini di sicurezza superiori a questo minimo come protezione contro le imperfezioni dell'algoritmo CPRNG, nessuna delle primitive crittografiche oggi esistente può garantire più di 256 bit di sicurezza; quindi se un programma legge più di 256 bit (32 byte) dalla fonte di casualità del kernel per ogni chiamata, o per ogni intervallo ragionevole di seed (non meno di un minuto), vuol dire che la crittografia di quel programma .I non è stata abilmente implementata. .SS Configurazione Se il sistema non comprende già \fI/dev/random\fP né \fI/dev/urandom\fP, li si può creare coi seguenti comandi: .nf mknod \-m 644 /dev/random c 1 8 mknod \-m 644 /dev/urandom c 1 9 chown root:root /dev/random /dev/urandom .fi Quando un sistema Linux viene avviato senza molta interazione da parte di un utente, la fonte di entropia potrebbe essere in una condizione tutto sommato prevedibile. Questo porta a sovrastimare la quantità di rumore realmente presente nella fonte di entropia. Per contrastare questo effetto, può aiutare riportare le informazioni nella fonte di entropia fra un arresto e un riavvio. Per farlo, si aggiungano le righe seguenti ad uno script appropriato che venga eseguito durante le procedure di avvio di un sistema Linux: .nf echo "Inizializzazione del generatore di numeri casuali..." random_seed=/var/run/random-seed # Porta il seme casuale da un avvio al successivo # Carica e successivamente salva l'intera fonte 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 .fi Inoltre, si aggiungano le righe seguenti ad uno script appropriato da eseguire durante le procedure di arresto di un sistema Linux: .nf # Riporta un seme casuale dall'arresto al riavvio. # Salva l'intera fonte di entropia echo "Salvataggio del seme casuale..." 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 .fi .SS Interfaccia /proc I file nella directory .I /proc/sys/kernel/random (presente da 2.3.16) forniscono un'interfaccia aggiuntiva al dispositivo .I /dev/random. .LP Il file in sola lettura .I entropy_avail fornisce l'entropia disponibile. Normalmente questo sarà 4096 (bit), una fonte di entropia piena. .LP Il file .I poolsize fornisce la dimensione della fonte di entropia. La semantica di questo file è diversa a seconda della versione del kernel: .RS .TP 12 Linux 2.4: Questo file indica la dimensione della fonte di entropia in .IR 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. .TP Linux 2.6: Questo file è di sola lettura, e indica la dimensione della fonte di entropia in .IR bit . Contiene il valore 4096. .RE .LP Il file .I read_wakeup_threshold contiene il numero di bit di entropia richiesti per svegliare i processi che dormono in attesa dell'entropia da .BR /dev/random . Il valore predefinito è 64. Il file .I write_wakeup_threshold contiene il numero di bit di entropia sotto i quali vengono svegliati i processi che eseguono un .IR select () o .IR poll () per accedere in scrittura a .BR /dev/random . Questi valori possono venire cambiati scrivendo sui file. .LP I file in sola lettura .I uuid e .I 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. .SS Interfaccia ioctl(2) Le seguenti richieste .BR ioctl (2) sono definite su descrittori di file connessi o a \fI/dev/random\fP o a \fI/dev/urandom\fP. Tutte le richieste effettuate interagiscono con la fonte di entropia di input incidendo sia su \fI/dev/random\fP che su \fI/dev/urandom\fP. La capacità .B CAP_SYS_ADMIN è necessaria per tutte le richieste eccetto che per .BR RNDGETENTCNT . .TP .BR RNDGETENTCNT Recupera il conteggio di entropia della fonte di input, il contenuto sarà lo stesso del file .I entropy_avail sotto proc. Il risultato verrà memorizzato nell'int indicato dall'argomento. .TP .BR RNDADDTOENTCNT Incrementa o decrementa il numero di entropia della fonte di input del valore indicato dall'argomento. .TP .BR RNDGETPOOL Rimosso in Linux 2.6.9. .TP .BR RNDADDENTROPY Aggiunge ulterire entropia alla fonte di input, incrementando il numero di entropia. Questo differisce dallo scrivere su \fI/dev/random\fP o \fI/dev/urandom\fP, che aggiunge solo qualche dato ma non incrementa il numero di entropia. Viene usata la seguente struttura: .IP .nf struct rand_pool_info { int entropy_count; int buf_size; __u32 buf[0]; }; .fi .IP Dove .I entropy_count è il valore aggiunto (o sottratto) al numero di entropia, e .I buf è il buffer di dimensione .I buf_size che viene aggiunto alla fonte di entropia. .TP .BR RNDZAPENTCNT ", " RNDCLEARPOOL Azzera il conteggio di entropia di tutte le fonti e aggiunge alcuni dati di sistema (come il minutaggio) alle fonti. .SH FILE /dev/random .br /dev/urandom .\" .SH AUTORE .\" Il generatore di numeri casuali è stato scritto da .\" Theodore Ts'o (tytso@athena.mit.edu). .SH VEDERE ANCHE .BR mknod (1) .br RFC\ 1750, "Randomness Recommendations for Security" .SH COLOPHON Questa pagina fa parte del rilascio 3.73 del progetto Linux .IR man-pages . Una descrizione del progetto, le istruzioni per la segnalazione degli errori, e l'ultima versione di questa pagina si trova su \%http://www.kernel.org/doc/man\-pages/. La versione italiana fa parte del pacchetto .I man-pages-it v. 3.73, a cura di: ILDP "Italian Linux Documentation Project" \%http://www.pluto.it/ildp .br Per la traduzione in italiano si pu\(`o fare riferimento a http://www.pluto.it/ildp/collaborare/ .br Segnalare eventuali errori di traduzione a .IR ildp@pluto.it