Random Number Generation Techniques

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Random Number Generation Techniques"

Transcript

1 Scuola Politecnica e delle Scienze di Base Corso di Laurea in Ingegneria Informatica Elaborato finale in Elettronica Generale Random Number Generation Techniques Anno Accademico 2015/2016 Candidato: Giuseppe Primo matr. N

2 Alla mia Famiglia 2

3 Indice Random Number Generation Tecniques... 1 Indice... 3 Introduzione... 4 Capitolo 1: True Random Number Generator Direct Amplification Oscillator Sampling Discrete-Time Chaos Capitolo 2: Pseudo-Random Number Generator Middle Square Method Esempio MSM: Linear Congruential Generator Esempio LCG: Lagged Fibonacci Generator Mersenne Twister Blum Blum Shub Esempio BBS: Fortuna Capitolo 3: TRNGs VS. PRNGs Capitolo 4: Conclusioni Bibliografia

4 Introduzione I generatori di numeri casuali o Random Number Generators (RNGs) sono dispositivi hardware o componenti software in grado di generare sequenze di numeri casuali. Un numero casuale può essere visto come una singola osservazione di una specifica variabile aleatoria. Una sequenza di numeri, per essere definita casuale, deve soddisfare almeno due caratteristiche: I numeri appartenenti alla suddetta sequenza devono essere uniformemente distribuiti (equiprobabili). Ogni numero deve essere statisticamente indipendente dagli altri numeri della sequenza Gli studiosi concentrano le loro ricerche ed il loro lavoro nel campo della generazioni di numeri in maniera casuale perché i RNGs sono impiegati in molti scenari: giochi e lotterie, crittografia, generazione di dati per test, simulazioni al computer (ad esempio simulazione di Monte Carlo), videogiochi e, in generale, in tutte quelle applicazioni in cui sono richiesti eventi casuali. Nella maggior parte delle applicazioni è desiderabile avere un generatore veloce e che produca sequenze di numeri quanto più casuali possibile. Tuttavia, queste due proprietà sono, di solito, inversamente proporzionali tra di loro: RNGs di buona qualità sono spesso lenti, mentre RNGs di bassa qualità sono, tipicamente, veloci. Per valutare la qualità di un generatore di numeri casuali, si effettuano una serie di test statistici applicati alle sequenze di numeri ottenute. Attualmente, esistono molti test statistici ed ognuno di essi, in generale, mira a dimostrare la presenza o l assenza di pattern (o correlazione) all interno della sequenza generata. La presenza di correlazione all interno 4

5 della sequenza potrebbe indicare che la sequenza stessa non soddisfi le due proprietà citate e quindi, il generatore, sarà considerato di bassa qualità. E` importante tenere a mente che un numero finito di test statistici non può dimostrare che la sequenza generata sia casuale, è solo possibile dimostrare che la sequenza non è casuale. Dunque, poiché i test sono di natura statistica, non sarà possibile dare per certo il loro esito ma, ovviamente, più saranno i test che il generatore supera maggiore sarà la possibilità che il generatore sia un buon generatore. Si distinguono, a partire dal tipo di implementazione adottata, due principali famiglie di generatori: True Random Number Generator - TRNG e Pseudo-Random Number Generator - PRNG. 5

6 Capitolo 1: True Random Number Generator Chiamati anche Physical RNG o Hardware RNG lavorano sulla base di alcuni fenomeni fisici i quali ci si aspetta che siano puramente casuali. In particolare essi estraggono la casualità da processi fisici che si comportano, in linea di principio, in maniera non deterministica e quindi non predicibile. I fenomeni fisici su cui si basano questo tipo di generatori sono fenomeni microscopici come: il rumore termico, rumore atmosferico, effetto fotoelettrico, fenomeni quantistici o altri fenomeni. Un TRNG è un componente hardware spesso separato dal computer o dal dispositivo ospitante, connesso ad esso tramite USB o PCI bus. Si intuisce allora che la sorgente di rumore in ingresso al generatore deve spesso seguire un forte processo di digitalizzazione. In generale, l architettura di un TRNG (Fig. 3) prevede: Un segnale analogico n(t) generato dalla sorgente di rumore (Noise Source) in ingresso, sulla base di processi fisici non deterministici, al Digitizer. Una sorgente di rumore ideale genera un segnale con distribuzione di probabilità uniforme. Il Digitizer campiona il segnale analogico (ad es. con un comparatore) e lo converte in uno stream di bit random s[i] (segnale analogico digitalizzato). Il Digitizer, insieme al Noise Source forma il Digitizer Noise Source. Il segnale digitalizzato s[i] è dato in input al Post-Processing Unit il quale produce words composte da m-bit (Internal Random Numbers r[i]). 6

7 Questo blocco risolve due problemi: c è la possibilità che la distribuzione di probabilità dei random bits generati non sia puramente uniforme ed inoltre si potrebbe verificare una bassa entropia. In particolare, il Post-Processing block consente di ottenere sequenze uniformemente distribuite di 0 e 1. Questo componente hardware è implementato con diverse tecniche, tra le più diffuse si individuano: quella basata su un concetto proposto da John Von Neumann (Von Neumann Corrector, Fig.1) e quella basata su un operazione di OR esclusivo (XOR Corrector, Fig. 2). 1. Von Neumann Corrector converte coppie di bit in un solo output. In particolare converte la coppia [1, 0] in 0 e la coppia [0, 1] in 1. Per le coppie [0, 0] e [1, 1] non corrisponderà nessun output. [Fig. 1 Von Neumann Corrector] 2. XOR Corrector è basato sul concetto di OR Esclusivo descritto dalla tabella di verità in Fig. 2. [Fig. 2 Tabella di Verità XOR] Con l ausilio di questo componente, dunque, sarà possibile incrementare l entropia della sequenza in uscita ma il bit-rate complessivo del generatore, ovviamente, tenderà a diminuire. 7

8 Output Interface è un modulo che consente di avere una rappresentazione del numero generato in uno specifico formato. Quindi, tale blocco, converte la sequenza r[i] in una sequenza richiesta r_out[i] (External Random Number). [Fig. 3 Architettura generale di un TRNG] Le tecniche TRNG più diffuse sono tre: Direct Amplification Oscillator Sampling Discrete-Time Chaos 1.1 Direct Amplification La tecnica di generazione di numeri casuali più popolare è quella dell amplificazione diretta, mostrata in Fig.1.1. E` caratterizzata da un amplificatore operazionale per amplificare il segnale (rumore) prodotto dalla sorgente di rumore. La sorgente di rumore può essere, ad esempio: rumore termico (generato dal movimento degli elettroni in un resistore) shot noise (generato dal flusso di corrente che attraversa una giunzione p-n). 8

