Nei sistemi operativi [[Unix]] e [[Unix-like]], '''/dev/random''' (random device, dispositivo casuale) è un [[ filedispositivo specialevirtuale]] (ossia non fisicamente presente su [[memoria di massa ]]) con la caratteristica di restituire un valore [[ numero casuale|valore numerico casuale]] o [[ numeroNumeri pseudocasualepseudo-casuali|pseudo-casuale]] ogni volta che vi si accede. Consente di accedere al rumore ambientale raccolto dai [[ dispositivoperiferica|dispositivi]] collegati e da altre sorgenti. /dev/random viene utilizzato per esempio per il test di [[applicazioni]] che operano su numeri casuali, o come sistema per individuare errori di programmazione ([[bug]]) su [[input]] casuali. Può essere impiegato anche per simulare il "rumore" (vale a dire la presenza di dati non corretti) nelle sequenze di input verso i [[driver]] di [[periferica]]. Un diverso utilizzo si ha nel campo della [[crittografia]] dove /dev/random può essere utilizzato per generare chiavi crittografiche casuali sia ad uso del [[sistema operativo]] che delle applicazioni. ▼
{{S|Unix}}
▲Nei sistemi operativi [[Unix]] e [[Unix-like]], '''/dev/random''' (random device, dispositivo casuale) è un [[file speciale]] (ossia non fisicamente presente su memoria di massa) con la caratteristica di restituire un valore [[numerico casuale]] o [[numero pseudocasuale|pseudo-casuale]] ogni volta che vi si accede. Consente di accedere al rumore ambientale raccolto dai [[dispositivo|dispositivi]] collegati e da altre sorgenti. /dev/random viene utilizzato per esempio per il test di [[applicazioni]] che operano su numeri casuali, o come sistema per individuare errori di programmazione ([[bug]]) su [[input]] casuali. Può essere impiegato anche per simulare il "rumore" (vale a dire la presenza di dati non corretti) nelle sequenze di input verso i [[driver]] di [[periferica]]. Un diverso utilizzo si ha nel campo della [[crittografia]]dove /dev/random può essere utilizzato per generare chiavi crittografiche casuali sia ad uso del [[sistema operativo]] che delle applicazioni.
Non tutti i sistemi operativi implementano la stessa semantica per /dev/random. [[Linux]] è stato il primo sistema Unix-like a implementare /dev/random come generatore di numeri casuali. Implementazioni simili si trovano in [[FreeBSD]], [[Solaris (sistema operativo)|Solaris]], [[Mac OS X]], [[NetBSD]], [[OpenBSD]], [[Tru64|Tru64 UNIX 5.1B]], [[AIX (sistema operativo)|AIX 5.2]], e [[HP-UX|HP-UX 11i v2]]. Nei sistemi[[Windows]] della famiglia NT funzioni simili vengono svolte dal file ksecdd.sys. ▼
▲Non tutti i sistemi operativi implementano la stessa semantica per /dev/random. [[Linux]] è stato il primo sistema Unix-like a implementare /dev/random come generatore di numeri casuali. Implementazioni simili si trovano in [[FreeBSD]], [[ Oracle Solaris (sistema operativo)|Solaris]], [[ Mac OS XmacOS]], [[NetBSD]], [[OpenBSD]], [[Tru64|Tru64 UNIX 5.1B]], [[AIX (sistema operativo)|AIX 5.2]], e [[HP-UX|HP-UX 11i v2]]. Nei sistemi [[Windows]] della famiglia NT funzioni simili vengono svolte dal file ksecdd.sys.
==Linux==
La generazione di numeri casuali dal [[kernel]] è stata implementata per la prima volta in [[Linux]]<ref>{{citeCita web|url=httphttps://www.randombit.net/bitbashing/security/syllable_dev_random.html |titletitolo=On Syllable's /dev/random |authorautore=Jack Lloyd |datedata=December 9, dicembre 2008 |accessdateaccesso=27 aprile 2009-04-27|archiveurlurlarchivio=httphttps://www.webcitation.org/5gOzG0qvc|archivedate?url=2009-04-29http://www.randombit.net/bitbashing/security/syllable_dev_random.html|deadurldataarchivio=no29 aprile 2009}}</ref> nel 1994 da [[Theodore Ts'o]].<ref>{{citeCita web |url=http://everything2.com/title/%252Fdev%252Frandom |titletitolo=/dev/random |datedata=June 8, giugno 2003 |publishereditore=everything2.com |accessdateaccesso=2009-04-27 aprile 2009 |archiveurlurlarchivio=httphttps://www.webcitation.org/5gOzGLECz|archivedate?url=2009-04-29http://everything2.com/title//dev/random |deadurldataarchivio=no29 aprile 2009 }}</ref>. L'implementazione usa [[SHA-1|hash sicuri]] al posto di un [[cifrario]] per evitare problemi legali che erano presenti al momento del progetto. L'implementazione tiene anche conto del fatto che un certo hash o cifrario potrebbe essere scoperto essere debole, e quindi il progetto è durabileprotetto contro ogni tale debolezza. <!--Fast recovery from [[pool compromise]] is not considered a requirement, because the requirements for pool compromise are sufficient for much easier and more direct attacks on unrelated parts of the operating system.-->
In questa implementazione, il generatore mantiene una stima del numero di [[bit]]s di rumore nella [[entropy pool]]. Da questa entropy pool i numeri casuali sono creati. Quando viene letto, <code>/dev/random</code> ritornarestituisce solo byte casuali llall'interno della stima del numero di bit di rumore nell'entropy pool. <code>/dev/random</code> può essere adatto per gli utenti che necessitano di una casualità di ottima qualità come per la creazione di [[one time pad]] o [[chiave pubblica|chiavi pubbliche]]. Quando l'entropy pool è vuota, la lettura di <code>/dev/random</code> si interrompe fino a quando non viene accumulato nuovo rumore ambientale.<ref>{{man|4|urandom}}</ref> Il motivo è di fornire un [[generatore di numeri pseudocasuale crittograficamente sicuro]], fornendo un output con un'entropia il più grande possibile.
Una controparte di <code>/dev/random</code> è '''/dev/urandom''' (sorgente causale non bloccata "unlocked" <ref>http[https://www.kernel.org/doc/man-pages/online/pages/man4/random.4.html random(4) - Linux manual page<!-- Titolo generato automaticamente -->]</ref>) che riusa il pool interno per produrre bitsbit pseudocasuali aggiuntivi. Questo significa che la richiesta non si blocca, ma il risultato potrebbe contenere meno entropia rispetto a <code>/dev/random</code>. Nonostante sia un generatore di numeri pseudocasuali adatto per la maggior parte delle applicazioni crittografiche, non è raccomandato per la generazione di chiavi crittografiche a lunga scadenza.
È inoltre possibile scrivere su <code>/dev/random</code>. Questo consente ad ogni utente di mischiare i dati casuali all'interno del pool. L'attuale ammontare dell'entropia e la dimensione dell'entropy pool del kernel Linux è disponibile attraverso <code>/proc/sys/kernel/random/</code>.
Nel Marzomarzo 2006 Gutterman, Pinkas, & Reinman hanno pubblicato un'analisi dettagliata del generatore di numeri casuali di Linux<ref>{{citeCita web|url=http://www.pinkas.net/PAPERS/gpr06.pdf |titletitolo=Analysis of the Linux Random Number Generator |authorautore=Zvi Gutterman |coauthorsautore2=Benny Pinkas, Tzachy Reinman |datedata=March 6, marzo 2006 |formatformato=PDF |accessdateaccesso=2008-09-18 settembre 2008}}</ref> nel quale descrivono alcune debolezze. Probabilmente il problema più importante riportato è quello che si verifica con sistemi [[sitemasistema embedded|embedded]] o con i [[Live CD]] nel quale lo stato di bootupavvio del sistema è prevedibile e l'entropia disponibile dall'ambiente potrebbe essere limitata. Per i sistemi con [[memoria non volatile]], è raccomandato salvare qualche stato del generatore allo spegnimento in modo da poterlo usare come stato al successivo avvio. Nel caso dei [[router]] nei quali il traffico di rete rappresenta la sorgente primaria di entropia, gli autori notano che salvare lo stato tra riavvii "dovrebbe far richiererichiederebbe a un potenziale attaccante di spiare su tutto il traffico di rete" che passa per il router, e ottenere un accesso diretto allo stato interno del router. Questo problema è particolarmente critico nel caso di router wireless il cui traffico di rete può essere catturato a distanza, il quale puòed essere utilizzato per generare chiavi crittografiche.
==FreeBSD==
Il sistema operativo [[FreeBSD]] implementa una variante a 256 bit dell'[[algoritmo Yarrow]] che ha lo scopo di fornire un [[generatore di numeri pseudocasuale crittograficamente sicuro]] che sostituisce il dispositivo random di Linux. A differenza di <code>/dev/random</code> di Linux, <code>/dev/random</code> di FreeBSD non è bloccante. Il suo comportamento è simile a <code>/dev/urandom</code> di Linux e <code>/dev/urandom</code> è collegato a <code>/dev/random</code>.
L'algoritmo Yarrow è basato sull'assunzione che i moderni generatori di numeri pseudocasuali sono molto sicuri se il loro stato rimane sconosciuto all'attaccante. Mentre un metodo basato su una entropy pool è completamente sicuro se implementato correttamente, non rimane sicuro se la quantità di entropia viene sovrastimata ed è più debole di un generatore basato su un seme belben inizializzato. In alcuni casi un attaccante potrebbe avere un considerevole controllo sull'entropia, per esempio i server senza disco potrebberepotrebbero prendere gran parte della propria entropia dalla rete , e questo lirimanendo rendecosì vulnerabili a un attacco man-in-the-middle. Yarrow mette molta attenzione nell'evitare che un pool sia compromesso e sul suo rapido ripristino. Il seme dell'algoritmo è periodicamente rigenerato; nei sistemi con bassa attività di rete e di disco, questo viene fatto dopo una frazione di secondo. ▼
Nel 2004 [[Landon Curt Noll]] testò <code>/dev/random</code> di FreeBSD 5.2.1 e concluse che non era crittograficamente sicuro perché il suo output aveva difetti multipli e uniformi.<ref>{{ citeCita web| titletitolo=How good is LavaRnd?: Detailed Description of Test Results and Conclusions |url=http://www.lavarnd.org/what/nist-test.html | datedata=22 Sepsettembre 2004 | workopera=LavaRnd | publishereditore=LavaRnd | accessdateaccesso=22 Dec.dicembre 2010}}</ref> Simili difetti furono trovati nell'implementazione di <code>/dev/random</code> di [[Linux]] 2.4.21-20, [[ Oracle Solaris ( operatingsistema systemoperativo)|Solaris]] patch 8 108528-18 e [[ Mac OS XmacOS]] 10.3.5. ▼
▲L'algoritmo Yarrow è basato sull'assunzione che i moderni generatori di numeri pseudocasuali sono molto sicuri se il loro stato rimane sconosciuto all'attaccante. Mentre un metodo basato su una entropy pool è completamente sicuro se implementato correttamente, non rimane sicuro se la quantità di entropia viene sovrastimata ed è più debole di un generatore basato su un seme bel inizializzato. In alcuni casi un attaccante potrebbe avere un considerevole controllo sull'entropia, per esempio i server senza disco potrebbere prendere gran parte della propria entropia dalla rete e questo li rende vulnerabili a un attacco man-in-the-middle. Yarrow mette molta attenzione nell'evitare che un pool sia compromesso e sul suo rapido ripristino. Il seme dell'algoritmo è periodicamente rigenerato; nei sistemi con bassa attività di rete e di disco, questo viene fatto dopo una frazione di secondo.
FreeBSD fornisce inoltre supporto per un [[ Generatore hardware di numeri casuali|generatore di numeri casuali hardware]]. ▼
▲Nel 2004 [[Landon Curt Noll]] testò <code>/dev/random</code> di FreeBSD 5.2.1 e concluse che non era crittograficamente sicuro perché il suo output aveva difetti multipli e uniformi.<ref>{{cite |title=How good is LavaRnd?: Detailed Description of Test Results and Conclusions |url=http://www.lavarnd.org/what/nist-test.html |date=22 Sep 2004 |work=LavaRnd |publisher=LavaRnd |accessdate=22 Dec. 2010}}</ref> Simili difetti furono trovati nell'implementazione di <code>/dev/random</code> di [[Linux]] 2.4.21-20, [[Solaris (operating system)|Solaris]] patch 8 108528-18 e [[Mac OS X]] 10.3.5.
random'''.
▲FreeBSD fornisce inoltre supporto per [[generatore di numeri casuali hardware]].
== Altri sistemi operativi ==
[http:<code>/ dev/ software.hp.comrandom</ portalcode> e <code>/ swdepotdev/ displayProductInfourandom</code> sono disponibili su [[Oracle Solaris (sistema operativo)|Solaris]], [[macOS]], [[NetBSD]], [[OpenBSD]], [[UNIX 5. do?productNumber=KRNG11I1B]], [[AIX 5.2]] e [[HP-UX 11i v2 ]]. Come in FreeBSD, AIX implementa un proprio algoritmo Yarrow. Tuttavia AIX usa una quantità di entropia considerevolmente minore allodello standard e smette di riempire il pool quantoquando pensa che contenga abbastanza entropia ..<ref>{{ citeCita web|url= httphttps://lists.gnupg.org/pipermail/gnupg-devel/2003-April/019954.html | titletitolo=AIX 5.2 /dev/random and /dev/urandom devices | publishereditore=Lists.gnupg.org | authorautore=Iain Roberts| datedata= April25 25,aprile 2003 | accessdateaccesso= 18 settembre 2008 -09-18}}</ref> ▼
<code>/dev/random</code> e <code>/dev/urandom</code> sono disponibili su [http://blogs.sun.com/yenduri/entry/dev_random_in_solaris Solaris], [http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man4/random.4.html Mac OS X], [http://netbsd.gw.com/cgi-bin/man-cgi?rnd++NetBSD-current NetBSD], [http://www.openbsd.org/cgi-bin/man.cgi?query=srandom&apropos=0&sektion=4&manpath=OpenBSD+Current&arch=i386&format=html OpenBSD],
[http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN4/0199____.HTM Tru64 UNIX 5.1B],
[http://publib.boulder.ibm.com/infocenter/pseries/v5r3/topic/com.ibm.aix.files/doc/aixfiles/random.htm#idx927 AIX 5.2],
e
▲[http://software.hp.com/portal/swdepot/displayProductInfo.do?productNumber=KRNG11I HP-UX 11i v2]. Come in FreeBSD, AIX implementa un proprio algoritmo Yarrow. Tuttavia AIX usa una quantità di entropia considerevolmente minore allo standard e smette di riempire il pool quanto pensa che contenga abbastanza entropia..<ref>{{cite web|url=http://lists.gnupg.org/pipermail/gnupg-devel/2003-April/019954.html |title=AIX 5.2 /dev/random and /dev/urandom devices |publisher=Lists.gnupg.org |author=Iain Roberts|date=April 25, 2003 |accessdate=2008-09-18}}</ref>
In [[Windows NT]], una funzione simile è fornita da <code>ksecdd.sys</code>, ma la lettura del file speciale <code>\Device\KsecDD</code> non funziona come in UNIX. I metodi documentati per generare bytes crittograficamente sicuri sono [[CryptGenRandom]] e [[RtlGenRandom]].
Anche se [[DOS]] non implementa nativamente una funzionalità simile ci sono driver da terze parti chiamati [http://www.rahul.net/dkaufman/index.html Noise.sys] che creano due dispositivi, <code>RANDOM$</code> and <code>URANDOM$</code>, che sono anche accessibili da <code>/DEV/RANDOM$</code> and <code>/DEV/URANDOM$</code>.
== EGD come alternativa ==
Il software '''EGD''' (entropy gathering daemon) è un'alternativa comune per i sistemi Unix che non supportano <code>/dev/random</code>. È un [[demoneDemone (informatica)|Demone]] che fornisce dati casuali di qualità crittografica. Alcuni software crittografici come [[OpenSSL]], [[GNU Privacy Guard]], e [[Apache HTTP Server]] usano EGD quando <code>/dev/random</code> non è disponibile.
[http://egd.sourceforge.net/ EGD ], o la compatibile alternativa [http://prngd .sourceforge.net/ prngd], raccolgono entropia pseudo-casuale da varie sorgenti, le processano per rimuovere distorsioni e migliorare la qualità crittografica e le rendono disponibili tramite un [[Unix ___domain socket]] ( '''/dev/edg-pool ''' è una scelta comune), o attraverso un [[Internet socket|TCP socket]]. L'accumulo dell'entropia di solito comporta [[ fork (programmazione)|fork]] di sottoprocessi periodici per interrogare gli attributi del sistema che sono tipicamente cambiano frequentemente e sono impredicibili, come la [[CPU ]], l'I/O, l'utilizzo della rete e il contenuto di vari file di log e [[directory ]] temporanee. ▼
== Note ==
▲[http://egd.sourceforge.net/ EGD], o la compatibile alternativa [http://prngd.sourceforge.net/ prngd], raccolgono entropia pseudo-casuale da varie sorgenti, le processano per rimuovere distorsioni e migliorare la qualità crittografica e le rendono disponibili tramite un [[Unix ___domain socket]] ('''/dev/edg-pool''' è una scelta comune), o attraverso un [[Internet socket|TCP socket]]. L'accumulo dell'entropia di solito comporta [[fork]] di sottoprocessi periodici per interrogare gli attributi del sistema che sono tipicamente cambiano frequentemente e sono impredicibili, come la CPU, l'I/O, l'utilizzo della rete e il contenuto di vari file di log e directory temporanee.
<references />
== Voci correlate ==
* [[Standard streams]]
* <ttkbd>[[:/dev/full]]</ttkbd>
* <ttkbd>[[:/dev/null]]</ttkbd>
* <ttkbd>[[:/dev/zero]]</ttkbd>
* <ttkbd>[[:/dev]]</ttkbd>
* [[Generatore hardware di numeri casuali hardware]]
* [[Generatore di numeri pseudocasuali crittograficamente sicuro]]
* [[Algoritmo Yarrow]]
* [[Fortuna (PRNG)|Algoritmo Fortuna]]
== NoteCollegamenti esterni ==
* [{{cita web|http://msdn2.microsoft.com/en-us/library/aa379942.aspx |CryptGenRandom ]}}▼
{{reflist}}
* [{{cita web|http://msdn2.microsoft.com/en-us/library/aa387694.aspx |RtlGenRandom ]}}▼
* [ https://web.archive.org/web/20110614015324/http://www.suse.de/~thomas/papers/random-analysis.pdf Biege, Thomas; Analysis of a strong Random Number Generator] [ https://web.archive.org/web/20110614015344/http://www.suse.de/~thomas/papers/23c3-random-analysis.pdf Slides] ▼
== Riferimenti ==
{{morefootnotes|date=December 2010}}
▲* [http://msdn2.microsoft.com/en-us/library/aa379942.aspx CryptGenRandom]
▲* [http://msdn2.microsoft.com/en-us/library/aa387694.aspx RtlGenRandom]
▲* [http://www.suse.de/~thomas/papers/random-analysis.pdf Biege, Thomas; Analysis of a strong Random Number Generator] [http://www.suse.de/~thomas/papers/23c3-random-analysis.pdf Slides]
{{DEFAULTSORT:/Dev/Random}}
[[Categoria:Randomness|Dev Random]]
[[Categoria:Unix|Dev Random]]
[[Categoria:Device file]]
[[de:/dev/random]]
[[en:/dev/random]]
[[es:/dev/random]]
[[fr:/dev/random]]
[[it:/dev/random]]
[[ja:/dev/random]]
[[pl:/dev/random]]
[[pt:/dev/random]]
[[ru:/dev/random и /dev/urandom]]
[[tr:/dev/random]]
[[zh:/dev/random]]
|