• Corso di Sicurezza su reti • 11-04-2012 Number Theory Barbara Masucci Dipartimento di Informatica ed Applicazioni Università di Salerno [email protected] http://www.dia.unisa.it/professori/masucci Teoria dei numeri Concetti preliminari per RSA Aritmetica modulare Algoritmo di Euclide per il calcolo del gcd Calcolo dell’inversa moltiplicativa mod n Elevazione a potenza modulare Generazione di numeri primi e test di primalità Teorema della divisione Dati a є Z, n є N esiste un’unica coppia (q,r) con 0 ≤r≤ n-1 tale che a=q·n+r r è indicato con a mod n a=11, n=7, 11=1·7+4 r=11 mod 7=4 a=-11, n=7,-11=(-2) ·7+3 r=-11 mod 7=3 • 1 • Corso di Sicurezza su reti • 11-04-2012 Congruenze mod n a e b sono congruenti mod n (a b mod n) se a mod n = b mod n 73 4 mod 23 73 mod 23 = 4 mod 23 21 -9 mod 10 21 mod 10 = -9 mod 10 Se a b mod n allora n|(b-a) Se a b mod n allora b a mod n L’insieme Zn Addizione modulo n (a mod n) + (b mod n) = (a+b) mod n Proprietà Commutativa Associativa Distributiva Identità Esistenza inversa additiva (l’inversa additiva di x è y tale che x+y 0 mod n) (Zn, +) gruppo additivo mod n • 2 • Corso di Sicurezza su reti • 11-04-2012 Massimo Comune Divisore (gcd) d è il massimo comune divisore di a e n se d è un divisore di a e n ogni divisore di a e n è un divisore di d d=a·x+n·y Proprietà gcd(a, n)=gcd(a, -n)=gcd(-a, -n)=gcd(|a|, |n|) gcd(a, 0)=|a| se gcd(a, n)=1, a e n sono relativamente primi L’insieme Zn* Zn* = { [a]n, 0<a≤ n-1 e gcd(a,n)=1} Esempio: Z4*={ [1]4, [3]4} [1]4={…, -11, -7, -3, 1, 5, 9, 13, …} [3]4={…, -9, -5, -1, 3, 7, 11, 15, …} Esempio: Z8*={ [1]8, [3]8, [5]8, [7]8} [1]8={…, -23, -15, -7, 1, 9, 17, 25, …} [3]8={…, -21, -13, -5, 3, 11, 19, 30, …} Moltiplicazione modulo n (a mod n) · (b mod n) = (a · b) mod n Proprietà Commutativa Associativa Distributiva Identità Esistenza inversa moltiplicativa L’inversa moltiplicativa di x è y tale che x·y 1 mod n) (Zn *, ·) gruppo moltiplicativo mod n • 3 • Corso di Sicurezza su reti • 11-04-2012 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 0 1 2 3 4 5 6 7 0 0 0 0 0 0 0 0 0 1 1 2 3 4 5 6 7 0 1 0 1 2 3 4 5 6 7 2 2 3 4 5 6 7 0 1 2 0 2 4 6 0 2 4 6 3 3 4 5 6 7 0 1 2 3 0 3 6 1 4 7 2 5 4 4 5 6 7 0 1 2 3 4 0 4 0 4 0 4 0 4 5 5 6 7 0 1 2 3 4 5 0 5 2 7 4 1 6 3 6 6 7 0 1 2 3 4 5 6 0 6 4 2 0 6 4 2 7 7 0 1 2 3 4 5 6 7 0 7 6 5 4 3 2 1 Addizione Moltiplicazione Non tutti gli interi in Z8 hanno inversa moltiplicativa, ma quelli in Z8*={ [1]8, [3]8, [5]8, [7]8} ce l’hanno Algoritmo di Euclide Descritto negli Elementi di Euclide (circa 300 A. C.) Euclide (a,n) if n = 0 then return a else return Euclide (n, a mod n) Algoritmo di Euclide: Esempi Euclide (30, 21) = Euclide (21, 9) = Euclide (9, 3) = Euclide (3, 0) = 3 Euclide (4864, 3458) = Euclide (3458, 1406) = Euclide (1406, 646) = Euclide (646, 114) = Euclide (114, 76) = Euclide (76, 38) = Euclide (38, 0) = 38 • 4 • Corso di Sicurezza su reti • 11-04-2012 Algoritmo di Euclide: complessità Assumiamo a > n ≥ 0 Se a<n, Euclide (a,n) chiama Euclide (n,a) e procede Se a=n, Euclide (a,n) termina subito perché a mod n=0 Al massimo log n chiamate Analisi complessa basata sui numeri di Fibonacci Per ogni chiamata O( (log a)2 ) operazioni su bit Totale: al massimo O( (log a)3 ) operazioni su bit Euclide (a,n) richiede al massimo O( (log a)2 ) operazioni su bit Polinomiale nella lunghezza dell’input Algoritmo di Euclide Esteso Oltre a computare d=gcd(a,n) computa anche due interi x, y tali che d = gcd(a,n) = a·x+n·y Stesso running time asintotico di Euclide (a,n) Algoritmo di Euclide Esteso • 5 • Corso di Sicurezza su reti • 11-04-2012 Soluzione di ax≡b (mod n) Dati a, b, n calcolare x 0 1 2 3 4 5 6 7 Esempi: 3x≡7 (mod 8) soluzione 5 2x≡4 (mod 8) soluzione 2,6 0 0 0 0 0 0 0 0 0 1 0 1 2 3 4 5 6 7 2 0 2 4 6 0 2 4 6 3 0 3 6 1 4 7 2 5 4 0 4 0 4 0 4 0 4 4x≡2 (mod 8) nessuna soluzione 5 0 5 2 7 4 1 6 3 6 0 6 4 2 0 6 4 2 7 0 7 6 5 4 3 2 1 Soluzione di ax≡b (mod n) Ha soluzioni se e solo se g|b Se g|b ci sono esattamente g distinte soluzioni mod n: per i = 0,1,…, g-1 dove g = a·x′+n·y (da Euclide-esteso (a,n) ) Soluzione di ax≡1 (mod n) • 6 • Corso di Sicurezza su reti • 11-04-2012 Soluzione di ax≡1 (mod 8) 0 1 2 3 4 5 6 7 0 0 0 0 0 0 0 0 0 1 0 1 2 3 4 5 6 7 2 0 2 4 6 0 2 4 6 3 0 3 6 1 4 7 2 5 4 0 4 0 4 0 4 0 4 5 0 5 2 7 4 1 6 3 6 0 6 4 2 0 6 4 2 7 0 7 6 5 4 3 2 1 Soluzione di ax≡1 (mod 7) 0 1 2 3 4 5 6 0 0 0 0 0 0 0 0 1 0 1 2 3 4 5 6 2 0 2 4 6 1 3 5 3 0 3 6 2 5 1 4 4 0 4 1 5 2 6 3 5 0 5 3 1 6 4 2 6 0 6 5 4 3 2 1 Esempio: calcolo di 5-1 mod 7 d = x·a + y·n 1 = -2·7 + 3·5 3 = 5-1 mod 7 a 7 n 5 d 1 x y -2 3 5 2 1 1 -2 2 1 1 0 1 1 0 1 1 0 • 7 • Corso di Sicurezza su reti • 11-04-2012 Esempio: calcolo di 5-1 mod 11 a 11 d = x·a + y·n 1 = 1·11 + (-2)·5 -2 = 5-1 mod 11 -2 = 9 mod 11 n 5 d 1 x y 1 -2 5 1 1 0 1 1 0 1 1 0 9 = 5-1 mod 11 Teorema cinese del resto Dati m1, m2,…,mt interi positivi tali che gcd(mi,mj)=1, i≠j M= m1·m2 …·mt a1, a2,…,at interi Esiste una sola soluzione modulo M al sistema di congruenze x≡a1 mod m1 x≡a2 mod m2 … x≡at mod mt Mi = M/mi yi = Mi-1 mod mi Teorema cinese del resto Esempio x≡2 mod 5 x≡3 mod 13 a1=2, m1=5, M1=13, y1=13-1 mod 5=2 a2=3, m2=13, M2=5, y2=5-1 mod 13= 8 M=65 Soluzione del sistema: • 8 • Corso di Sicurezza su reti • 11-04-2012 Elevazione a potenza modulare Calcolo di xy mod z Metodo naive Metodo left-to-right Metodo right-to-left Elevazione a potenza modulare Metodo naive Calcolo di xy mod z Elevazione a potenza modulare Metodo naive Calcolo di xy mod z • 9 • Corso di Sicurezza su reti • 11-04-2012 Elevazione a potenza modulare Metodo left-to-right Calcolo di xy mod z Idea: y = y020+ y121 +… +yt2t y = y0+2(y1+ 2(y2+… +2(yt-1+2yt))))) Elevazione a potenza modulare Metodo left-to-right xy = xy0+2(y1+2(y2+…+2(yt-1+2yt))))) = xy0x2(y1+2(y2+…+2(yt-1+2yt))))) = xy0(xy1+2(y2+…+2(yt-1+2yt))))))2 = xy0(xy1(xy2+…+2(yt-1+2yt))))))2)2 = xy0 (xy1( … (xyt-1(xyt)2)2… )2 Elevazione a potenza modulare Metodo left-to-right Calcolo di xy mod z Idea: y = y020+ y121 +… +yt2t y = y0+2(y1+… +2(yt-1+2yt))))) y yt-1 xy = x 0 (… (x y (x t)2)2… )2 • 10 • Corso di Sicurezza su reti • 11-04-2012 Elevazione a potenza modulare Metodo left-to-right Calcolo di xy mod z Idea: y = y020+ y121 +… +yt2t y = y0+2(y1+… +2(yt-1+2yt))))) y yt-1 xy = x 0 (… (x y (x t)2)2… )2 Potenza_Modulare (x, y, z) a←1 for i = t downto 0 do a ← (a · a) mod z if yi = 1 then a ← (a · x) mod z return a Elevazione a potenza modulare Metodo left-to-right Potenza_Modulare (x, y, z) a←1 for i = t downto 0 do a ← (a · a) mod z if yi = 1 then a ← (a · x) mod z return a Elevazione a potenza modulare Metodo right-to-left • 11 • Corso di Sicurezza su reti • 11-04-2012 Elevazione a potenza modulare Metodo right-to-left Elevazione a potenza modulare Metodo right-to-left Elevazione a potenza modulare Metodo right-to-left • 12 • Corso di Sicurezza su reti • 11-04-2012 Elevazione a potenza modulare Metodo right-to-left Potenza_Modulare (x, y, z) if y = 0 then return 1 X ← x; P ← 1 if y0 = 1 then P ← x for i = 1 to t do X ← X ·X mod z if yi=1 then P ← P ·X mod z return P Numeri primi Un intero p > 1 è un numero primo se e solo se i suoi unici divisori sono 1 e sé stesso Esempi: 2, 3, 5, 7, 11, 13, 17, 19,... Teorema fondamentale dell’aritmetica Ogni intero composto n > 1 può essere scritto in modo unico come prodotto di potenze di primi n = p1e1 p2e2... pkek pi primo, ei intero positivo Funzione di Eulero Zn* = { [a]n, 0<a≤ n-1 e gcd(a,n)=1} φ(n) = cardinalità di Zn* (funzione di Eulero) φ(p) = p-1 se p primo φ(pq) = (p-1)(q-1) φ(n) = se p,q primi se n = p1e1 p2e2... pkek, pi primo, ei ≥ 0 • 13 • Corso di Sicurezza su reti • 11-04-2012 Teorema di Eulero Per ogni a ∈ Zn*, aφ(n) = 1 mod n Esempi: a=3, n=10, φ(10)=4 34=81=1 mod 10 a=2, n=11, φ(11)=10 210=1024=1 mod 11 Teorema di Fermat Se p è primo, per ogni a ∈ Zp*, ap-1 = 1 mod p Se p è primo, per ogni a ∈ Z ap = a mod p Esempi: a=7, p=19 718 = 1 mod 19 a=10, p=5 105 = 10 mod 5 = 0 mod 5 Generazione di un primo ‘grande’ 1. Genera a caso un dispari p di grandezza appropriata 2. Testa se p è primo 3. Se p è composto, go to 1. • 14 • Corso di Sicurezza su reti • 11-04-2012 Generazione di un primo ‘grande’ 1. Genera a caso un dispari p di grandezza appropriata 2. Testa se p è primo 3. Se p è composto, go to 1. Come testare se un numero p è primo? Che probabilità abbiamo che p sia primo? Distribuzione dei numeri primi π(x) = numero di primi in [2,x] Teorema dei numeri primi: π(x) è circa x/ln x Esempio: π(1010) = 455.052.511 1010/ln 1010 ≈ 434.294.481,9 (4% in meno) Scelta di un primo di 512 bit Scelto un intero in [2,2512] la probabilità che sia primo è circa 1 su ln 2512 (ln 2512 ≈ 354,89) Numero medio di tentativi ≈ 354,89 Se si scelgono solo dispari, numero medio di tentativi ≈ 177,44 Se si scelgono dispari in [2511,2512] la probabilità è • 15 • Corso di Sicurezza su reti • 11-04-2012 Scelta di un primo di 1024 bit Scelto un intero in [2,21024] la probabilità che sia primo è circa 1 su ln 21024 (ln 21024 ≈ 709,78) Numero medio di tentativi ≈ 709,78 Se si scelgono solo dispari, numero medio di tentativi ≈ 354,89 Se si scelgono dispari in [21023,21024] probabilità Test di Primalità Due tipi di test: Probabilistici Deterministici Test di primalità probabilistici Il test può sbagliare numero composto viene dichiarato primo probabilità di errore ≤ 1/2 Ripetendo il test indipendentemente t volte, probabilità di errore ≤ (1/2)t • 16 • Corso di Sicurezza su reti • 11-04-2012 Test di primalità probabilistici Insieme di witness W(p) dato a∈[1, p-1] è facile verificare se a∈W(p) se p è primo allora W(p) è vuoto se p è composto allora |W(p)| ≥ p/2 Test di primalità probabilistici Test di Solovay-Strassen Pubblicato nel 1977 Probabilità di errore ≤ (1/2)t Test di Miller-Rabin Il più usato in pratica Il più veloce Probabilità di errore ≤ (1/4)t Test di Miller-Rabin Sia p il numero da testare p-1=2kq, con q dispari e k>0 Scegli a∈[1, p-1] e calcola aq, a2q, …,a2 (quadrati ripetuti) k q Se p è primo, a2 q = 1 mod p (teorema di Fermat) j Sia j il più piccolo indice per cui a2 q = 1 mod p k Se j=0, allora aq = 1 mod p j-1 j-1 Se j>0, allora (a2 q -1)(a2 q +1) mod p =0 p divide uno dei due fattori p non può dividere il primo, altrimenti j non è il più j piccolo valore per cui a2 q = 1 mod p j-1 p divide il secondo fattore, da cui a2 q = -1 mod p • 17 • Corso di Sicurezza su reti • 11-04-2012 Test di Miller-Rabin k Data la sequenza aq, a2q, …,a2 q, se p è primo una delle due condizioni è vera: aq =1 mod p j-1 = -1 mod p per qualche j ∈[1, k] Altrimenti p è composto a2 q Test di Miller-Rabin Test MR(p) calcola k>0 e q dispari: p-1=2kq scegli a caso a∈[1, p-1] if aq=1 mod p, then return “primo” for j=0 to k-1 do j if a2 q = -1 mod p, then return “primo” return “composto” Test di Miller-Rabin Insieme di witness di Miller-Rabin WMR(p) = {a : aq ≠ 1 mod p and j a2 q ≠ -1 mod p per ogni j∈[0,k-1]} Se p è un primo dispari WMR(p) è vuoto Se p è un numero composto dispari | WMR(p) | ≥ (3/4) ·φ(p) • 18 • Corso di Sicurezza su reti • 11-04-2012 Test di Miller-Rabin p=29 Witness di Miller-Rabin WMR(29) = {a : a7 ≠ 1 mod 29 and j a2 ·7 ≠ -1 mod 29 per ogni j∈[0,1]} a=10 107 mod 29=17 (continua) (107)2 mod 29=28=-1 mod 29 (stop: “primo”) a=2 27 mod 29=12 (continua) (27)2 mod 29=28= -1 mod 29 (stop: “primo”) Prova per tutti gli a ∈[1,28]: sempre output “primo” Test di Miller-Rabin p=221 Witness di Miller-Rabin WMR(221) = {a : a55 ≠ 1 mod 221 and j a2 ·55 ≠ -1 mod 221 per ogni j∈[0,1]} a=5 555 mod 221=112 (continua) (555)2 mod 221=168 (valori terminati, stop: “composto”) a=21 2155 mod 221=220= -1 mod 221 (stop: “primo”) Per ogni a ∈ {1,…,220}/ WMR(221), output: “primo” a=1, 21, 47, 174, 200, 220 Test di primalità deterministici Fino al 2002, non erano noti test deterministici efficienti Nel 2002, primo test deterministico polinomiale proposto da Agrawal, Kayal e Saxena Miller-Rabin ancora usato perché più efficiente • 19 • Corso di Sicurezza su reti • 11-04-2012 Cryptography and Network Security by W. Stallings (2005) cap. 4 (Finite Fields) cap. 8 (Introduction to Number Theory) Introduction to Algorithms by Cormen, Leiserson, Rivest (I ed) cap 31 (Number Theory) • 20