9 [Fig. 1.1 Tecnica di Amplificazione Diretta] Il rumore deve essere amplificato per consentire al comparatore di operare riducendo i margini di errore. Il comparatore, a partire dagli input, converte il segnale analogico in un bitstream che rappresenta il numero digitale generato. Nello specifico, la tecnica dell amplificazione diretta, consiste nel moltiplicare il segnale rumore w(n) col guadagno costante dell amplificatore K e, successivamente, comparare il risultato con una tensione di offset V off in modo da ottenere, in output, una sequenza di bit b DA (n) come descritto di seguito: b DA (n) = { 1, K w(n) < V off 0, altrimenti Per via della semplicità di realizzazione e del basso consumo di potenza, questa tecnica è adatta a soluzioni basate su singoli chip solo se è possibile schermare il rumore. Infatti è sensibile a variazioni deterministiche causate, in generale, da fenomeni di natura elettromagnetica o dalle particolari caratteristiche dell amplificatore stesso. Pertanto, il segnale ottenuto in output dall amplificatore sarà un segnale predicibile. La soluzione più efficiente potrebbe essere quella di schermare l intero circuito al fine di preservare il segnale di rumore. Questa soluzione però richiederebbe grandi sforzi, sia in termini di progettazione e sia in termini economici. 9

10 1.2 Oscillator Sampling La maggior parte dei TRNGs sono basati su oscillatori. In questo tipo di generatori, due o più oscillatori sono combinati al fine di produrre una sequenza random di bit. Un tipico esempio di questi generatori è mostrato in Fig I componenti fondamentali sono: Un oscillatore a bassa frequenza Un oscillatore ad alta frequenza Flip-Flop D L oscillatore a bassa frequenza fornisce un segnale di clock al Flip-Flop D in modo da campionare, sul fronte di salita, il segnale ad alta frequenza generato dall oscillatore ad alta frequenza. Di fondamentale importanza è il periodo di jitter delle oscillazioni in quanto comportano incertezza nel momento di cui si va a campionare in un determinato istante. La robustezza di tale generatore può essere incrementata definendo opportunamente la frequenza dei due oscillatori. La probabilità di generare numeri puramente casuali dipende, dunque, dal periodo di jitter. [Fig. 1.2 Basic oscillator-based Random Number Generator] Questa tecnica, a differenza del Direct Amplification, è più robusta in presenza di rumore non schermato. Inoltre è possibile, stabilendo il periodo degli oscillatori, la qualità dei numeri generati. 10

11 Ma è stato dimostrato che, a partire solamente jitter degli oscillatori, non è sufficiente generare sequenze puramente casuali. Inoltre, il bit-rate di un generatore di questo tipo è circa 100 kbps e, dunque, sarà difficile utilizzarlo in sistema crittografici ad alta velocita`. 1.3 Discrete-Time Chaos Una soluzione a questi problemi potrebbe essere quella basata sulla teoria del chaos. Il chaos può essere visto come un comportamento non periodico, a lungo termine e non prevedibile generato da un certo sistema dinamico non lineare. Un sistema caotico è, dunque, un sistema fisico dominato dal caos nel quale anche piccole sollecitazioni del sistema potrebbero avere notevoli conseguenze sullo stato futuro del sistema stesso. I sistemi caotici, dato lo stato iniziale del sistema, sono per natura deterministici. Se si conosce esattamente lo stato iniziale del sistema, l output del sistema potrebbe essere prevedibile. La particolarità di questo tipo di sistemi è che, in pratica, è difficile stimare lo stato iniziale del sistema e tale caratteristica li rende impredicibili. Possono essere utilizzate, ad esempio, le chaotic maps che sono una sottoclasse di sistemi dinamici non lineari a tempo discreto. Una tipica implementazione è la mappa shift di Bernoulli la quale esibisce un comportamento caotico mostrato in Fig All interno della mappa si genera: 0 se x n < 1/2 1 se x n > 1/2. 11

12 Le probabilità di tutte le transizioni è uguale ad ½ a prescindere dallo stato corrente del sistema. [Fig Bernoulli shift map] Generatori che implementano soluzioni di questo tipo sono simili ai convertitori A/D (Fig ) in quanto sono composti da N-moduli in cascata (N-bit A/D Converter). L output di un modulo è dato in input al modulo successivo. [Fig Esempio di una tecnica discrete-time chaos] L inserimento di più moduli in sequenza, consente di aumentare la velocità dell intero sistema e di conseguenza di migliorare la qualità dei bit casuali generati. Quindi l alta velocità, capacità di integrazione e l alta qualità dei bit generati rendono questo tipo di soluzione un candidato eccellente per la realizzazione di sistemi embedded basati su generatori di numeri casuali. I TRNGs basati su chaos sono molto più veloci dei TRNGs basati su oscillatori e possono essere facilmente integrati in altri circuiti. Come le tecniche basate su oscillatori, anche le tecniche discrete-time chaos sono robuste a influenze deterministiche (interferenze). 12

13 E` stato dimostrato, inoltre, che la non idealità delle mappe caotiche permettono di migliorare l efficienza del Post-Processing Unit. 13

14 Capitolo 2: Pseudo-Random Number Generator Numeri casuali possono essere ottenuti anche da algoritmi i quali dovrebbero produrre, in linea generale, una sequenza di numeri avente le stesse proprietà statistiche di una sequenza generata da un TRNG. L utilizzo di algoritmi però implica che i numeri verranno generati in modo completamente deterministico. Sarà quasi sempre necessario fornire un valore iniziale detto seme al fine di inizializzare l algoritmo. A parità di seme e di interazioni, questi metodi forniscono sempre la stessa identica sequenza. Per tale motivo questo tipo di generatori sono detti generatori Pseudo-Casuali. Nei PRNGs vengono generati, nella maggior parte dei casi, sequenze di numeri interi uniformemente distribuiti tra 0 e un numero massimo prestabilito, oppure sequenze di numeri reali compresi tra 0 e 1. Esistono numerosi tipi di PRNG che si differenziano in base al tipo di algoritmo implementato, tra i più importanti ed utilizzati si individuano: Middle Square Method Linear Congruential Generator Lagged Fibonacci Generator Mersenne Twister Blum Blum Shub Fortuna Gli ultimi due metodi, in particolare, sono utilizzati in tutte quelle applicazioni critiche basate su crittografia. Per tali generatori c è il bisogno di definire, oltre alle due proprietà citate precedentemente, un altra importante proprietà`: la non predicibilità. Ovvero, 14

15 l algoritmo usato per generare numeri casuali non deve permettere di ricostruire l intera sequenza di numeri a partire dalla conoscenza di una parte di essa o dal seme. Tutti i generatori che soddisfano questo requisito sono detti generatori crittograficamente sicuri (Cryptographically Secure Pseudo-Random Number Generator CSPRNG). 2.1 Middle Square Method Uno dei primi metodi proposti fu il Middle Square Method - MSM. Questo metodo fu inventato da John Von Neumann e descritto in una conferenza nel L algoritmo si basa su un idea sostanzialmente semplice: 1) Si stabilisce valore iniziale (seme) x 0 di M cifre 2) Tale valore è elevato al quadrato, aggiungendo degli 0 se necessario 3) L elemento successivo della sequenza in output sarà quello individuato dalle M cifre centrali di tale numero. 4) Il numero individuato farà da nuovo input all algoritmo ed iterando il processo è possibile ottenere una sequenza di numeri pseudo-random di M cifre Esempio MSM: x n = x 2 n = x n+1 = x 2 n+1 = x n+2 = Sono molte però le problematiche legate a questo tipo di algoritmo: Nel caso in cui le M cifre centrali siano tutte 0, il generatore produrrà solamente numeri ad M cifre nulle. Nel caso in cui almeno la metà delle cifre ottenute fosse composta da 0, tutti i successivi output decrescerebbero fino a 0. 15

16 Particolari valori iniziali potrebbero produrre sempre gli stessi output. Nonostante le carenze, questo metodo risulta comunque molto rapido. 2.2 Linear Congruential Generator La metodologia più utilizzata è quella degli algoritmi a congruenza lineare. Questo tipo di algoritmi permettono, in modo analogo all algoritmo Middle Square, di generare una sequenza di numeri casuali a partire da un seme. In più risolve il problema della comparsa degli zeri introdotto nel Middle Square Method. Il generatore lineare congruenziale - LCG fu introdotto intorno agli anni 50 dal matematico D.H. Lemer ed è ancora oggi molto utilizzato. Si basa su un concetto molto semplice da comprendere e da implementare. Il generatore implementa la seguente relazione matematica: x n+1 = (ax n + c) mod m In cui: x 0 è il seme o valore iniziale x n è un valore della sequenza m coefficiente intero strettamente maggiore di 0 chiamato modulo a coefficiente intero strettamente maggiore di 0 chiamato moltiplicatore c e` detto incremento ed è non negativo. Nel caso in cui c = 0 si parla di Park- Miller RNG o RNG moltiplicativo) Il periodo di un LCG può essere al più pari ad m e una scelta errata dei valori di a e c può influire negativamente sulla lunghezza della sequenza ottenuta. E` stato necessario, dunque, definire dei criteri per assegnare dei valori ad a, c, m e ad x 0 al fine di garantire periodo massimo. In particolare è stato dimostrato che converrebbe scegliere in parametri in questo modo: 1. c e m devono essere coprimi (MCD (c, m) = 1) 2. a 1 è divisibile per tutti i fattori primi di m 3. Se a 1 è multiplo di 4 anche m dovrà essere un multiplo di 4 16

17 2.2.1 Esempio LCG: Un esempio può essere mostrato scegliendo i parametri in questo modo: a = 3 c = 6 m = 5 x 0 = 1 L output è raffigurato in Fig dove si evince che, in questo caso, il periodo è uguale a 4. La relazione che caratterizza il generatore diventa: x i+1 = (3 x i + 6) mod 5 La sequenza generata sarà dunque: x 1 = (3 x 0 + 6) mod 5 = 4 x 2 = (3 x 1 + 6) mod 5 = 3 x 3 = (3 x 2 + 6) mod 5 = 0 x 4 = (3 x 3 + 6) mod 5 = 1 x 5 = (3 x 4 + 6) mod 5 = 4 x 6 = (3 x 5 + 6) mod 5 = 3 [Fig Sequenza generata dal LCG] Alcune librerie di vari compilatori implementano la funzione rand(), basata sul LCG, con parametri differenti. Tra le più importanti troviamo: 17

18 GNU C Library (glibc) che seleziona: m = 2 32, a = , c = e si considerano i bit ottenuti dal 30 a 0 Java.Util.Random che seleziona: m = 2 48, a = , c = 11 e si considerano i bit ottenuti dal 47 a 16 I vantaggi di questo tipo di approccio sono sicuramente la semplicità di realizzazione e la velocità di generazione dei numeri (complessità computazionale molto bassa). Queste caratteristiche gli permettono di essere utilizzati in tutti quei sistemi, con potenzialità di calcolo e memoria limitate, come i sistemi embedded e spesso nei videogiochi. Tuttavia, si può ottenere una sequenza periodica di periodo al più pari ad m, quindi occorre scegliere m elevato e valore di a, c e x 0 tali da avere periodo massimo. I valori x i generati sono determinati da questi ultimi quattro parametri rendendo le sequenze in uscita predicibili. Inoltre le sequenze generate risultano correlate, pertanto non si presta a tutte le applicazioni basate su crittografia e simulazione. 2.3 Lagged Fibonacci Generator Il generatore di Fibonacci ritardato è stato introdotto per cercare di allungare il periodo del generatore. E` basato sulla generalizzazione della successione di Fibonacci: F k = F k 1 + F k 2 Similmente, il generatore è definito dalla relazione: F k = (F k p F k p+q ) mod m In cui: F k e` l n-esimo termine della successione di numeri pseudo-casuali generati p e` chiamato lag del generatore e` una qualsiasi operazione (addizione, sottrazione, divisione, moltiplicazione o un operazione logica) m = 2 l è detto modulo Con tale algoritmo si generano numeri random formati da l bit. Nel generatore di Fibonacci, il periodo varia a seconda dell operatore utilizzato. Ad esempio, nel caso di somma o sottrazione, il generatore avrà periodo T tale che: 18

19 T (2 p 1) 2 l 1 Nel caso della moltiplicazione, il generatore avrà periodo T tale che: T (2 p 1) 2 l 3 Nel caso dell OR esclusivo, il periodo T diventera`: T (2 p 1) Tutti i generatori di Fibonacci hanno numerosi vantaggi rispetto ai generatori lineari congruenziali. Un aspetto di rilievo è il periodo relativamente più lungo rispetto ai LCGs in quanto può essere aumentato scegliendo un valore di p sufficientemente grande. E` stato dimostrato che con i generatori basati su addizione, sottrazione e moltiplicazione si ottengono buoni risultati sulla maggior parte dei test statistici anche con valori piccoli di p. Valori tipici della coppia (p, q) sono: (17, 5), (31, 13), (55, 24). E` però raccomandato scegliere valori di p sempre sufficientemente grandi al fine di migliorare la qualità del generatore stesso. Generatori basati su OR Esclusivo sono inefficienti per valori di p piccoli, mentre per valori grandi, riescono a superare tutti i test statistici. Per questi generatori è consigliato, inoltre, assegnare a p numeri primi di Mersenne. 2.4 Mersenne Twister E` un algoritmo sviluppato da M. Matsumoto e T.Nishimura nel Questo algoritmo viene proposto al fine di porre rimedio alle varie mancanze delle precedenti soluzioni. La prima cosa che bisogna osservare è che il periodo viene aumentato a , tale periodo non e` una casualita` in quanto, il generatore MT, e` stato progettato apposta per ovviare ai problemi introdotti dai generatori con periodo breve. Inoltre e` molto simile al LCG usato nel linguaggio C in termini di velocità di generazione. Il nome di questo metodo deriva dal fatto che la lunghezza del periodo scelto deve essere un numero primo di Mersenne. 19

20 Un numero primo di Mersenne è un numero primo esprimibile come: M p = 2 p 1 p è un numero intero positivo primo Nonostante sia trascurabile la correlazione tra valori successivi della sequenza, questo algoritmo, non è considerato ottimale in ambito crittografico ma si presta molto bene nei metodi Monte Carlo. In seguito però, sono state introdotte nuove varianti dell algoritmo in grado di lavorare anche in ambito crittografico. Si rimanda, per l implementazione di tale algoritmo, al sito ufficiale [11]. 2.6 Blum Blum Shub Questo algoritmo, facendo parte dei CSPRNGs, possiede proprietà che lo rendono particolarmente adatto in ambito della crittografia. Il Blum Blum Shub generator o anche BBS o generator x 2 mod n e` definito come: b i = x i mod 2 Dove: x i = x i 1 2 mod n n = pq è un numero intero chiamato Blum Integer p e q sono due numeri primi distinti con p = 3 (mod 4) e q = 3 (mod 4) Step eseguiti dall algoritmo: 1. Vengono scelti due numeri primi casuali molto grandi (p e q) e si calcola il Blum Integer: n = pq 2. Viene scelto un numero casuale, s 0 detto seme, primo con n ed appartenente 2 all intervallo [1, n 1]. Si calcola allora x 0 = s 0 mod n 3. Per i che va da 1 a l, con l numero di generazioni da effettuare, si esegue: 2 a. x i = x i 1 mod n b. Si calcola b i 20

