Campo finito GF(p) Algebra astratta Campo Anello Gruppo ciclico Gruppo abeliano Gruppo finito Insieme finito Operazione •× Ø chiusa Ø associativa Ø con el. identità Ø con el. inverso Operazione + Ø chiusa Ø associativa Ø con el. identità Ø con el. inverso Ø Commutativa Ø generatore g∈I, g.g=a, g.g.g=b, g.g.g.g=c .. a≠b ≠c .. ∈I Ø distributiva GF(p): elementi, operazioni e proprietà Campo finito →Campo di Galois: GF(pn) con p primo e n intero n = 1: GF(p) a,b ∈ Zp Zp = {0, 1, …, p-1} & aritmetica modulare Addizione: (a+b) mod p Moltiplicazione: (a × b) mod p O(log p) operazioni su bit O((log p)2) operazioni su bit Proprietà notevole dell’Aritmetica modulare Sia m primo o composto e siano a,b interi qualsiasi , allora (a+b) mod m = ((a mod m) + (b mod m)) mod m (a×b) mod m = ((a mod m) × (b mod m)) mod m GF(11): elementi p = 11 Z11: {0,1,2,3,4,5,6,7,8,9,10} Z*11: {1,2,3,4,5,6,7,8,9,10} (insieme dei coprimi con 11) Φ(11) = p-1 = 10 GF(11): addizione y chiusura associativa commutativa elemento identità inverso additivo x 0 1 2 3 4 5 6 7 8 9 10 0 0 1 2 3 4 5 6 7 8 9 10 1 1 2 3 4 5 6 7 8 9 10 0 2 2 3 4 5 6 7 8 9 10 0 1 3 3 4 5 6 7 8 9 10 0 1 2 4 4 5 6 7 8 9 10 0 1 2 3 5 5 6 7 8 9 10 0 1 2 3 4 6 6 7 8 9 10 0 1 2 3 4 5 7 7 8 9 10 0 1 2 3 4 5 6 8 8 9 10 0 1 2 3 4 5 6 7 9 9 10 0 1 2 3 4 5 6 7 8 10 10 0 1 2 3 4 5 6 7 8 9 (x + y) mod 11 (3+1)+2 = 3+(1+2) Tutti i risultati appartengono a Z11 (chiusura) Ogni riga e ogni colonna contiene una permutazione di Z11 Scambiando gli addendi si ottiene lo stesso risultato (commutativa) La somma di un elemento con 0 fornisce l’elemento stesso (identità) In ogni riga e in ogni colonna l’elemento 0 è presente una volta sola GF(11): moltiplicazione y chiusura associativa commutativa elemento identità reciproco distributiva x 0 1 2 3 4 5 6 7 8 9 10 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 2 3 4 5 6 7 8 9 10 2 0 2 4 6 8 10 1 3 5 7 9 3 0 3 6 9 1 4 7 10 2 5 8 4 0 4 8 1 5 9 2 6 10 3 7 5 0 5 10 4 9 3 8 2 7 1 6 6 0 6 1 7 2 8 3 9 4 10 5 7 0 7 3 10 6 2 9 5 1 8 4 8 0 8 5 2 10 7 4 1 9 6 3 9 0 9 7 5 3 1 10 8 6 4 2 10 0 10 9 8 7 6 5 4 3 2 1 (x × y) mod 11 Ogni riga della tabella (ad esclusione di a=0) è una permutazione di Z11 L’elemento identità è 1 L’inverso moltiplicativo di ogni a diverso da 0 è il valore b che fornisce a per bbmod11=1; tale valore È presente una volta sola in ogni riga (ad esclusione di a=0) ed in ohni colonna (ad esclusione di b=0) Esponenziazione Esponenziazione modulare a = be mod m a = (b×b× … ×b) mod m e volte a = [(b mod m)×(b mod m)× … ×(b mod m)] mod m e volte b,e ∈ Zm Caso peggiore e=m-1 m moltiplicazioni → 2log m moltiplicazioni O(exp(log m)) !! Algoritmi più efficienti GF(11): esponenziazione e 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 be mod 11 b,e ∈ Z*11 Piccolo teorema di Fermat T4 (piccolo teorema di Fermat): per ogni primo p e per ogni x di Z*p si ha x p-1 mod p = 1 , cioè xp-1 ≡ 1 (mod p) e 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 Corollari T4.1: Per ogni x ∈ Z*p, se s ≡ r (mod p-1), allora xs ≡ xr (mod p). xp ≡ xp mod(p-1) (mod p) ≡ x (mod p) 14 ≡ 4 (mod 10) e e b 1 2 3 4 5 6 7 8 9 10 b 11 12 13 14 15 16 17 18 19 20 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 4 8 5 10 9 7 3 6 21 2 4 8 5 10 9 7 3 6 1 3 3 9 5 4 1 3 9 5 4 31 3 9 5 4 1 3 9 5 4 1 4 4 5 9 3 1 4 5 9 3 41 4 5 9 3 1 4 5 9 3 1 5 5 3 4 9 1 5 3 4 9 51 5 3 4 9 1 5 3 4 9 1 6 6 3 7 9 10 5 8 4 2 61 6 3 7 9 10 5 8 4 2 1 7 7 5 2 3 10 4 6 9 8 71 7 5 2 3 10 4 6 9 8 1 8 8 9 6 4 10 3 2 5 7 81 8 9 6 4 10 3 2 5 7 1 9 9 4 3 5 1 9 4 3 5 91 9 4 3 5 1 9 4 3 5 1 10 10 1 10 1 10 1 10 1 10 1 10 10 1 10 1 10 1 10 1 10 1 Quando si calcola un’esponenziazione modulare è inutilmente oneroso impiegare esponenti maggiori di p-1 e basi maggiori di p-1 Corollari T4.2: x(p-1)/2 mod p è uguale a 1 o a -1. e 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 Calcolo del reciproco T5: “l’inverso moltiplicativo di x in GF(p) è x-1 = xp-2 mod p (infatti x xp-2 mod p = 1) e 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 N.B. il modo più semplice di calcolare l’inverso moltiplicativo è l’algoritmo esteso di Euclide (lo vedremo più avanti) Proprietà dell’esponenziazione mod n T12 (estensione di Eulero del piccolo teorema di Fermat): “per ogni intero n, primo o composto, e per ogni x ∈ Z*n si ha xΦ(n) ≡ 1 (mod n)” N.B. x coprimo con n n = 3 × 5 = 15 Φ(15) = 8 Z*15 = {1,2,4,7,8,11,13,14} x 01 02 03 04 05 06 07 08 09 10 11 12 13 14 x8 mod 15 01 01 06 01 10 06 01 01 06 10 01 06 01 01 T13 (corollario di T12): “per ogni n = p × q, con p e q primi, e per ogni x > 0 si ha xΦ(n)+1 ≡ x (mod n) e anche, per ogni intero k, x k Φ(n)+1 ≡ x (mod n) ” pB=9733;qB=10177; phiB=99032832;! r=Random[Integer,10^8]! 70920080! PowerMod[r,(pB-1)(qB-1)+1,pB*qB]! 70920080 Giustificazione di RSA Da T13 discende che per n = p.q e per ogni 0 < m < n si ha: m k Φ(n)+1 ≡ m k (p-1)(q-1) +1 (mod n) = m In RSA deve essere: m e d ≡ m (mod n) ≡ m Ciò è vero se e d = k(p-1)(q-1)+1 o anche e d - k(p-1)(q-1) = 1 e quindi • MCD (e, Φ(n)) = 1 • d = e-1 mod Φ(n) proprietà vere per costruzione T14 (Teorema cinese dei resti): “Se gli interi n1,n2,..,nk sono a due a due coprimi, allora il sistema di congruenze x ≡ a1 (mod n1), x ≡ a2 (mod n2), …, x ≡ ak (mod nk) ha un’unica soluzione modulo n = n1 × n2 × …. × nk ”. Conseguenze (nel caso n1 = p, n2 = q con p,q primi): • Ogni intero x < n = pq ha un’unica rappresentazione modulare v(x) = (v1 ,v2) = (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 con CRT 1. Rappresentazione modulare di c : v(c) = (c mod p, c mod q) 2. Calcolo della rappresentazione modulare di cd mod n: vd(c) = ((c mod p) d mod p, (c mod q) d mod q) N.B: numeri di dimensione più piccola (½ log n) 3. Ripristino della rappresentazione usuale di m: m = cd mod n = {a×[(c mod p) d mod p] + b×[(c mod q) d mod q]} mod n Per T14 a, b devono soddisfare le congruenze a ≡ 1 (mod p) b ≡ 0 (mod p) a ≡ 0 (mod q) b ≡ 1 (mod q) Circa quattro volte più veloce Ancora più efficiente se n è il prodotto di più di due primi (PKCS#1)