/dev/random: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Wiso (discussione | contributi)
Nessun oggetto della modifica
Wiso (discussione | contributi)
Nessun oggetto della modifica
Riga 1:
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 [[numeroNumeri pseudocasualepseudo-casuali|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.
{{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.
 
 
 
==Linux==
Line 17 ⟶ 13:
 
Nel Marzo 2006 Gutterman, Pinkas, & Reinman hanno pubblicato un'analisi dettagliata del generatore di numeri casuali di Linux<ref>{{cite web|url=http://www.pinkas.net/PAPERS/gpr06.pdf |title=Analysis of the Linux Random Number Generator |author=Zvi Gutterman |coauthors=Benny Pinkas, Tzachy Reinman |date=March 6, 2006 |format=PDF |accessdate=2008-09-18}}</ref> nel quale descrivono alcune debolezze. Probabilmente il problema più importante riportato è quello che si verifica con sistemi [[sitema embedded|embedded]] o con i [[Live CD]] nel quale lo stato di bootup è 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 richiere 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ò 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 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.
 
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 Solaris_(operating systemsistema_operativo)|Solaris]] patch 8 108528-18 e [[Mac OS X]] 10.3.5.
random'''.
 
FreeBSD fornisce inoltre supporto per [[Generatore hardware di numeri casuali|generatore di numeri casuali hardware]].
 
FreeBSD fornisce inoltre supporto per [[generatore di numeri casuali hardware]].
 
== Altri sistemi operativi ==
Line 41 ⟶ 33:
 
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 [[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]] 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.
Line 55 ⟶ 45:
* <tt>[[:/dev/zero]]</tt>
* <tt>[[:/dev]]</tt>
* [[Generatore hardware di numeri casuali hardware]]
* [[Generatore di numeri pseudocasuali crittograficamente sicuro]]
* [[Algoritmo Yarrow]]