21 2.1.1 Esempio BBS: n = p q = 7 19 = 133 s = 100 x 0 = mod 133 = 25 b o = 1 x 1 = 25 2 mod 133 = 93 b 1 = 0 x 2 = 93 2 mod 133 = 4 b 2 = 0 x 3 = 4 2 mod 133 = 16 b 3 = 1 x 4 = 16 2 mod 133 = 123 b 4 = 1 L output sarà: [1, 0, 0, 1, 1] Questo algoritmo è poco efficiente nelle simulazioni in quanto potrebbe essere laborioso il calcolo dei numeri. Inoltre, la sequenza prodotta da questo algoritmo non è bilanciata (le frequenze con cui si verificano gli 0 e gli 1 non sono uguali). Tuttavia, è stato dimostrato che, questa non uniformità non è poi così differente dalle sequenze generate da un TRNG della stessa lunghezza. Per tale motivo si presta molto bene in ambito crittografico. 2.7 Fortuna Fortuna è un algoritmo di generazione di numeri pseudo-casuali creato da B.Schneier e N. Ferguson. Il nome deriva dalla Dea del caso e del destino nella mitologia Romana. Questo algoritmo tende a svincolarsi dal concetto di seme come visto finora. Il generatore si articola in tre parti: 1. Accumulatore di entropia: raccoglie dati provenienti da varie sorgenti esterne (es. tastiera, mouse, scheda audio ecc ) e li usa come seme del generatore. I dati provenienti dalle sorgenti esterne sono uniformemente distribuiti tra 32 pool chiamati, rispettivamente, P 0, P 1,, P 31. In teoria, un singolo pool, potrebbe contenere infiniti dati e, se accumula sufficiente entropia, verrà aggiornato rinnovando così il seed del generatore. Sarà presente un contatore che tiene traccia del pool correntemente utilizzato per l aggiornamento del seme del generatore. 21

