Crittografia Corso di Laurea Specialistica in Informatica Generatori di Numeri PseudoCasuali Alberto Leporati Dipartimento di Informatica, Sistemistica e Comunicazione Università degli Studi di Milano Bicocca e-mail: alberto.leporati@unimib.it leporati@disco.unimib.it
molti algoritmi crittografici necessitano di (tanti) bit casuali le sorgenti casuali (macroscopiche) sono rare in Natura Ø produrre bit casuali è costoso idea: si usa un generatore di numeri pseudocasuali (PRNG) dato un seme casuale, un PRNG produce una sequenza di bit che è indistinguibile da una sequenza di bit casuali Alberto Leporati Corso di Crittografia 2
indistinguibile significa che nessun algoritmo eseguibile in tempo polinomiale su una MdT probabilistica sa decidere se la sequenza emessa dal PRNG è casuale oppure calcolata Ø nozione di tipo computazionale la casualità sembra esistere veramente in Natura Ø non sarebbe una nozione di tipo computazionale Alberto Leporati Corso di Crittografia 3
definizione: un PRNG è un algoritmo, eseguibile in tempo polinomiale su una MdT deterministica, che calcola una funzione e tale che: G : {0,1} k Ø {0,1} l(k), con l(k) > k per ogni algoritmo D (distinguisher) œ PPT per ogni polinomio p( ) per tutti gli interi k sufficientemente grandi vale: ) Pr[ {0,1} ; ( ) : ( ) 1] Pr[ {0,1} : ( ) 1] k l ( k x r G x D r = r D r = < ) p 1 ( k Alberto Leporati Corso di Crittografia 4
osservazione: la distanza tra le due distribuzioni di probabilità corrisponde alla capacità di inganno di G i PRNG possono essere uniformi o non uniformi generatore congruenziale lineare: siano a, b ed m tre interi tali che 0 a, b < m dato un seme intero s, con 0 s < m, il sistema di equazioni: x x 0 i = = s ax i 1 + b mod m i 1 si chiama generatore congruenziale lineare Alberto Leporati Corso di Crittografia 5
proposto da Lehmer nel 1951 la scelta di a, b ed m è critica per non ottenere sequenze facili da prevedere viene usato spesso (ma non in Crittografia) non è un buon generatore: i numeri prodotti presentano relazioni lineari se Eve scopre quattro valori x 0, x 1, x 2, x 3 prodotti, risolvendo il sistema di equazioni: trova i valori di a, b, ed m x x x 1 2 3 ax ax ax 0 1 2 + + + b b b mod mod mod m m m Alberto Leporati Corso di Crittografia 6
problema: costruire una funzione G : {0,1} k Ø {0,1} l(k) che allunga l input, verificando i requisiti della definizione domanda: dobbiamo costruire una funzione diversa per ogni possibile funzione l(k)? Alberto Leporati Corso di Crittografia 7
risposta: no. A partire da un PRNG H : {0,1} k Ø {0,1} k+1 possiamo costruire qualunque PRNG G : {0,1} k Ø {0,1} l(k) come segue: G(x 0 ) x 1 σ 1 = H(x 0 ) x 2 σ 2 = H(x 1 ) x l(k) σ l(k) = H(x l(k)-1 ) output (σ 1, σ 2,, σ l(k) ) @ x i œ {0,1} k @σ i œ {0,1} @" i œ {1, 2,, l(k)} Alberto Leporati Corso di Crittografia 8
abbiamo quindi ridotto il problema di costruire G a quello di costruire H, che allunga l input di un solo bit ci basterà una funzione one-way definiamo il concetto di hard-core bit se f è una funzione (permutazione) one-way, è difficile da invertire: dato y, è difficile calcolare x tale che f(x) = y se x è difficile da calcolare, alcuni suoi bit saranno difficili da calcolare (se x œ {0,1} n, devono essere più di log 2 n, ad esempio n/4) Alberto Leporati Corso di Crittografia 9
i bit difficili da calcolare sono hard-core bit per f formalmente, un hard-core bit è l output di un predicato hard-core definizione: sia f : {0,1} n Ø {0,1} n una permutazione one-way, e B: {0,1} n Ø {0,1} un predicato calcolabile in tempo polinomiale su una MdT deterministica. B è un predicato hard-core per f se " algoritmo A œ PPT e " polinomio p( ) $ n A,p tale che: n n n A p Pr[ x {0,1} ; b A ( f ( x )) : b = B ( x )] +, 1 2 p 1 ( n ) Alberto Leporati Corso di Crittografia 10
utilizzando f e B possiamo costruire un PRNG G : {0,1} k Ø {0,1} k+1 come segue: G( x ) = f(x) B(x) k bit 1 bit k bit osservazione: l output di G è difficile da prevedere domanda: come facciamo a costruire predicati hard-core? caso speciale: se g è un generatore di p * e y = g z mod p, allora msb(z) è un predicato hard-core per l esponenziazione modulare [Blum e Micali] Alberto Leporati Corso di Crittografia 11
quindi, possiamo costruire un PRNG basato sull esponenziazione modulare come segue: G(z) = g z msb(z) in generale, possiamo procedere come segue definizione: siano x = (x 1, x 2,, x n ) e y = (y 1, y 2,, y n ) due sequenze di n bit. Il prodotto interno modulo 2 tra x e y, denotato con x, yú, è definito come segue: n n i i i= 1 i= 1 def x, y = x y mod 2 = ( x i y i ) Alberto Leporati Corso di Crittografia 12
teorema (Goldreich Levin): sia f(x) una permutazione one-way, e sia g(x, y) = f(x) y, con x = y = n. Allora la funzione: B(x, y) = def x, yú è un predicato hard-core per g osservazione: se f è una permutazione one-way, anche g lo è quindi, data (solo) la permutazione one-way f su {0,1} n, possiamo costruire un PRNG G : {0,1} 2n Ø {0,1} 2n+1 Alberto Leporati Corso di Crittografia 13
come segue: G(x, y) = g(x, y) B(x, y) = f(x) y x, yú domanda: quando abbiamo un algoritmo G che pensiamo essere un PRNG, come facciamo a dimostrarlo? idea: possiamo eseguire dei test sulla sequenza di bit prodotti da G, per vedere se ci sono relazioni statistiche tra di essi problema: i test (e le relazioni da testare) sono infiniti! questo significa che non possiamo dimostrare che G è uno PRNG? Alberto Leporati Corso di Crittografia 14
per fortuna, Yao ha dimostrato che esiste un test universale definizione: sia G : {0,1} k Ø {0,1} l(k). G è impredicibile se e solo se " i œ {1,2,, l(k)}, " polinomio p( ) e " algoritmo A œ PPT, $ k A,p tale che " k k A,p : Pr[ x {0,1} k ; ( σ 1,..., ˆ σ i σ l ( k ) ) A ( = σ G 1 ( x,..., ); σ i ) : = ˆ 1 σ i σ i ] 1 2 + p 1 ( k ) Alberto Leporati Corso di Crittografia 15
informalmente, G è impredicibile se il problema di indovinare l i-esimo bit della sequenza prodotto in output, dati i primi i-1 bit, è intrattabile con indovinare si intende significativamente meglio rispetto a lanciare una moneta non truccata teorema [Yao, 1985]: G è un PRNG se e solo se è impredicibile Alberto Leporati Corso di Crittografia 16
Cifratura ciclica proposta da Meyer e Matyas nel 1982 a partire da una master key (seme) si produce una sequenza di chiavi di sessione si usa un contatore avente periodo il valore del contatore viene usato come chiave (o come testo in chiaro) in un crittosistema simmetrico ogni volta che viene usato, il contatore viene incrementato Alberto Leporati Corso di Crittografia 17
Cifratura ciclica per rafforzare ulteriormente lo schema si può usare una sequenza di input più complicata contatore con periodo N C C+1 master key k m ENC x i = Ekm (C+1) Alberto Leporati Corso di Crittografia 18
Keystream nel modo OFB si può anche usare il modo di funzionamento OFB di un crittosistema simmetrico per generare un keystream, che poi si usa come l output di un PRNG z 0 z 1 E k z 2 E k m 1 m 2 c 1 c 2 Alberto Leporati Corso di Crittografia 19
ANSI X9.17 è uno dei PRNG crittografici migliori tra quelli noti viene usato in PGP utilizza 3DES come indicato in figura (vedere prossima slide) input: DT i : rappresentazione a 64 bit della data e dell ora attuali. Viene aggiornato ad ogni blocco pseudocasuale generato V i : seme da 64 bit chiavi: k 1, k 2 : da 64 bit ciascuna Vengono usate nei tre moduli di 3DES, in modalità EDE (encryption decryption encryption) Alberto Leporati Corso di Crittografia 20
ANSI X9.17 Alberto Leporati Corso di Crittografia 21
ANSI X9.17 output: R i : blocco pseudocasuale da 64 bit V i+1 : valore aggiornato del seme dalla figura si vede che: R i = EDEk1,k2 (V i EDE k1,k2 (DT i )) V i+1 = EDEk1,k2 (R i EDE k1,k2 (DT i )) riassumendo, il PRNG: usa una chiave da 112 bit vengono fatte nove cifrature/decifrature con DES si usano i valori pseudocasuali DT i e V i, che cambiano ad ogni valore prodotto Alberto Leporati Corso di Crittografia 22
ANSI X9.17 per quanto riguarda la sicurezza: la quantità di informazioni da compromettere è enorme anche se Eve riesce a trovare un R i, non riesce comunque a trovare i successivi Alberto Leporati Corso di Crittografia 23
Generatore di Blum, Blum e Shub (BBS) proposto nel 1986 siano p e q numeri primi (grandi) tali che: p ª q ª 3 mod 4 sia n = pÿ q si sceglie a caso s tale che MCD(s, n) = 1 (s non è multiplo né di p né di q) il generatore produce la sequenza di bit: B 1, B 2, con il seguente algoritmo Alberto Leporati Corso di Crittografia 24
Generatore di Blum, Blum e Shub (BBS) BBS(s) X 0 = s 2 mod n i = 1 while (true) do X i = (X i-1 ) 2 mod n B i = X i mod 2 @ B i = lsb(x i ) la sicurezza si basa sulla (congetturata) difficoltà di fattorizzare n Alberto Leporati Corso di Crittografia 25
Generatore di Blum, Blum e Shub (BBS) si dimostra che BBS supera il next-bit test ovvero, non esiste nessun algoritmo polinomiale che, dati i primi k bit della sequenza di output: B 1, B 2,, B k è in grado di indovinare il (k+1)-esimo (cioè B k+1 ) con probabilità > ½ Alberto Leporati Corso di Crittografia 26