/dev/random: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Fix link
FrescoBot (discussione | contributi)
m Bot: correzione mesi e modifiche minori
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 [[numero casuale|valore numerico casuale]] o [[Numeri pseudo-casuali|pseudo-casuale]] ogni volta che vi si accede. Consente di accedere al rumore ambientale raccolto dai [[periferica|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]], [[Oracle 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.
Riga 6:
La generazione di numeri casuali dal [[kernel]] è stata implementata per la prima volta in [[Linux]]<ref>{{Cita web|url=http://www.randombit.net/bitbashing/security/syllable_dev_random.html |titolo=On Syllable's /dev/random |autore=Jack Lloyd |data=9 dicembre 2008 |accesso=27 aprile 2009|urlarchivio=http://www.webcitation.org/5gOzG0qvc|dataarchivio=29 aprile 2009|deadurl=no}}</ref> nel 1994 da [[Theodore Ts'o]].<ref>{{Cita web|url=http://everything2.com/title/%252Fdev%252Frandom |titolo=/dev/random |data=8 giugno 2003 |editore=everything2.com |accesso=27 aprile 2009|urlarchivio=http://www.webcitation.org/5gOzGLECz|dataarchivio=29 aprile 2009|deadurl=no}}</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 è durabile 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]] di rumore nella [[entropy pool]]. Da questa entropy pool i numeri casuali sono creati. Quando viene letto, <code>/dev/random</code> ritorna solo byte casuali all'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. 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://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 bit 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>.
Riga 19:
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 potrebbe 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>{{Cita web|titolo=How good is LavaRnd?: Detailed Description of Test Results and Conclusions |url=http://www.lavarnd.org/what/nist-test.html |data=22 settembre 2004 |opera=LavaRnd |editore=LavaRnd |accesso=22 Dec.dicembre 2010}}</ref> Simili difetti furono trovati nell'implementazione di <code>/dev/random</code> di [[Linux]] 2.4.21-20, [[Oracle Solaris (sistema operativo)|Solaris]] patch 8 108528-18 e [[Mac OS X]] 10.3.5.
 
FreeBSD fornisce inoltre supporto per [[Generatore hardware di numeri casuali|generatore di numeri casuali hardware]].
 
== Altri sistemi operativi ==
<code>/dev/random</code> e <code>/dev/urandom</code> sono disponibili su [[Oracle Solaris (sistema operativo)|Solaris]], [[Mac OS X]], [[NetBSD]], [[OpenBSD]], [[UNIX 5.1B]], [[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 allo standard e smette di riempire il pool quanto pensa che contenga abbastanza entropia..<ref>{{Cita web|url=http://lists.gnupg.org/pipermail/gnupg-devel/2003-April/019954.html |titolo=AIX 5.2 /dev/random and /dev/urandom devices |editore=Lists.gnupg.org |autore=Iain Roberts|data=25 aprile 2003 |accesso=18 settembre 2008}}</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]].