22 [Fig. Fortuna s 32 Entropy Pools] 2. Generatore: viene inizializzato con un seed proveniente dall accumulatore di entropia e genera sequenze di lunghezza arbitrarie di numeri pseudo-casuali. Il generatore è realizzato tramite un cifrario a blocchi (ad esempio AES). Lo stato interno del generatore è caratterizzato da una chiave a 256-bit (quella proveniente dall accumulatore) e da un contatore a 128-bit. Dopo ogni richiesta di dati casuali, si generano 256-bit supplementari e si utilizzano come nuova chiave (next key) del codice a blocchi al fine di rendere l algoritmo crittograficamente sicuro. [Fig. Fortuna s Generator Core] 3. Seed File Manager: una volta avviato l algoritmo, si crea un seed file usato per memorizzare un certo quantitativo di dati casuali per inizializzare il generatore all avvio 22

23 del dispositivo. Questo per far sì che l algoritmo generi dati casuali sin dall inizio, in quanto i livelli di entropia raccolto dall accumulatore, all avvio dell algoritmo, non sono ancora sufficienti per la generazione di numeri random. Allo start-up il seed file è letto, immediatamente un seed è generato e scritto all interno del file. Quindi se si riavvia il dispositivo, non bisogna attendere che le fonti di casualità generino un numero di eventi sufficiente ad effettuare il primo rinnovo del seme. Un tipico problema potrebbe sorgere nel momento in cui si verifica uno spegnimento anomalo della macchina. Si cerca allora di tenere sempre aggiornato il file del seme quando si accumula sufficiente entropia. E` consigliato aggiornare il file ogni 10 minuti circa ma questo dipende dal tipo di applicazione che si sta progettando e dalla velocità dell accumulatore nel raccogliere entropia. Questo generatore riesce a produrre sequenze casuali di qualità molto alta ed inoltre è relativamente facile implementarlo. Ciò lo rende un ottimo candidato in tutte le applicazioni basate su crittografia. 23

24 Capitolo 3: TRNGs VS. PRNGs Finora abbiamo analizzato le tecniche di generazione di numeri casuali più diffuse, sia quelle basate su TRNG sia quelle basate su PRNG, cercando di porre in risalto i vantaggi e svantaggi di ogni tecnica. Lo scopo di questo capitolo è di mettere a confronto, anche sulla base di un esempio pratico, le più significative differenze tra le due famiglie di generatori. Si parte dal presupposto che un modo semplice per esaminare un generatore di numeri è, senza effettuare test statistici, mostrare una visualizzazione grafica dei numeri prodotti in quanto risulta più semplice dedurre qualcosa osservando semplicemente un immagine. Questo approccio ovviamente non è esaustivo come l insieme dei test statistici ma consente, rapidamente, di farsi un idea su cosa si sta cercando di dimostrare. Sono state generate, a tal fine, due bitmap: una tramite il tool Bitmap Generator basato su un TRNG del sito web [15] e l altra tramite un algoritmo implementato in C++ (basato dunque su un PRNG) mostrato in Fig.3.1. Il Bitmap Generator si avvale di un TRNG il quale utilizza, come sorgente, il rumore atmosferico. L algoritmo implementato, invece, genera numeri casuali, nell intervallo [0, 1], con l ausilio della funzione rand() della libreria <cstdlib> del C++. La funzione rand() è inizializzata da un seme tramite la chiamata della funzione srand(). La bitmap è caratterizzata da uno sfondo bianco e nel caso in cui venga generato un 1 allora si va a colorare di nero un pixel all interno della bitmap. Alla fine dell algoritmo la bitmap è salvata su un file PRNG_bitmap1.bmp. Il programma è stato compilato col MinGW GCC ed eseguito sulla piattaforma Microsoft Windows 10 e processore AMD A8. 24

25 [Fig. 3.1 Codice sorgente del bitmap generator in C++] Una volta generate, le due bitmap, sono state messe a confronto Fig. 3.2 e Fig

26 [Fig.3.2 Bitmap generata col Bitmap Generator] [Fig.3.3 Bitmap generata con la funzione rand() del C++] Come si può notare dalle immagini, la bitmap generata con C++/Windows presenta una certa correlazione tra i pixel rispetto a quella generata col Bitmap Generator. Questo dimostra la sostanziale differenza tra le due famiglie di generatori. Ovvero, a partire da un determinato seme, i PRNGs generano sequenze di numeri di bassa qualità e periodiche a differenza dei TRNGs. Inoltre cambiando il seme, ad es. srand(9), la bitmap generata sarà del tutto simile a quella in Fig.3.3 e la correlazione tra i pixel persiste. E` interessante notare che questo algoritmo genera una grande sequenza di numeri in pochissimo tempo (ovviamente la velocità di esecuzione varia sulla base di molti fattori). Nello specifico sono stati generati numeri in s. Sulla base di tutte le osservazioni fatte si deduce allora che i PRNGs sono: Efficienti, perché riescono a produrre moltissimi numeri in tempi ridotti Deterministici, perché se si conosce lo stato iniziale, una certa sequenza di numeri può essere riprodotta in un secondo momento Periodici, perché le sequenze generate potrebbero ripetersi nel tempo. Anche se attualmente, con i moderni generatori, sono stati raggiunti periodi talmente lunghi che possono essere considerati aperiodici in diversi scenari applicativi. 26

