.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1997 John S. Kallal (kallal@voicenet.com) .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\" 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 .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH random 4 "2 maggio 2024" "Linux man\-pages 6.9.1" .SH NOME random, urandom \- dispositivi kernel che producono numeri casuali .SH SINTASSI .nf #include .P \fBint ioctl(\fP\fIfd\fP\fB, RND\fP\fIrequest\fP\fB, \fP\fIparam\fP\fB);\fP .fi .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 \fIdev/random\fP ha numero primario 1 e numero secondario 8. Il file \fI/dev/urandom\fP ha numero primario 1 e numero secondario 9. .P 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. .P Linux 3.17 e successivi forniscono la più semplice e sicura interfaccia \fBgetrandom\fP(2) che non richiede nessun file speciale; si veda la pagina di manuale di \fBgetrandom\fP(2) per i dettagli. .P Quando viene letto, il dispositivo \fI/dev/urandom\fP restituisce un numero di byte casuali prodotto da un generatore di numeri pseudocasuali inizializzato tramite la fonte di entropia. Le letture da questo dispositivo non sono bloccanti (cioè, la CPU non viene impegnata/risponde immediatamente), ma si può avere un ritardo apprezzabile qualora vengano richieste grandi quantità di dati. .P .\" This is a real problem; see .\" commit 9b4d008787f864f17d008c9c15bbe8a0f7e2fc24 Quando viene letto durante la fase di inizializzazione del sistema \fI/dev/urandom\fP può restituire dati prima che sia disponibile la fonte di entropia. Se questo è fonte di problemi per la propria applicazione, si usi invece \fBgetrandom\fP(2) o \fI/dev/random\fP. .P Il dispositivo \fI/dev/random\fP è un'interfaccia disponibile già da molto tempo, risalente a quando le primitive crittografiche usate nell'implementazione di \fI/dev/urandom\fP non erano generalmente ritenute sicure. Esso restituisce solo un numero di byte casuali prendendoli dal numero stimato di bit di rumore recente fornito dalla fonte di entropia, tenendo in attesa il chiamante se necessario. \fI/dev/random\fP è adatto ad usi che richiedono un alto grado di casualità, e può implicare ritardi indeterminati. .P Quando la fonte di entropia è vuota, le letture di \fI/dev/random\fP vengono bloccate finché non viene raccolto abbastanza rumore ambientale. Da Linux 5.6 il flag \fBO_NONBLOCK\fP è ignorato poiché \fI/dev/random\fP non si blocca più eccetto durante la fase iniziale del processo di avvio. Nelle versioni precedenti, se \fBopen\fP(2) è chiamato su \fI/dev/random\fP col flag \fBO_NONBLOCK\fP, una successiva lettura di \fBread\fP(2) non verrà bloccata se il numero di byte richiesti non è disponibile. Vengono invece restituiti i byte disponibili. Se nessun byte è disponibile, \fBread\fP(2) restituirà \-1 e \fIerrno\fP verrà impostato a \fBEAGAIN\fP. .P Il flag \fBO_NONBLOCK\fP non ha nessun effetto quando si apre \fI/dev/urandom\fP. Quando si chiama \fBread\fP(2) per il dispositivo \fI/dev/urandom\fP, letture fino a 256 byte retituiranno tanti byte quanti ne vengono richiesti e non verranno interrotti da un gestore di segnali. Letture con un buffer oltre questo limite possono restituire un numero di byte minore di quello richiesto o fallire con l'errore \fBEINTR\fP, se interrotto da un gestore di segnali. .P .\" commit 79a8468747c5f95ed3d5ce8376a3e82e0c5857fc .\" SEC_XFER_SIZE in drivers/char/random.c Da Linux 3.16, una chiamata \fBread\fP(2) su \fI/dev/urandom\fP restituirà al massimo 32\ MB. Una chiamata \fBread\fP(2) su \fI/dev/random\fP restituirà al massimo 512 byte (340 byte sui kernel Linux antecedenti alla versione 2.6.12). .P 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 L'interfaccia \fI/dev/random\fP è considerata un'interfaccia da mantenere per compatibilità col passato, mentre \fI/dev/urandom\fP è preferito e sufficiente in tutti i casi d'uso, fatta eccezione per applicazioni che richiedono casualità durante la fase di inizializzazione del sistema; per queste applicazioni si deve usare invece \fBgetrandom\fP(2), che non risponderà all'applicazione fino a quando la fonte di entropia non viene inizializzata. .P .\" Se si salva un file seed ai riavvii, come si raccomanda più avanti, 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. (Tutte le più importanti distribuzioni Linux hanno salvato il file seed ai riavvii almeno dal 2000.) Dato che le letture da \fI/dev/random\fP 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. .SS Configurazione Se il sistema non comprende già \fI/dev/random\fP né \fI/dev/urandom\fP, li si può creare coi seguenti comandi: .P .in +4n .EX mknod \-m 666 /dev/random c 1 8 mknod \-m 666 /dev/urandom c 1 9 chown root:root /dev/random /dev/urandom .EE .in .P 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 ad uno script appropriato che venga eseguito durante le procedure di avvio di un sistema Linux: .P .in +4n .EX echo "Inizializzazione del generatore di numeri casuali..." random_seed=/var/run/random\-seed # Carry a random seed from start\-up to start\-up # Load and then save the whole entropy pool 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 ] && bits=$(cat $poolfile) || bits=4096 bytes=$(expr $bits / 8) dd if=/dev/urandom of=$random_seed count=1 bs=$bytes .EE .in .P Inoltre, si aggiungano le righe seguenti ad uno script appropriato da eseguire durante le procedure di arresto di un sistema Linux: .P .in +4n .EX # 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 ] && bits=$(cat $poolfile) || bits=4096 bytes=$(expr $bits / 8) dd if=/dev/urandom of=$random_seed count=1 bs=$bytes .EE .in .P .\" Negli esempi visti prima, si presuppone che la versione di Linux sia la 2.6.0 o successiva, dove \fI/proc/sys/kernel/random/poolsize\fP restituisce la dimensione della fonte di entropia in bit (si veda più avanti). .SS "Interfaccia /proc" I file nella directory \fI/proc/sys/kernel/random\fP (presente da Linux 2.3.16) forniscono informazioni aggiuntive sul dispositivo \fI/dev/random\fP: .TP \fIentropy_avail\fP Questo file di sola lettura fornisce l'entropia disponibile, in bit. Questo sarà un numero nell'intervallo da 0 a 4096. .TP \fIpoolsize\fP Questo file fornisce la dimensione della fonte di entropia. La semantica di questo file è diversa a seconda della versione del kernel: .RS .TP Linux 2.4: Questo file indica la dimensione della fonte di entropia in \fIbyte\fP. 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 e successivo: Questo file è di sola lettura, e indica la dimensione della fonte di entropia in \fIbit\fP. Contiene il valore 4096. .RE .TP \fIread_wakeup_threshold\fP Questo file contiene il numero di bit di entropia richiesti per svegliare i processi che dormono in attesa dell'entropia da \fI/dev/random\fP. Il valore predefinito è 64. .TP \fIwrite_wakeup_threshold\fP Questo file contiene il numero di bit di entropia sotto i quali vengono svegliati i processi che eseguono un \fBselect\fP(2) o \fBpoll\fP(2) per accedere in scrittura a \fI/dev/random\fP. Questi valori possono venire cambiati scrivendo sui file. .TP \fIuuid\fP e \fIboot_id\fP .\" Questi file di sola lettura 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 \fBioctl\fP(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à \fBCAP_SYS_ADMIN\fP è necessaria per tutte le richieste eccetto che per \fBRNDGETENTCNT\fP. .TP \fBRNDGETENTCNT\fP Recupera il conteggio di entropia della fonte di input, il contenuto sarà lo stesso del file \fIentropy_avail\fP sotto proc. Il risultato verrà memorizzato nell'int indicato dall'argomento. .TP \fBRNDADDTOENTCNT\fP Incrementa o decrementa il numero di entropia della fonte di input del valore indicato dall'argomento. .TP \fBRNDGETPOOL\fP Rimosso in Linux 2.6.9. .TP \fBRNDADDENTROPY\fP 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 .in +4n .EX struct rand_pool_info { int entropy_count; int buf_size; __u32 buf[0]; }; .EE .in .IP Dove \fIentropy_count\fP è il valore aggiunto (o sottratto) al numero di entropia, e \fIbuf\fP è il buffer di dimensione \fIbuf_size\fP che viene aggiunto alla fonte di entropia. .TP \fBRNDZAPENTCNT\fP .TQ \fBRNDCLEARPOOL\fP Azzera il conteggio di entropia di tutte le fonti e aggiunge alcuni dati di sistema (come il minutaggio) alle fonti. .SH FILE \fI/dev/random\fP .br \fI/dev/urandom\fP .SH NOTE Per una panoramica e un confronto fra le varie interfacce che possono essere usate per ottenere casualità, si veda \fBrandom\fP(7). .SH BUG .\" .SH AUTHOR .\" The kernel's random number generator was written by .\" Theodore Ts'o (tytso@athena.mit.edu). Durante la fase di inizializzazione del sistema, le letture da \fI/dev/urandom\fP possono restituire dati prima che la fonte di entropia venga inizializzata. .SH "VEDERE ANCHE" \fBmknod\fP(1), \fBgetrandom\fP(2), \fBrandom\fP(7) .P RFC\ 1750, "Randomness Recommendations for Security" .PP .SH TRADUZIONE La traduzione italiana di questa pagina di manuale è stata creata da Ottavio G. Rizzo , Giulio Daprelà , Elisabetta Galli , Marco Curreli e Giuseppe Sacco . .PP Questa traduzione è documentazione libera; leggere la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Versione 3 .UE o successiva per le condizioni di copyright. Non ci assumiamo alcuna responsabilità. .PP Per segnalare errori nella traduzione di questa pagina di manuale inviare un messaggio a .MT pluto-ildp@lists.pluto.it .ME .