Provided by: manpages-it_3.73-2_all bug

NOME

       random, urandom - dispositivi kernel che producono numeri casuali

SINTASSI

       #include <linux/random.h>

       int ioctl(fd, RNDrequest, param);

DESCRIZIONE

       I  file  speciali  a  caratteri  /dev/random  e  /dev/urandom (presenti a partire da Linux
       1.3.30) forniscono un'interfaccia al generatore del kernel di  numeri  casuali.   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 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.

       Quando  viene letto, il dispositivo /dev/random restituisce solo un numero di byte casuali
       compatibili con la stima dei bit di rumore nella fonte di entropia.  /dev/random  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
       /dev/random vengono bloccate finché non viene raccolto abbastanza rumore ambientale.

       La  lettura del dispositivo /dev/urandom 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 /dev/random.

       La scrittura su /dev/random o  /dev/urandom  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  /dev/random  più
       velocemente.

   Uso
       Se  non si è sicuri di quale programma usare, /dev/random o /dev/urandom, probabilmente la
       scelta  migliore  è  l'ultimo.   Come  regola  generale,  si  dovrebbe  usare  per   tutto
       /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  /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 /dev/urandom (e
       /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 /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 non è stata abilmente implementata.

   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, 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:

           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

       Inoltre, si aggiungano le righe seguenti ad uno script appropriato da eseguire durante  le
       procedure di arresto di un sistema Linux:

           # 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

   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), una fonte di entropia piena.

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

              Linux 2.4:  Questo file indica la dimensione  della  fonte  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 della fonte 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 vengono svegliati 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.

   Interfaccia ioctl(2)
       Le seguenti richieste  ioctl(2)  sono  definite  su  descrittori  di  file  connessi  o  a
       /dev/random o a /dev/urandom.  Tutte le richieste effettuate interagiscono con la fonte di
       entropia di  input  incidendo  sia  su  /dev/random  che  su  /dev/urandom.   La  capacità
       CAP_SYS_ADMIN è necessaria per tutte le richieste eccetto che per RNDGETENTCNT.

       RNDGETENTCNT
              Recupera il conteggio di entropia della fonte di input, il contenuto sarà lo stesso
              del file  entropy_avail  sotto  proc.   Il  risultato  verrà  memorizzato  nell'int
              indicato dall'argomento.

       RNDADDTOENTCNT
              Incrementa  o  decrementa  il  numero  di  entropia della fonte di input del valore
              indicato dall'argomento.

       RNDGETPOOL
              Rimosso in Linux 2.6.9.

       RNDADDENTROPY
              Aggiunge ulterire  entropia  alla  fonte  di  input,  incrementando  il  numero  di
              entropia.   Questo  differisce  dallo  scrivere  su /dev/random o /dev/urandom, che
              aggiunge solo qualche dato ma non incrementa il numero di entropia.  Viene usata la
              seguente struttura:

                  struct rand_pool_info {
                      int    entropy_count;
                      int    buf_size;
                      __u32  buf[0];
                  };

              Dove  entropy_count è il valore aggiunto (o sottratto) al numero di entropia, e buf
              è il buffer di dimensione buf_size che viene aggiunto alla fonte di entropia.

       RNDZAPENTCNT, RNDCLEARPOOL
              Azzera il conteggio di entropia di tutte le fonti e aggiunge alcuni dati di sistema
              (come il minutaggio) alle fonti.

FILE

       /dev/random
       /dev/urandom

VEDERE ANCHE

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

COLOPHON

       Questa  pagina  fa  parte del rilascio 3.73 del progetto Linux 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 man-pages-it v. 3.73, a cura di: ILDP "Italian
       Linux Documentation Project" http://www.pluto.it/ildp
       Per    la     traduzione     in     italiano     si     può     fare     riferimento     a
       http://www.pluto.it/ildp/collaborare/
       Segnalare eventuali errori di traduzione a ildp@pluto.it