27 D altro canto, i TRNGs sono: Inefficienti, perché, paragonati ai PRNGs, necessitano di molto più tempo per produrre sequenze di numeri casuali Non deterministici, perché una certa sequenza di numeri non può essere riprodotta Aperiodici Queste caratteristiche sono riassunte nella tabella in Fig.3.4 [Fig. 3.4 Confronto tra PRNGs e TRNGs] 27

28 Capitolo 4: Conclusioni A questo punto è lecito porsi la seguente domanda: quale generatore, tra tutti quelli osservati, è il migliore? Ancora una volta la risposta a questa domanda è: dipende. La scelta di utilizzare uno specifico RNG consegue dal tipo di scenario applicativo e dai requisiti che bisogna soddisfare. Non è possibile, dunque, dire che una soluzione è migliore rispetto ad un altra. Si può solamente dire che, a partire dai requisiti di progetto che bisogna soddisfare, una soluzione potrebbe essere più adatta rispetto ad un altra. Quindi, avendo analizzato gli aspetti più significativi delle due famiglie di generatori è possibile affermare che: I PRNGs sono adatti in tutte quelle applicazioni che richiedono, in tempi ridotti, grandi sequenze di numeri e una certa periodicità come ne caso della generazione di sequenze di spreading nelle tecniche spread spectrum come, ad esempio, frequency hopping. I TRNGs sono utili in tutte le applicazioni che richiedono una certa qualità di sequenze generate. Sono utilizzati in particolar modo nel campo della crittografia in quanto la robustezza dei sistemi crittografici è determinata dalla loro capacità di generare, tramite un RNG, una keystream non predicibile e non riproducibile. I TRNGs sono però difficili da progettare, da integrare e sono costosi. Per questi motivi, in ambito crittografico sono stati proposti i così detti CSPRNGs i quali, nonostante siano classificati come PRNGs, soddisfano i requisiti di sicurezza. 28

