460 likes | 1.15k Views
Numeri Primi. I numeri primi sono divisibili soltanto per 1 e se stessi Non possono essere espressi come prodotto di altri numeri Numeri primi sono un elemento centrale nella teoria dei numeri 1 è primo, ma generalmente non interessa La lista dei primi 44 numeri primi è:
E N D
Numeri Primi I numeri primi sono divisibili soltanto per 1 e se stessi Non possono essere espressi come prodotto di altri numeri Numeri primi sono un elemento centrale nella teoria dei numeri 1 è primo, ma generalmente non interessa La lista dei primi 44 numeri primi è: 2 3 5 7 17 19 23 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211
Definizioni e proprietà della teoria dei numeri • b divisore di a: • ba se a = m b con m intero • p numero primo: • se i suoi divisori sono solo 1 e p • • primi di Mersenne: • numeri primi della forma • fattorizzazione di n: • n = p1e1 p2e2 .. pkek con p1… pkprimi, ei interi0 • massimo comun divisore di a,b: • MCD(a,b) = k con k più grande divisore di a e di b • a, b coprimi (o relativamente primi): • MCD(a,b) = 1
Teorema di Fermat (piccolo) • Teorema (Fermat). • Se p è un numero primo e a<p , allora ap mod p=a oppure ap-1 mod p=1 , ap-1 1 (mod p) Questo risultato è utile per il calcolo degli inversi. L’inverso di a con a<p è un numero x tale che ax mod p =1 Dalle ultime due equazioni si ha ax mod p= ap-1 mod p → x = ap-2 mod p Nota: Il risultato precedente è vero solo per p primo e a<p.
Funzione toziente di Eulero f(n) (per n positivo) definito come il numero di interi positivi minori di n e coprimi a n p.e. 37è primo e così (37) = 36 In generale, per n primo f (n) = n -1 35 Bisogna selezionare tutti gli interi positivi minori di 35 e che sono coprimi ad esso 1, 2, 3, 4, 6, 8, 9, 11, 12, 13, 16, 17, 18, 19, 22, 23, 24, 26, 27, 29, 31, 32, 33, 34 Questi sono 24, sicché (35) = 24 f(n) è sempre pari per n < 3 Per convenzione (0) = 1
Funzione toziente di Eulero Per calcolare f(n) bisogna contare il numero di elementi da escludere In generale serve la fattorizzazione in primi, ma Per p (p P) f(p) = p-1 Per p, q (p, q coprimi) f(pq) = f(p)f(q) = (p-1)(q-1) La funzione toziente è moltiplicativa p.e. f(37) = 36 f(21) = f(3>7) = (3-1)(7-1) = 12
Teorema di Eulero Se a appartiene a Zn allora: a j(n) = 1 mod n equivalentemente: n divide ( aj(n) - 1) In particolare se p è primo e p non divide a allora: p divide (ap-1 - 1) Il caso particolare di p primo, cioè ap-1 = 1 mod p viene detto Piccolo Teorema di Fermat, perché venne scoperto da Fermat (1601-1665), che però non lo dimostrò. La dimostrazione venne data da Eulero (1707-1783). Per esempio: n = 15, j (n) = 8, a = 11, 118 - 1 = 214358880 = 15 ´ 14290592
Controllo di primalità In criptografia si ha spesso bisogno di generare grandi (e random) numeri primi Serve quindi un test di primalità Due tipi di test di primalità: deterministici e probabilistici Un test deterministico determina con sicurezza la primalità Diversi test deterministici: Crivello di Eratostene, test di Lucas-Lehmer, test di curva ellittica, etc Il metodo più naturale è quello di generare un numero casuale n di dimensione appropriata, e provare se è primo
Test di primalità Crivello basato sul tentativo esaustivo di divisione Tenta di dividere il numero candidato (dispari) per tutti i numeri (primi) minori della sua radice quadrata Possibile usarlo soltanto per numeri piccoli Anche gli altri controlli deterministici sono molto lenti Alternativa è l’uso dei test di primalità statistici I test statistici solo raramente possono identificare un numero composto come primo (per quanto non viceversa) Un numero composto siffatto è chiamato numero pseudoprimo
Il crivello di Eratostene Metodo per individuare tutti i numeri primi minori o uguali ad un certo N. Si costruisce una tavola dei numeri naturali compresi tra 2 ed N, si eliminano in successine tutti i multipli di 2, di 3, di 5 e così via fino a quando non si trova un numero il cui quadrato è maggiore di N. La tavola contiene a questo punto solo numeri primi 7.7 = 49 > 30 N = 30 • 2 3 4 5 6 7 8 9 10 11 12 13 • 15 16 17 18 19 20 21 22 23 24 25 • 26 27 28 29 30 p(30) = 10
Test di primalità 1.Test deterministici: se n non lo supera è composto, se lo supera è primo 2.Test probabilistici: se n fallisce il test è composto; se lo supera è probabilmente primo Efficace test di primalità probabilistico, detto test ARCL di Adleman, Rumely, Cohen e Lenstra (con tale test su computer veloci si può verificare la primalità di un numero di 100 cifre in pochi secondi). Applica il teorema di Fermat
Test di primalità I test deterministici sono computazionalmente più onerosi dei test probabilistici (algoritmi non polinomiali). 2002: algoritmo polinomiale (Indian Institute of Technology) I test probabilistici sono polinomiali, ma devono essere poi ripetuti più e più volte per far tendere a 1 la probabilità di avere realmente individuato un primo. Per esempio nel test di Miller-Rabin dopo t iterazioni superate positivamente la probabilità che n non sia primo è più piccola di 2-2t.
Considerazioni sul Teorema di Fermat Il teorema di Fermat afferma che se n è primo, per ogni a<n tale che gcd(a,n)=1 si ha: an-1=1 mod n • N.B.: Il test di Fermat permette di stabilire con certezza che un numero è composto, ma non può provare che esso sia primo • Inoltre, il test di Fermat prova che un numero è composto, ma non fornisce la sua scomposizione in fattori primi Ne segue che l’inverso del piccolo teorema di Fermat, invece, non è vero, anche se in passato qualcuno ne ha fatto un criterio per stabilire se un numero è primo.
Numeri di Carmichael Un numero di Carmichael è un intero positivo che soddisfa la congruenza an-1=1 mod n Per tutti gli interi a che sono coprimi con n I numeri di Carmichael sono anche detti pseudoprimi di Fermat assoluti
Test di Miller-Rabin Test di Solovay-Strassen Numeri pseudo-primi Fermat: Dato n 1. si sceglie a caso un intero a, con 1 <a <n 2. si calcola an-1 mod n: 2.1 se il risultato è diverso da 1, allora n è composto; 2.2 se il risultato vale 1, n è pseudo-primo in base a Fermat, Eulero, Dirichlet, ecc.
2j (ar) mod n -1 2s an-1 mod n = (ar) mod n Test di Miller e Rabin: principi n (il numero da sottoporre al test) deve essere dispari. Si pone n-1 = r·2s (con r dispari, s 1) Si sceglie a casoun intero a e si calcola: n è sicuramente composto se ar mod n 1 e se, per ogni j, 0 j s-1, [2] pag.138 [9] pag.236
probabilmente primo SI = 1? =-1? NO j=1 SI j=s-1? NO z = z2 mod n j=j+1 NO Test di Miller e Rabin z = ar mod n SI NO SI certamente composto n-1? 1?
risolve sistemi di congruenze del tipo: x a1 mod m1 x a2 mod m2 x ar mod mr il teorema (CRT) afferma che la soluzione è unica a meno di multipli di M = m1m2 mr, ed è uguale a: dove Mi = M/mi e yi = Mi-1 mod mi, per 1 i r Teorema Cinese del Resto (CRT) con MCD(mi, mj) = 1 i j
Esponenziazione modulare • primo esempio di funzione che sembra essere one-way: l’esponenziazione modulare • sia p un numero primo • consideriamo il campo p, e in particolare il suo gruppo moltiplicativo p* = {1,2,…,p-1} • si dimostra che p* è un gruppo ciclico g p* tale che p* = {g0, g1,…, gp-2} • l’esponenziazione modulare è la funzione f : p* definita come segue: f(z) = gzmod p
Esponenziazione modulare f(z) = gz mod p f(z) = (gg … g) mod p z volte f(z) = [(g mod p)(g mod p) … (g mod p)] mod p z volte Possono essere utilizzati algoritmi più efficienti del precedente per l’esponenziazione modulare
x b 1 2 3 4 5 6 7 8 9 10 1 1 1 1 1 1 1 1 1 1 1 2 2 4 8 5 10 9 7 3 6 1 3 3 9 5 4 1 3 9 5 4 1 4 4 5 9 3 1 4 5 9 3 1 5 5 3 4 9 1 5 3 4 9 1 6 6 3 7 9 10 5 8 4 2 1 7 7 5 2 3 10 4 6 9 8 1 8 8 9 6 4 10 3 2 5 7 1 9 9 4 3 5 1 9 4 3 5 1 10 10 1 10 1 10 1 10 1 10 1 Esponenziazione: esempio per p=11 Le righe 2,6,7,8 sono i generatori di p=11 colonna 10 p-1 Le colonne p-1,(p-1)2, 2, p-2 evidenziano proprietà notevoli gz mod 11 g,z Z*11
Th: a è un generatore di Z*n se e solo se aF(n)/q 1 per ogni q divisore primo di F(n) Generatori modulo p Per ogni primo p, esiste un g < p, detto generatore modulo p o radice primitiva di p, le cui potenze g1 mod p , g2 mod p , … gp-1 mod p forniscono tutti gli interi compresi tra 1 e p-1 Mod[2^{1,2,3,4,5,6,7,8,9,10},11] {2,4,8,5,10,9,7,3,6,1} Es: 2 è uno dei generatori di 11 i generatori di p sono F(p-1); F(10) = 2×5 = 10×(1-1/2)×(1-1/5) = (2-1)×(5-1) = 4
i g 1 2 3 4 5 6 7 8 9 10 2 2 4 8 5 10 9 7 3 6 1 6 6 3 7 9 10 5 8 4 2 1 7 7 5 2 3 10 4 6 9 8 1 8 8 9 6 4 10 3 2 5 7 1 Generatori mod p gi mod 11 I generatori di p = 11 sono 2, 6, 7,8 In colonna i = 5 si ha p-1=10 In colonna i = 2 manca 1(per ogni b1 e p-1 b2 mod p 1)
Esponenziazione modulare Altro esempio: • 5* = {1,2,3,4} è il gruppo moltiplicativo contenuto nel campo 5 = {0,1,2,3,4} • 2 è un generatore di 5*; infatti: 5* = {20,21,22,23} = {1,2,4,3} • possiamo definire la seguente esponenziazione modulare: f(z) = 2zmod 5 • ogni esponenziazione modulare produce una permutazione (one-way) degli elementi di p*
Esponenziazione modulare • dato x, possiamo calcolare gxmod p in tempo polinomiale • possiamo supporre che 0 x p-2 • la dimensione dell’input è il numero di bit necessari per rappresentare gli elementi di p*, quindi n = log2 p La rappresentazione in base 2 di x è: x = xn-1 2n-1 + bn-2 2n-2 + ……….+ b1 21 + b0 20
Esponenziazione modulare • primo tentativo: ModExp(p, g, x) risultato = 1 while x > 0 do risultato = risultato * g mod p x = x – 1 return risultato • in pratica, nella variabile risultato calcola: g0, g1, g2, …, gx (sempre mod n) • problema: fa un numero di iterazioni pari a x 2n (esponenziale rispetto a n)
Esponenziazione modulare • soluzione corretta: poiché vale: allora ci basta calcolare i valori g2j, per j {0,1,…,n-1}, e moltiplicare tra loro solo quelli per cui xj=1 • il tutto può essere fatto in tempo polinomiale (rispetto a n) tramite il cosiddetto algoritmo “square-and-multiply”
Esponenziazione modulare • algoritmo “square-and-multiply”: ModExp(p, g, x) ris = 1 for j = n-1 downto 0 do ris = (ris * ris) mod p if xj = 1 then ris = (ris * g) mod p return ris • esempio: 87 mod 11 p = 11, g = 8, x = 7, n = 4 osservazione: 87 = 2097152
Esponenziazione modulare • esecuzione dell’algoritmo: nella prima colonna, il valore di ris all’inizio della j-esima iterazione • nelle ultime due colonne, non è stata fatta la riduzione modulo p
Complessità 1 - Riducendo in modulo il risultato di ogni moltiplicazione si riesce ad operare sempre e solo su numeri di Z*p 2 – Non separando il calcolo dei gi da quello dei (gi)bi si ottengono tempi di esecuzione più brevi O( log2 p ) moltiplicazioni Moltiplicazione e divisione: O((log p)2) operazioni su bit Esponenziazione: O((log p)3) operazioni binarie. Robustezza e tempo d’esecuzione Modulo: da 1024 bit a 2048 bit Tempo: da 1 a 8
Z*p y x = logg y difficile Esponenziazione e logaritmo discreto p grande y = gx mod p facile x
Logaritmo discreto • Sia G un gruppo e g un generatore di G. Si consideri • l’equazione y=gx • il più piccolo intero x che soddisfa l’equazione è il • logaritmo discreto di y in base g • (log discreto è l’inverso di esponenziazione) • Il logaritmo discreto è considerato un problema • computazionalmente difficile • • x →gx è facile (computazionalmente veloce). • • gx→x si crede sia difficile (non possibile in tempo • polinomiale, potrebbe essere un esempio di one way • function.
i g 1 2 3 4 5 6 7 8 9 10 2 2 4 8 5 10 9 7 3 6 1 6 6 3 7 9 10 5 8 4 2 1 7 7 5 2 3 10 4 6 9 8 1 8 8 9 6 4 10 3 2 5 7 1 g = 2 x = 8 g = 6 x = 2 g = 7 x = 4 g = 8 x = 6 Logaritmo discreto “ Dati un primo p, un generatore g ed un qualunque intero y Z*p, esiste un unico intero x , 1 x p-1, tale che gx mod p = y. y = 3
Algoritmi per il logaritmo discreto Ricerca esauriente polinomiale nel valore del dato y p-1, esponenziale nel numero di bit n = log2 p: T = O(exp (n)). Baby-stepGiant-step T = O(exp (n 1/2)) Index Calculus(sub-esponenziale) T =O(exp ((n)1/2 (ln(n)1/2)) Numberfieldsieve (sub-esponenziale) T =O(exp ((n)1/3 (ln(n)2/3))
IC NFS
i=1, z=y r q=0 0 g0 mod p 1 g1 mod p 2 g2 mod p . . . m-1 gm-1 mod p z = y×c i=i+1 = z ? NO SI fine SI NO = y ? fine Passi del bambino, passi del gigante gx y (mod p) Approfondimenti: [3] pag.130 m = sqrt(p) x = q.m + r gqm+r y gr y.g-qm gr y.((g-m)q gr y.cq