Aritmetica modulare con modulo composto Moltiplicazione mod n Per ogni n, Z* n e la moltiplicazione modulare costituiscono un gruppo moltiplicativo. chiusura, commutativa, associativa reciproco n = =. Φ()=. = Z* :,,,,,,,
Esponenziazione mod n Se r s (mod Φ(n)), allora a r a s (mod n) per ogni a m = =. Φ()=. = Per minimizzare il tempo di calcolo in RSA gli esponenti di cifratura e di decifrazione devono essere Φ(n) Teorema di Eulero Per ogni intero n, primo o composto, e per ogni x Z* n x Φ(n) (mod n) m = =. Φ()=. = Z* :,,,,,,, si ha
Corollario Per ogni n = p.q, con p e q primi, e per ogni x Z n (x > ) si ha x Φ(n)+ x (mod n) e x kφ(n)+ x (mod n) con k intero Se m = p.q e MCD(x,Φ(m))=, per ogni y Z m y x mod n genera una permutazione di Z n Corollario m = =. Φ()= Z* :,,, Per la decifrabilità di RSA ad ogni testo cifrato c deve corrispondere un solo testo in chiaro m. Ciò è vero se e solo se e Z* Φ(n)
exp n = Φ() = Giustificazione di RSA C: per ogni < m < n si ha: m kφ(n)+ m k(p-)(q-) + (mod n) = m In RSA deve essere: c d mod n = (m e ) d mod n = m m ed m (mod n) Ciò è vero se ed = k(p-)(q-)+ o anche ed - k(p-)(q-) = e quindi MCD (e, Φ(n)) = ed mod Φ(n) = d = e - mod Φ(n) Teorema di Bézout siano a,b interi; allora esistono due interi x,y tali che MCD(a,b) = ax+by proprietà vere per costruzione
MCD(a,b) Sia a Z n. Condizione necessaria e sufficiente per l esistenza di a - (l inverso moltiplicativo di a) è MCD(n,a) = Proprietà del MCD(a,b) Esiste ed è unico Sia a b. Se k a e k b allora k a mod b Segue MCD(a,b) = MCD(b,a mod b) Algoritmo di Euclide e calcolo di e MCD(a,b) a, b interi positivi; a b > Finché b > poni r = a mod b poni a = b poni b = r Restituisci a O((ln n) ) Passo a b r MCD(Φ(n),e) = ; <e<φ(n) NO PRNG x<φ(n) Euclide =? SI Φ(n) Probabilità [MCD(x, Φ(n)) =] = Φ(Φ(n)) / Φ(n) e
La scelta di e N.B. Se il numero binario e contiene pochi uni il calcolo di m e è più efficiente: e deve essere dispari e > minimo numero di uni = e = e = + e = + Se si fissa e, occorre poi scegliere p e q in modo che sia MCD(Φ(n),e) n e n e Il calcolo di d: algoritmo esteso di Euclide MCD(a,b) = c = x a + y b a, b interi positivi; a b > Poni x =, x =, y =, y = Finché b > calcola q = a/b, r = a q.b calcola x = x -q.x, y = y -q.y poni a= b, b= r, x = x, x = x, y = y, y = y Restituisci c = a; x = x ; y = y O((ln n) ) d = e - mod Φ(n) d e + k Φ(n) = b=e Euclide esteso d = y a=φ(n) Passo a b x x y y q r x y - - - - - - - - -
Efficienza di RSA x < n x e mod n e con solo due uni x d mod n CRT (Sun Tsu ~ d.c) Teorema cinese del resto: Se gli interi n,n,..,n k sono a due a due coprimi, allora il sistema di congruenze x a (mod n ), x a (mod n ),, x a k (mod n k ) ha un unica soluzione modulo n = n n. n k. Conseguenze (nel caso n = p, n = q con p,q primi): x v (mod p), x v (mod q), Ogni intero x < n = p.q ha un unica rappresentazione modulare v(x) = (v,v ) = (x mod p, x mod q) Somme e moltiplicazioni modulari possono essere fatte vantaggiosamente sulla rappresentazione modulare degli operandi Esistono algoritmi facili (Gauss, Garner) per ripristinare la rappresentazione originaria dell intero
Decifrazione di RSA con CRT. Rappresentazione modulare di c : v(c) = (c mod p, c mod q). Calcolo della rappresentazione modulare di c d mod n: v(c d ) = ((c mod p) d mod p, (c mod q) d mod q) N.B: numeri di dimensione più piccola (½ log n). Ripristino della rappresentazione usuale di m (Gauss): m = c d mod n = {a [(c mod p) d mod p] + b [(c mod q) d mod q]} mod n Per T a, b devono soddisfare le congruenze a (mod p) b (mod p) a (mod q) b (mod q) Circa quattro volte più veloce Ancora più efficiente se n è il prodotto di più di due primi (PKCS#v) Esempio Sia p =, q =, n =, e =, d =, m = c = m mod = v() = ( mod, mod ) = (,) (c mod p) d mod p = mod = (c mod q) d mod q = mod = a =, b = (mod ) (mod ) (mod ) (mod ) m = c d mod n = {a [(c mod p) d mod p] + b [(c mod q) d mod q]} mod n m = ( + ) mod = mod = (c mod p) d mod p- mod p = mod mod =
Algoritmo e Formula di Garner y < n = p.q v(y) = (y mod p, y mod q) = (v, v ) : C = p - mod q : y = v + u p Esempio: p=, q= v =, v = : C = ; infatti mod = : u = (-) mod = : m = + = : u = ((v v) C) mod q Decifrazione di RSA con Garner Per rendere i calcoli efficienti, in Java la chiave privata è formata da componenti: n, il modulo dell esponenziazione p, il primo fattore di n q, il secondo fattore di n C = p - mod q, la costante chiamata in causa dall algoritmo d= d mod (p-), l esponente più piccolo per il calcolo della prima coordinata (v. T.) d= d mod (q-), l esponente più piccolo per il calcolo della seconda coordinata La decifrazione di un testo cifrato c richiede dunque i seguenti calcoli: v = c d mod p v = c d mod q u = ((v v) C) mod q m = v + u p
Attacchi a RSA Con la chiave pubblica: fattorizzazione log n > d = e - mod Φ(n) Con testo cifrato: Radice e-esima log n > e_ m = c mod n Cycling attack: log n > ((((c e ) e ) e..) e ) e = c, (((c e ) e ) e..) e = m Attacchi a RSA Con testo in chiaro scelto: Blocchi uguali Message unconcealed: m e = m randomizzazione Con testo cifrato scelto: proprietà moltiplicativa di RSA m = m m c = m e mod n = ((m e mod n) (m e mod n))mod n c* = c r e, m = r - m = c* d mod n m = m m
Attacchi a RSA Side-channel attack: Timing attack: T della exp = k n di uni in e c* = c r e, m = r - m = c* d mod n m = m m The RSA Algorithm () λ(n) = mcm(p-, q-) = Φ(n)/MCD(p-, q-) Public key: {n,e} n = p.q con p e q primi e coprimo con λ(n) Private key: {n,d} d = e - mod λ(n) n = p. q. p. q