29 Soluzioni alternative ed innovative sono rappresentate dagli Hybrid Random Number Generator HRNG in Fig Questa soluzione è osservata con grande interesse dagli studiosi in quanto potrebbe risolvere numerosi problemi in termini di qualità di sequenze e velocità di generazione. [Fig. 4.0 Implementazione più popolare di un Hybrid RNG] Infatti si cerca di combinare i TRNGs con i PRNGs tra di loro: si genera un seme con un TRNG, questo seme va ad inizializzare un PRNG in modo da avere un generatore che produce sequenze puramente casuali (grazie al rinnovo periodico del seme col TRNG) generate in modo estremamente rapido (grazie all algoritmo efficiente del PRNG). 29

30 Bibliografia [1] Craig S. Petrie and J. Alvin Connelly, A Noise-Based IC Random Number Generator for Applications in Cryptography, IEEE Transactions on Circuits and Systems I: Fundamental Theory and Applications, VOL. 47, NO. 5, 05/2000 [2] Benjamin Jun and Paul Kocher, The Intel Random Number Generator, Cryptography Research, Inc. White Paper Prepared For Intel Corporation, 22/04/1999 [3] V. Kote, V. Molata, J. Jakovenko1, Improved Structure of True Random Number Generator with Direct Amplification of Analog Noise, 2012 [4] G. Bucci and R. Luzzi, "Design of Testable Random Bit Generators," in Cryptographic Hardware and Embedded Systems CHES 2005, 7th International Workshop, Edinburgh, Scotland, August 29 September 1, 2005, Proceedings, ser. Lecture Notes in Computer Science, J. R. Rao and B. Sunar, Eds., vol pp , Springer, [5] Dries Schellekens, Bart Preneel, and Ingrid Verbauwhede, FPGA Vendor Agnostic True Random Number Generator [6] Hamid Nejati, Ahmad Beirami, and Warsame H. Ali, Discrete-Time Chaotic-Map Truly Random Number Generators: Design, Implementation, and Variability Analysis of the Zigzag Map, 5/06/2012 [7] Wikipedia, 07/04/2016 [8] Srinivas Aluru1, Lagged Fibonacci Random Number Generators for Distributed Memory Parallel Computers, Journal of Parallel and Distributed Computing 45, article no. PC [9] Wikipedia, 08/04/

31 [10] 19/04/2016 [11] Thomas W. Cusick, Properties of the x2 mod N Pseudorandom Number Generator, IEEE Transaction on Information Theory, vol. 41, no. 4, July 1995 [12] Wikipedia, 09/04/2016 [13] Robert McEvoyt, James Curran, Paul Cotter, and Colin Murphyt, Fortuna: Cryptographically Secure Pseudo-Random Numnber Generation In Software And Hardware, 28/06/2006 [14] 21/04/2016 [15] N. M. Thamrin1, G. Witjaksono, A. Nuruddin, M. S. Abdullah, An Enhanced Hardware-based Hybrid Random Number Generator for Cryptosystem 31

Random Number Generation Techniques

Random Number Generation Techniques Scuola Politecnica e delle Scienze di Base Corso di Laurea in Ingegneria Informatica Elaborato finale in Elettronica Generale Random Number Generation Techniques Anno Accademico 2016/2017 Candidato: Vincenzo

Dettagli

NUMERI CASUALI E SIMULAZIONE

NUMERI CASUALI E SIMULAZIONE NUMERI CASUALI E SIMULAZIONE NUMERI CASUALI Usati in: statistica programmi di simulazione... Strumenti: - tabelle di numeri casuali - generatori hardware - generatori software DESCRIZIONE DEL PROBLEMA

Dettagli

Generazione di numeri random. Distribuzioni uniformi

Generazione di numeri random. Distribuzioni uniformi Generazione di numeri random Distribuzioni uniformi I numeri random Per numero random (o numero casuale) si intende una variabile aleatoria distribuita in modo uniforme tra 0 e 1. Le proprietà statistiche

Dettagli

Generatori di numeri casuali

Generatori di numeri casuali Statistica computazionale Generatori di numeri casuali Alberto Lusoli www.cash-cow.it Distribuito sotto licenza Creative Common Share Alike Attribution La generazione dei numeri casuali è troppo importante

Dettagli

CALCOLO NUMERICO. Prof. Di Capua Giuseppe. Appunti di Informatica - Prof. Di Capua 1

CALCOLO NUMERICO. Prof. Di Capua Giuseppe. Appunti di Informatica - Prof. Di Capua 1 CALCOLO NUMERICO Prof. Di Capua Giuseppe Appunti di Informatica - Prof. Di Capua 1 INTRODUZIONE Quando algoritmi algebrici non determinano la soluzione di un problema o il loro «costo» è molto alto, allora

Dettagli

Metodi Computazionali della Fisica Secondo Modulo: C++

Metodi Computazionali della Fisica Secondo Modulo: C++ Metodi Computazionali della Fisica Secondo Modulo: C++ Seconda Lezione Andrea Piccione () Metodi Comptazionali della Fisica - Secondo Modulo: C++ Milano, 09/1/08 1 / 9 La lezione di oggi Obiettivo: implementare

