Crittografia Corso di Laurea Specialistica in Informatica Primalità e Fattorizzazione Alberto Leporati Dipartimento di Informatica, Sistemistica e Comunicazione Università degli Studi di Milano Bicocca e-mail: alberto.leporati@unimib.it leporati@disco.unimib.it
Test di primalità per RSA, è necessario generare numeri primi molto grandi problema: testare se un numero intero n 2 è primo oppure composto, in tempo polinomiale rispetto a log 2 n esistono molti algoritmi: Solovay-Strassen, Miller-Rabin, (algoritmi probabilistici) AKS (del 2002) è un algoritmo deterministico Alberto Leporati Corso di Crittografia 2
Test di primalità un algoritmo probabilistico può sbagliare con probabilità p; tuttavia, se eseguiamo m prove indipendenti la probabilità di sbagliare diventa 1/p m quindi, si spara a caso un numero e si testa se è primo quanti tentativi dovremo fare in media? teorema dei numeri primi: un numero intero n compreso tra 1 ed ha probabilità 1/ln di essere primo Alberto Leporati Corso di Crittografia 3
Test di primalità esempio: un numero di 512 bit ha probabilità 1/ln2 512 @ 1/355 di essere primo Ø dopo circa 355 tentativi, si trova un numero primo osservazione: fattorizzare un intero sembra essere molto più difficile che determinare se è primo o composto Ø possiamo determinare che un numero è composto, senza conoscerne i fattori primi Alberto Leporati Corso di Crittografia 4
Test di primalità si conoscono molti criteri del tipo: se C(x) è vero, allora x è composto tuttavia, se C(x) è falso, x potrebbe essere sia primo che composto x primi C(x) = falso C(x) = vero la preimmagine di vero è un sottoinsieme proprio dei numeri composti Alberto Leporati Corso di Crittografia 5
Test di primalità si possono applicare più criteri in sequenza tuttavia, non si conosce un insieme di criteri che dia esattamente l insieme dei numeri composti pertanto, il meglio che possiamo fare è applicarli tutti, e considerare primo un numero che li rende tutti falsi Ø più criteri usiamo, più è bassa la probabilità di sbagliare Alberto Leporati Corso di Crittografia 6
Criterio di Eulero si basa sul teorema di Eulero (piccolo teorema di Fermat) sia m un intero dispari, e w un intero tale che MCD(w, m) = 1 se m è primo, allora w m-1 ª 1 mod m diciamo che w è un testimone per la primalità di m se m è composto, è poco probabile che la congruenza valga se vale, diciamo che m è uno pseudoprimo rispetto a w in tal caso, w è un falso testimone per la primalità di m Alberto Leporati Corso di Crittografia 7
Criterio di Eulero definiamo il criterio: C(x) = vero se e solo se w x-1 T 1 mod x per qualche w tale che MCD(w, x) = 1 teorema (Salomaa, pag. 138): tutti oppure al più metà degli interi w tali che 1 w < m e MCD(w, m) = 1 sono testimoni per la primalità di m possiamo allora agire come segue: dato m, scegliamo a caso w tale che 1 w < m Alberto Leporati Corso di Crittografia 8
Criterio di Eulero se MCD(w, m) > 1, allora m è composto se MCD(w, m) = 1, calcoliamo u = w m-1 mod m se u 1, allora m è composto, altrimenti w è un testimone per la primalità di m per il teorema, se abbiamo trovato k testimoni la probabilità che m sia composto è 1/2 k, a meno che tutti i w tali che 1 w < m e MCD(w, m) = 1 siano testimoni in tal caso, m può ancora essere composto numeri di Carmichael (però sono molto rari) Alberto Leporati Corso di Crittografia 9
Test di Solovay-Strassen è un altro test del tipo: se C(x) è vero, allora x è composto se C(x) è falso, la probabilità che x sia primo è < 1/2 a œ p * è un residuo quadratico modulo p se a T 0 mod p e la congruenza y 2 ª a mod p ammette soluzione se y è una soluzione, l unica altra soluzione è y mod p = p y se a T 0 mod p e la congruenza y 2 ª a mod p non ha soluzione, si dice che a è un non residuo quadratico modulo p Alberto Leporati Corso di Crittografia 10
Test di Solovay-Strassen determinare se a è un residuo quadratico modulo p può essere fatto in tempo polinomiale (rispetto a log 2 p) usando l algoritmo square-and-multiply, grazie al criterio di Eulero teorema (criterio di Eulero): sia p 2 primo. Un intero a è un residuo quadratico modulo p se e solo se: a (p-1)/2 ª 1 mod p Alberto Leporati Corso di Crittografia 11
Test di Solovay-Strassen sia p 2 primo, e a un intero. Il simbolo di Legendre (a/p) è definito come segue: a p = 0 1 1 se se se a a a 0 mod è un r.q. p mod è un non r.q. p mod p teorema (Stinson, pag. 175): sia p 2 primo. Allora: (a/p) = a (p-1)/2 mod p Alberto Leporati Corso di Crittografia 12
Test di Solovay-Strassen sia n un intero positivo dispari, la cui fattorizzazione è: n k = = i 1 p i e i sia a un intero. Il simbolo di Jacobi (a/n) è definito come segue: a n = k a i = 1 p i e i osservazione: se n è primo, (a/n) ª a (n-1)/2 mod n Alberto Leporati Corso di Crittografia 13
Test di Solovay-Strassen se n è composto, la congruenza può valere oppure no. Se vale, n è uno pseudo-primo di Eulero rispetto ad a se n è composto, allora può essere pseudoprimo rispetto al più metà degli a œ p * vale (a/n) = 0 se e solo se MCD(a, n) > 1 (quindi n è composto) Alberto Leporati Corso di Crittografia 14
Test di Solovay-Strassen Solovay-Strassen(n) if n mod 2 = 0 then return n è composto a R {1, 2,, n-1} x = (a/n) if x = 0 then return n è composto y = a (n-1)/2 mod n if x ª y mod n then return n è primo else return n è composto resta da calcolare (a/n) in modo efficiente Alberto Leporati Corso di Crittografia 15
Calcolo di (a/n) lo si può fare grazie alle seguenti regole: se m 1 ª m 2 mod n, allora (m 1 /n) = (m 2 /n) Ø ci si può sempre ridurre ad a < n 2 n = = 1 1 se se n n ± ± m 1 2 1 2 m n m n = n m n m n m n m se 1 3 m mod8 mod8 n altrimenti 3 mod 4 Alberto Leporati Corso di Crittografia 16
Calcolo di (a/n): esempio 7411 9283 = = = = = = = = = = = 5 117 117 5 2 5 1 9283 7411 1872 7411 2 7411 117 7411 7411 117 40 117 2 117 3 4 117 7411 5 117 per la per la per la per la proprietà per la per la per la per la proprietà per la proprietà per la proprietà proprietà 1 proprietà 3 proprietà proprietà 1 proprietà 3 proprietà 1 per la proprietà 4 2 4 2 4 2 basta applicare in sequenza le proprietà 4, 1, 3, 2 Alberto Leporati Corso di Crittografia 17
Test di Miller-Rabin è un altro test del tipo: se C(x) è vero, allora x è composto è più efficiente del test di Solovay- Strassen: se C(x) è falso, la probabilità che x sia primo è < ¼ per la correttezza dell algoritmo, si veda [Stinson, pag. 180] Alberto Leporati Corso di Crittografia 18
Test di Miller-Rabin Miller-Rabin(n) sia n-1 = 2 k m, con m dispari a R {1, 2,, n-1} b = a m mod n if b ª 1 mod n then return n è primo for i = 0 to k 1 do if b ª -1 mod n then return n è primo else b = b 2 mod n return n è composto Alberto Leporati Corso di Crittografia 19
Algoritmi di fattorizzazione come abbiamo visto, scomporre un intero n in fattori primi è considerato difficile facendo alcune ipotesi, esistono algoritmi che fattorizzano n senza provare a dividere per tutti i numeri compresi tra 1 e n algoritmo p-1 di Pollard algoritmo ρ di Pollard molti altri nel caso generale, tutti questi algoritmi hanno tempo di esecuzione esponenziale Alberto Leporati Corso di Crittografia 20
Algoritmo p-1 di Pollard pubblicato nel 1974 supponiamo che p n e p è primo inoltre, supponiamo che se q è la potenza di un primo che divide p-1, allora q B, dove B è un limite superiore prefissato Ø (p-1) B! per il piccolo teorema di Fermat, vale: 2 p-1 ª 1 mod p dato che (p-1) B!, allora: 2 B! ª 1 mod p da cui p (2 B! 1) allora p d = MCD(2 B! 1, n), e d sarà un divisore non banale di n, a meno che 2 B! 1 = 1 Alberto Leporati Corso di Crittografia 21
Algoritmo p-1 di Pollard Pollard p-1 (n, B) @ calcola a = 2B! mod n for j = 2 to B do a = a j mod n d = MCD(a-1, n) if 1 < d < n then return d else return fallimento tempo di esecuzione: O(Blog 2 B(log 2 n) 2 +(log 2 n) 3 ) Alberto Leporati Corso di Crittografia 22
Algoritmo p-1 di Pollard se B = O((log 2 n) i ), l algoritmo è polinomiale ma ha poche chance di successo n se B @, l algoritmo risponde correttamente, ma ha tempo di esecuzione esponenziale l algoritmo funziona bene solo se n è divisibile per un primo p tale che p-1 ha fattori piccoli in RSA, è facile evitare questo caso: basta scegliere p 1, q 1 grandi tali che p = 2p 1 + 1 e q = 2q 1 + 1 sono primi (strong primes), e porre n = pÿ q Alberto Leporati Corso di Crittografia 23
Algoritmo ρ di Pollard sia p il più piccolo divisore primo di n supponiamo di trovare x, x œ n tali che x x e x ª x mod p allora p MCD(x x, n) < n, e quindi otteniamo un divisore non banale di n calcolando MCD(x x, n) l algoritmo ρ di Pollard trova x e x definisce f(x) = x 2 + a, dove a è una costante piccola (es: a = 1) parte da x 1 œ n scelto a caso, e costruisce la sequenza x 1, x 2, x 3,, dove: x j = f(x j-1 ) mod n Alberto Leporati Corso di Crittografia 24
Algoritmo ρ di Pollard si tratterebbe di trovare x i x j, con i < j, tali che MCD(x i x j, n) > 1 si dimostra che se x i ª x j mod p allora f(x i ) ª f(x j ) mod p Ø "δ 0, x i+δ ª x j+δ mod p costruito un grafo i cui vertici sono in p, e i lati vanno da x i a x i+1, abbiamo una coda iniziale: x 1 Ø x 2 Ø Ø x i seguita da un ciclo: x i Ø x i+1 Ø Ø x j ª x i l algoritmo risulta più semplice se poniamo j = 2i Alberto Leporati Corso di Crittografia 25
Algoritmo ρ di Pollard Pollard Rho (n, x 1 ) x = x 1 x = f(x) mod n p = MCD(x x, n) while p = 1 do @ all i-esima iterazione, @ x = x i e x = x 2i x = f(x) mod n x = f(x ) mod n x = f(x ) mod n p = MCD(x x, n) if p = n then return fallimento else return p x 1 x i ª x j x 2 x i+1 x j-1 Alberto Leporati Corso di Crittografia 26
Algoritmo ρ di Pollard il numero medio di iterazioni richieste per trovare p è al più p dato che p < n, la complessità dell algoritmo è O(n 1/4 ) esempio: n = 15770708441, x 1 = 1, f(x) = x 2 + 1 Allora: x 422 = 2261992698 x 211 = 7149213937 MCD(x 422 x 211, n) = 135979 Alberto Leporati Corso di Crittografia 27
Algoritmi usati attualmente quadratic sieve (Carl Pomerance, fine anni 80) elliptic curve (Ariel Lenstra, metà anni 80): versione modificata dell algoritmo p-1 di Pollard, applicato sui punti di curve ellittiche number field sieve (A. Lenstra e H. Lenstra, 1990): è l algoritmo usato attualmente nel 2000, number field sieve è stato usato per fattorizzare un modulo di RSA di 155 cifre (= 512 bit), usando circa 300 computer in parallelo (su Internet) Alberto Leporati Corso di Crittografia 28
Algoritmi usati attualmente ( ) Quadratic sieve O e ( 1+ o (1)) ln n lnln n Elliptic curve O e ( ( ) 1 + o (1)) 2ln p lnln p Number field sieve O e ( ) ( 1.92+ o (1))(ln n ) (lnln n ) 1/ 3 2 / 3 Alberto Leporati Corso di Crittografia 29