Innovazione nella generazione di numeri casuali da Intel

random_intel

Il problema della generazione di numeri casuali è strettamente legato con il problema della sicurezza informatica, infatti i principali metodi di crittografia risultano vulnerabili se non si dispone di un generatore di numeri "veramente" casuali. Vediamo quindi l’innovazione apportata da Intel in questo importate settore.

Potrà sembrare strano che generare numeri causali sia tanto difficile e forse sembra ancora più strano che i numeri casuali abbiano una qualche relazione con la sicurezza informatica. Iniziamo a capire questi due problemi con due racconti molto educativi.

Torniamo indietro al 1995. Supponiamo di voler fare il nostro primo acquisto online, tramite il nostro favoloso browser Netscape ci colleghiamo al sito di Amazon, scegliamo un bel libro e decidiamo di comprarlo. Per effettuare l’acquisto siamo rimandati ad una pagina https, quindi tutti i dati che inviamo sono criptati in modo sicuro per evitare che utenti maliziosi possano intercettare informazioni sensibili. Netscape per criptare i dati usa una sequenza numerica generata in modo casuale di modo da rendere praticamente impossibile decriptare i dati, poichè dovrebbe essere impossibile indovinare una sequenza numerica casuale. Piccolo problema, la sequenza casuale aveva una dimensione fissa di 40 bit, ciò implica circa tre trilioni di possibili combinazioni, sembrano tante ma anche un computer dell’epoca in trenta o poche più ore di lavoro avrebbe potuto identificare la sequenza esatta. Tutto sommato potrebbe anche andar bene così, solo che il presunto numero casuale era generato in base all’ora ed al numero del process id, dati tutt’altro che casuali e facilmente predicibili. Quindi servono numeri casuali molto ben generati. Penserete, va bene, ma sui sistemi seri queste cose non succedono… bene, allora passiamo alla prossima storia.

Andiamo al 2008, tempi recenti quindi, in cui si sarebbe dovuto far tesoro degli errori passati. Tutte le sequenze casuali usate da OpenSSL tra il 2006 ed il 2008 erano generate tramite hashing del "process ID" (numero univoco del processo) in Debian e derivati. La vignetta sottostante commemora quei tempi…

Comic about a fix random number (4)

Spero di aver reso bene il concetto. Generare numeri casuali non è una operazione banale ed è di grande importanza.

Il problema di fondo è che, per nostra fortuna, i calcolatori che usiamo quotidianamente sono deterministici e sempre in uno stato logico ben definito (al netto di qualche schermata blue ogni tanto in certi presunti sistemi operativi…), è un non senso generare numeri casuali partendo da un comportamento non casuale.

Fortunatamente "Dio gioca a dadi con l’universo" (contrariamente a quanto pensava Einstein) e quindi non è difficile trovare in natura sorgenti di "casualità".

Una buona soluzione è mostrata nella figura sottostante.

image of lava lamp

Non ho sbagliato figura, è proprio quello che vedete. Nel 1996, il sito LavaRnd si basò su questo caotico ed impredicibile movimento di liquidi per generare e fornire via web numeri del tutto casuali. Il sito esiste ancora ma si basa su metodi più sofisticati.

Però vogliamo qualcosa di facilmente integrabile in un computer. Certamente si potrebbe usare qualche dato fisico relativo alla CPU o leggere il rumore da un porta a cui non è collegato nessun dispositivo, ma sono fenomeni troppo incontrollabili per i quali non si può garantire una ampia gamma di valori non deterministici.

I ricercatori di Intel hanno sviluppato un circuito digitale per generare numeri completamente casuali in modo semplice e facilmente integrabile in un processore. L’idea alla base è semplice ed illustrata nella figura sottostante.

                                        [figura tratta da IEEE Spectrum]

Per capirne il funzionamento facciamo riferimeto al grafico sottostante.

                               [figura tratta da IEEE Spectrum]

Quando la coppia di transistor è nello stato on, la coppia di inverter forza il nodo A ed il nodo B allo stesso stato. Quando il segnale di Clock sale, i transistor sono nello stato off, lo stato dei due inverter è indeterminato, ma a causa del rumore termico ogni nodo passa ad uno stato logico univoco. In tal modo al variare del clock si possono generare sequenze casuali di bit.

Un precedente tentativo sempre da parte di Intel non diede buoni risultati. Basato su un circuito analogico, consumava potenza e non era di facile integrazione.

La soluzione prospettata di recente sembra decisamente più promettente, ancora devono essere fatte tutte le dovute prove per soddisfare una serie di standard internazionali sul tema, ma con buona probabilità la prossima generazione di processori avrà un generatore di numeri casuali altamente attendibile.

 "Anyone who considers arithmetical methods of producing random digits is, of course, in a state of sin."

John Von Neumann

Visita lo spazio dedicato a Intel su Farnell

9 Comments

  1. lucagiuliodori 11 novembre 2011
  2. Emanuele 11 novembre 2011
  3. Haru 11 novembre 2011
  4. lucagiuliodori 11 novembre 2011
  5. Raffaele65 11 novembre 2011
  6. Fabrizio87 12 novembre 2011
  7. Vittorio Crapella 31 dicembre 2011
  8. Emanuele 12 novembre 2011
  9. Fabrizio87 14 dicembre 2011

Leave a Reply