Dettagli

Capitolo IX. Convertitori di dati

Capitolo IX. Convertitori di dati Capitolo IX Convertitori di dati 9.1 Introduzione I convertitori di dati sono circuiti analogici integrati di grande importanza. L elaborazione digitale dei segnali è alternativa a quella analogica e presenta

Dettagli

Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017

Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017 Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017 Palermo 24-28 Luglio 2017 www.u4learn.it Arianna Pipitone Introduzione alla probabilità MATLAB mette a disposizione degli utenti una serie di funzioni

Dettagli

Simulazione dei dati

Simulazione dei dati Simulazione dei dati Scopo della simulazione Fasi della simulazione Generazione di numeri casuali Esempi Simulazione con Montecarlo 0 Scopo della simulazione Le distribuzioni di riferimento usate per determinare

Dettagli

Laboratorio di Calcolo I. Applicazioni : Metodo Monte Carlo

Laboratorio di Calcolo I. Applicazioni : Metodo Monte Carlo Laboratorio di Calcolo I Applicazioni : Metodo Monte Carlo 1 Monte Carlo Il metodo di Monte Carlo è un metodo per la risoluzione numerica di problemi matematici che utilizza numeri casuali. Si applica

Dettagli

Appunti di informatica. Lezione 5 anno accademico Mario Verdicchio

Appunti di informatica. Lezione 5 anno accademico Mario Verdicchio Appunti di informatica Lezione 5 anno accademico 2015-2016 Mario Verdicchio L algoritmo di Euclide per l MCD Dati due numeri A e B, per trovare il loro MCD procedere nel seguente modo: 1. dividere il maggiore

Dettagli

Lezione 1. Sistemi operativi. Marco Cesati System Programming Research Group Università degli Studi di Roma Tor Vergata.

Lezione 1. Sistemi operativi. Marco Cesati System Programming Research Group Università degli Studi di Roma Tor Vergata. Lezione 1 Sistemi operativi 4 marzo 2014 System Programming Research Group Università degli Studi di Roma Tor Vergata SO 14 1.1 Di cosa parliamo in questa lezione? È una introduzione generale ai sistemi

Dettagli

Valutazione delle prestazioni

Valutazione delle prestazioni Valutazione delle prestazioni Architetture dei Calcolatori (lettere A-I) Valutazione delle prestazioni Misura/valutazione di un insieme di parametri quantitativi per Quantificare le caratteristiche di

Dettagli

Simulazione. D.E.I.S. Università di Bologna DEISNet

Simulazione. D.E.I.S. Università di Bologna DEISNet Simulazione D.E.I.S. Università di Bologna DEISNet http://deisnet.deis.unibo.it/ Introduzione Per valutare le prestazioni di un sistema esistono due approcci sostanzialmente differenti Analisi si basa

Dettagli

Rappresentazione dei numeri interi in un calcolatore

Rappresentazione dei numeri interi in un calcolatore Corso di Calcolatori Elettronici I Rappresentazione dei numeri interi in un calcolatore Prof. Roberto Canonico Università degli Studi di Napoli Federico II Dipartimento di Ingegneria Elettrica e delle

Dettagli

Il calcolatore. Architettura di un calcolatore (Hardware)

Il calcolatore. Architettura di un calcolatore (Hardware) Il calcolatore Prima parlare della programmazione, e' bene fare una brevissima introduzione su come sono strutturati i calcolatori elettronici. I calcolatori elettronici sono stati progettati e costruiti

Dettagli

Le misure di tempo e frequenza

Le misure di tempo e frequenza Le misure di tempo e frequenza Le misure di tempo e frequenza costituiscono un importante branca delle misure elettriche ed elettroniche ed in generale delle misure di grandezze fisiche. E possibile raggiungere

Dettagli

Teoria dell Informazione

Teoria dell Informazione Corso di Laurea Magistrale in Scienze dell Informazione Editoriale, Pubblica e Sociale Teoria dell Informazione Cosa è l informazione L informazione è qualcosa che si possiede e si può dare ad un altro

Dettagli

Sistemi RAID. Motivazioni Concetti di base Livelli RAID. Sommario

Sistemi RAID. Motivazioni Concetti di base Livelli RAID. Sommario Sistemi RAID 1 Motivazioni Concetti di base Livelli RAID Sommario 2 1 Motivazione L evoluzione tecnologica ha permesso di avere dischi sempre più piccoli e meno costosi E facile equipaggiare un sistema

Dettagli

Massimo Benerecetti Tabelle Hash

Massimo Benerecetti Tabelle Hash Massimo Benerecetti Tabelle Hash # Lezione n. Parole chiave: Corso di Laurea: Informatica Insegnamento: Algoritmi e Strutture Dati I Email Docente: [email protected] A.A. 2009-2010 Rappresentazione di insiemi

Dettagli

Introduzione alla probabilità. Renato Mainetti

Introduzione alla probabilità. Renato Mainetti Introduzione alla probabilità Renato Mainetti Esperimenti sulla probabilità: Vedremo come utilizzare semplici funzioni di matlab per avvicinarci al mondo della probabilità, iniziando così ad introdurre

Dettagli

Acquisizione Dati. Introduzione

Acquisizione Dati. Introduzione UNIVERSITÀ DEGLI STUDI DI CAGLIARI Dipartimento di Ingegneria Meccanica, Chimica e dei Materiali Corso di Sperimentazione sulle Macchine Acquisizione Dati Introduzione Introduzione In campo scientifico

Dettagli

Sistemi di Elaborazione delle Informazioni

Sistemi di Elaborazione delle Informazioni SCUOLA DI MEDICINA E CHIRURGIA Università degli Studi di Napoli Federico II Corso di Sistemi di Elaborazione delle Informazioni Dott. Francesco Rossi a.a. 2016/2017 1 Programma del corso Informatica di

Dettagli

NUMERI PRIMI E CRITTOGRAFIA

NUMERI PRIMI E CRITTOGRAFIA NUMERI PRIMI E CRITTOGRAFIA Parte I. Crittografia a chiave simmetrica dall antichità all era del computer Parte II. Note della Teoria dei Numeri concetti ed algoritmi a supporto della Crittografia Parte

Dettagli

Concetti Introduttivi

Concetti Introduttivi Concetti Introduttivi Architettura del Computer http://www.dia.uniroma3.it/~roselli/ [email protected] Credits Materiale a cura del Prof. Franco Milicchio Introduzione In questo corso ci occuperemo

Dettagli

Probabilità e Statistica

Probabilità e Statistica Probabilità e Statistica Non faremo una trattazione sistematica di probabilità e statistica (si veda in proposito il corso di Esperimentazioni III) Richiameremo alcuni argomenti che avete già visto quando

Dettagli

Rappresentazione dei numeri

Rappresentazione dei numeri Rappresentazione dei numeri Così come per qualsiasi altro tipo di dato, anche i numeri, per essere immagazzinati nella memoria di un calcolatore, devono essere codificati, cioè tradotti in sequenze di

Dettagli

CANALE STAZIONARIO CANALE TEMPO INVARIANTE

CANALE STAZIONARIO CANALE TEMPO INVARIANTE CANALE STAZIONARIO Si parla di un Canale Stazionario quando i fenomeni che avvengono possono essere modellati da processi casuali e le proprietà statistiche di tali processi sono indipendenti dal tempo.

Dettagli

2.3.1 Generazione di numeri pseudocasuali con distribuzione uniforme

2.3.1 Generazione di numeri pseudocasuali con distribuzione uniforme GENERAZIONE DI OSSERVAZIONI CASUALI 145 2.3 GENERAZIONE DI OSSERVAZIONI CASUALI Una volta determinate le distribuzioni di input, la simulazione dovrà generare durante ogni esecuzione osservazioni casuali

Dettagli

IL PROCESSO di PROGETTAZIONE

IL PROCESSO di PROGETTAZIONE IL PROCESSO di PROGETTAZIONE In questa lezione vedremo: Ruolo della modellazione nella comunicazione tipi di modello nel progetto I modelli del prodotto Interpretazione delle informazioni del progetto

Dettagli

Architettura generale del calcolatore Hardware (tutto ciò che e tangibile) Software (tutto ciò che non e tangibile)

Architettura generale del calcolatore Hardware (tutto ciò che e tangibile) Software (tutto ciò che non e tangibile) Architettura generale del calcolatore Hardware (tutto ciò che e tangibile) La macchina di Von Neumann Le periferiche Software (tutto ciò che non e tangibile) Il sistema operativo I programmi applicativi

Dettagli

Introduzione al Calcolo Scientifico

Introduzione al Calcolo Scientifico Introduzione al Calcolo Scientifico Corso di Analisi Numerica, a.a. 2006/2007 Francesca Mazzia Dipartimento di Matematica Università di Bari 16 Ottobre 2006 Francesca Mazzia (Univ. Bari) Introduzione al

Dettagli

PRBS. Pseudo Random Binary Sequence

PRBS. Pseudo Random Binary Sequence PRBS Pseudo Random Binary Sequence MARTINA FAVARO Dipartimento di Ingegneria dell Informazione, Università di Padova Lezione n.2 Che cosa é una PRBS? É noto che il segnale di input in un processo di identificazione

Dettagli

Ogni elaboratore esegue delle operazioni sulle informazioni combinandole e trasformandole. Per processare le informazioni vengono eseguite delle

Ogni elaboratore esegue delle operazioni sulle informazioni combinandole e trasformandole. Per processare le informazioni vengono eseguite delle Tipi di Elaboratori Supercomputer Server o mainframe Desktop - Personal Computer Workstation Notebook Portatili Tascabili Palmari Terminali (stupidi/intelligenti) Ogni elaboratore esegue delle operazioni

Dettagli

Università degli studi di Genova

Università degli studi di Genova 1 Introduzione Lo sviluppo tecnologico degli ultimi anni ha portato il mondo degli azionamenti elettrici ad una evoluzione dal ritmo molto elevato. La comparsa di nuovi motori elettrici e l introduzione

Dettagli

Programma del corso. Introduzione Rappresentazione delle Informazioni Calcolo proposizionale Architettura del calcolatore Reti di calcolatori

Programma del corso. Introduzione Rappresentazione delle Informazioni Calcolo proposizionale Architettura del calcolatore Reti di calcolatori Programma del corso Introduzione Rappresentazione delle Informazioni Calcolo proposizionale Architettura del calcolatore Reti di calcolatori Cos è un Calcolatore? Un computer (calcolatore) è una macchina

Dettagli

COMUNICAZIONI ELETTRICHE. Francesca VATTA

COMUNICAZIONI ELETTRICHE. Francesca VATTA COMUNICAZIONI ELETTRICHE Francesca VATTA Introduzione Nel corso di comunicazioni elettriche ci proponiamo di studiare i seguenti argomenti: 1. la trasmissione di un segnale da un punto a un altro dello

Dettagli

Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati

Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati Informatica 3 LEZIONE 10: Introduzione agli algoritmi e alle strutture dati Modulo 1: Perchè studiare algoritmi e strutture dati Modulo 2: Definizioni di base Informatica 3 Lezione 10 - Modulo 1 Perchè

Dettagli

Elettronica analogica: cenni

Elettronica analogica: cenni Elettronica analogica: cenni VERSIONE 23.5.01 valle del componente di acquisizione dati nella struttura funzionale di un sistema di misura: misurando x y y z sens elab pres ambiente w abbiamo già considerato

Dettagli

Cosa è? Come lo si usa? Come iniziare? Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

Cosa è? Come lo si usa? Come iniziare? Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO) Cosa è? Come lo si usa? Come iniziare? Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO) 1^ parte Cosa è Arduino? Arduino è una piattaforma di sviluppo open-source basata su una semplice scheda

Dettagli

Il computer P R O F. L O R E N Z O P A R I S I

Il computer P R O F. L O R E N Z O P A R I S I Il computer P R O F. L O R E N Z O P A R I S I Un po di storia Le prime macchine per il calcolo automatico risalgono al 1940. Il calcolatore più potente di quel periodo era l ENIAC, in grado di svolgere

Dettagli