Prof. D.Evangelisti - Dal messaggio a sequenze di numeri Dal messaggio a sequenze di numeri Le classi resto modulo n := Zn Due numeri interi a, b, si dicono congrui modulo n (con n intero >1) se divisi per n hanno lo stesso resto: a=bmodn ↔ a= kn+b ↔ a-b = kn con k ε Z Esempio: n = 6 gli interi si possono così suddividere Classi resto [0] [1] [2] [3] [4] [5] ….-12 -6 0 6 12 18……. …….-5, 1, 7, 13,…… -10, -4, 2, 8,…… …..-9, -3, 3, 9,15…… …-8. -2, 4, 10, 16…… …..-7, -1,-5, 11, 17,…. Si definisce Z6 = {[0],[1], [2], [3], [4], [5], In generale Zn = {[0],[1].....[n − 1] } } classi resto modulo 6 Le operazioni in Zn La somma [a] + [b] = [c] dove c≡ (a+b)mod n la classe [0] è l’elemento neutro rispetto alla somma data la classe [a] la classe [n-a ] è l’opposto la somma gode della proprietà associativa, commutativa, esiste l’elemento neutro e l’opposto di ogni elemento Tabella della somma in Z6 + 0 1 2 3 4 5 0 0 1 2 3 4 5 1 1 2 3 4 5 0 2 2 3 4 5 0 1 3 3 4 5 0 1 2 4 4 5 0 1 2 3 Il paradosso!!! [3] + [3] = [0] Il prodotto in Zn [a] * [b] = [c] dove c≡ (a*b)modn Pag. 1/10 5 5 0 1 2 3 4 Prof. D.Evangelisti - Dal messaggio a sequenze di numeri La tabella del prodotto In Z6 * 0 1 2 3 4 5 0 0 0 0 0 0 0 1 0 1 2 3 4 5 2 0 2 4 0 2 4 3 0 3 0 3 0 3 4 0 4 2 0 4 2 5 0 5 4 3 2 1 [2] * [3] = [0] non vale la legge dell’annullamento del prodotto!!! Esiste l’inverso di ogni elemento ≠ [0] ?? oltre alla classe [1] ? Nooo !!! solo [5] ha l’inverso ed è [5] La tabella del prodotto in Z5 * 0 1 2 3 4 0 0 0 0 0 0 1 0 1 2 3 4 2 0 2 4 1 3 3 0 3 1 4 2 4 0 4 3 2 1 Esiste l’inverso di ogni elemento ≠ [0] ?? ( escluso [1] che ha sempre come inverso [1]…) Siiii !!! [2] è l’inverso di [3] [4] è l’inverso di [4] Teorema 1.1 Un elemento [a] di Zn ha l’inverso se e solo se a è primo con n cioè se il massimo comun divisore fra a ed n (MCD(a;n)) è uguale ad 1 Conseguenza importante: Se n è un numero primo allora ogni elemento di Zn ≠ [0] ammette l’inverso Proprietà del prodotto in Zn: Il prodotto gode della proprietà commutativa; associativa, esiste l’elemento neutro, l’inverso di ogni elemento esiste se e solo se solo se n è primo, nel caso che n non sia primo un elemento a di Zn è invertibile se e solo se a è relativamente primo, con n inoltre vale la proprietà distributiva del prodotto rispetto la somma. Pag. 2/10 Prof. D.Evangelisti - Dal messaggio a sequenze di numeri Una prima applicazione dell’aritmetica modulare nella crittografia Alice e Bianconiglio vogliono accordarsi su un numero (chiave) per decodificare i loro messaggi senza che Cat, il gatto ficcanaso, ne venga a conoscenza. La loro strategia consiste nel mettersi pubblicamente d’accordo su 2 numeri per esempio 5 e 13 e di spedirsi il risultato di 5xmod 13 ed anche Cat ne è a conoscenza… Alice sceglie come suo numero segreto x =6, calcola 56= 15625 ≡ 12 mod13 e lo spedisce a Bianconiglio Bianconiglio sceglie come suo numero segreto x= 3 , calcola 53= 125 ≡ 8 mod13 Cat vede sia 12 che 8.. sa che è il risultato di 5xmod13 ma non conosce né l’esponente x usato da Alice né quello usato da Bianconiglio… Alice prende il numero 8 spedito da Bianconiglio e calcola 86= 262164 ≡ 12 mod13 Bianconiglio prende il numero12 spedito da Alice e calcola 123= 1728 ≡ 12 mod13 Come e possibile??? Alice ha calcolato (53)6mod 13 e Bianconiglio ha calcolato (56)3mod 13 ed ovviamente hanno ottenuto lo stesso risultato Alice e Bianconiglio si sono accordati sulla comune chiave crittografica 12 senza essersela direttamente comunicata e soprattutto…… facendo rimanere Cat con un palmo di naso!!!! La fattorizzazione di un numero con il metodo di Euclide Proposizione: Siano a1 e a2 numeri interi positivi con a1> a2 >1 e sia a3 il resto della divisione di. a1 per a2 allora MCD(a1, a2) = MCD(a2, a3) Mediante questa proposizione si può implementare un procedimento detto l’algoritmo di Euclide che consente di determina il massimo comun divisore fra due interi con un costo computazionale relativamente basso Esempio: determinare il massimo comun divisore fra a1 = 1547 e a2 = 560 Applicazione dell’algoritmo di Euclide 1547 : 560 = 2 con resto a3 = 427; 560 : 427 = 1 con resto a4 = 133; 427 : 133 = 3 con resto a5 = 28; 133 : 28 = 4 con resto a6 = 21; 28 : 21 = 1 con resto a7 = 7; 21 : 7 = 3 con resto a8 = 0 Resti delle divisioni 427 = 1547 - 2 · 560 133 = 560 - 1 · 427 28 = 427 - 3 · 133 21 = 133 - 4 · 28, 7 = 28 - 1 · 21 Quindi il MCD(1547; 560) = 7 Una conseguenza importante dell’algoritmo di Euclide è che è possibile scrivere il massimo comun divisore di. a1 e a2 come somma di multipli (positivi e negativi) di a1 e a2 cioè a1 X+ a2 y = d ( d := MCD(a1, a2) ) Pag. 3/10 Prof. D.Evangelisti - Dal messaggio a sequenze di numeri Nell’esempio precedente abbiamo calcolato il massimo comun divisore fra a1 = 1547 e a2 = 560 ed abbiamo visto che è uguale a 7, esprimiamolo ora come somma di multipli di 1547 e 560 utilizzando i risultati della seconda colonna della tabella precedente MCD(1547; 560) = 7 = 28 - 1 · 21 = 28 - 1 · (133 - 4 · 28) = -133 + 5 · 28 = -133 + 5 · (427 - 3 · 133) = 5 · 427 - 16 · 133 = 5 · 427 - 16 · (560 - 1 · 427) = -16 · 560 + 21 · 427 = -16 · 560 + 21 · (1547 - 2 · 560) = 21 · 1547 - 58 · 560, e dunque MCD (1547; 560) = 7 = 21 · 1547 - 58 · 560. NB se a1 e a2 sono relativamente primi a1 X+ a2 y =1 (*) Mediante questa uguaglianza possiamo facilmente determinare l’inverso di un numero a in Zn se a ed n sono relativamente primi Esempio: determiniamo l’inverso di 35 in Z323 cioè quel numero a’ tale che 35*a’≡ 1 mod 323 ↔ 35*a’= 323*y +1 ↔ 35*a’ + 323*(-y ) = 1 ma questa è l’ uguaglianza (*) in quanto MCD(35, 323) =1 ; quindi preso y = 13 si determina a’ = 120 inverso di 35 in Z323 infatti 120*35 = 4200 = 13* 323 +1 ≡ 1 mod 323 Le potenze modulo n Proposizione Se n è un numero primo allora (x+y)n ≡ xn+yn mod n Esempio (x+y)3= x3+3x2y+3xy2+y3≡ x3+ y3mod3 perché 3x2y≡ 0modn e 3xy2 ≡ 0modn Ma non solo……… Piccolo Teorema di Fermat Se n è un numero primo allora per ogni intero a an≡ a modn Esempio numerico : in Z7 (3+5) = 8 ≡ 1 mod 7 (3+5)7= 2097152 ≡ 1 mod 7 perché 2095152 = 7*299593 +1 37+57= 2187+78125 = 80312 ≡ 1 mod 7 perché 80312 =11473*7 +1 ed inoltre (x+y)3 ≡ x3+ y3mod3 ≡ x+ y mod3 Corollario 1 Se n è un numero primo allora per ogni intero a tale che MCD (a,n) =1 ( a non multiplo di n.. cioè [a] ≠ [0] ) an-1≡ 1 modn Esempio Z5 = { [0],[1], [2], [3], [4], } ; ( n-1) =4 14 ≡ 1 mod 5; 24=16 ≡ 1 mod 5; 34 = 81≡ 1 mod 5; 4 4 = 216 ≡ 1 mod 5; Pag. 4/10 Prof. D.Evangelisti - Dal messaggio a sequenze di numeri A cosa serve questo corollario???? • A calcolare potenze … con il minimo sforzo… Esempio Quanto è 154066 mod 17??? 154064 +2 = (1516)254 152 ≡ 1*152 mod 17 = 4 mod 17 • A determinare l’inverso in Zn di qualunque numero a primo con n infatti a’ è an-2 : aa’=a an-2 = an-1≡1 mod n E se n non è primo????? TRANQUILLI !!!! C’ha pensato Eulero…. Teorema di Eulero Se a è relativamente primo con n allora aφ(n) ≡ 1 modn Dove φ = φ(n) è una funzione φ: N→ N che associa ad ogni n di N un numero che si può determinare se si conosce la fattorizzazione di n Anche in questo caso , se si conosce φ(n) , si può determinare l’inverso in Zn per ogni intero a tale che MCD (a,n) =1 ; infatti a’= aφ(n)-1 : aa’= a aφ(n)-1= aφ(n) ≡1 mod n Il calcolo della funzione di Eulero per numeri molto grandi però ha la stessa complessità computazionale della fattorizzazione Ai fini di questa trattazione serve sapere che • Se n è primo φ(n) = n-1 • Se n è il prodotto di due fattori primi p e q allora φ(n) = (p-1)(q-1) Un algoritmo per calcolare potenze modulo n : il metodo dei quadrati ripetuti Le funzioni invertibili da Zn in Zn Data una funzione f: Zn → Zn la funzione inversa f-1 ( se esiste) è la funzione che ad ogni y = f(x) di Zn (codominio) associa x = f -1(y) = f -1( f(x)) Una funzione è invertibile se e solo se è iniettiva e suriettiva cioè biunivoca; Nel caso di insiemi finiti Zn una funzione di Zn in sé è invertibile se è iniettiva Per costruire codici servono funzioni invertibili da Zn in sé Le funzioni lineari Data f (x) : = ax +b, l’inversa è f -1(y) = a -1 ( y-b) esiste se e solo se a e invertibile in Zn cioè MCD (a,n) =1 Pag. 5/10 Prof. D.Evangelisti - Dal messaggio a sequenze di numeri Esempio: f(x) := 3x +1 f: Z7 → Z7 x y y x 0 1 1 4 2 0 3 3 4 6 5 2 f -1(y) : = 5( y-1) (3-1≡ 5 mod 7 perché 5*3 ≡ 1 mod 7) 0 2 2 5 1 0 3 3 4 1 5 6 6 5 6 4 Però … però le funzioni lineari non possono essere utilizzate come chiavi in un codice a chiave pubblica perché abbiamo visto che un procedimento basato sull’algoritmo di Euclide permette di determinare l’inverso di un numero in Zn con costi computazionali non troppo elevati…. a portata di crackers !!!! Le funzioni f(x): = xa Esempi introduttivi: Esempio 1 Sia f : Z7 → Z7 t.c. f(x): = x 3 Z7 0 1 2 3 4 5 6 f(x): = x 3 0 1 8 = 7+1 27 = 3*7 +6 64 = 9*7 +1 125 = 17*7 +6 216 =30*7 + 6 In Z7 0 1 1 6 1 6 6 La funzione f(x): = x 3 da Z7 in Z7 non è iniettiva… quindi non invertibile!!! NB la funzione f(x): = x 3 da R in R è iniettiva e suriettiva e quindi invertibile!!!! f -1(y) : = 3 y Esempio 2 Sia f : Z7 → Z7 t.c. f(x): = x 5 Z7 0 1 2 3 4 5 6 f(x): = x 5 0 1 32 = 4*7+4 243 = 34*7 +5 1024 = 146*7 +2 3125 = 446*7 +3 7776= 1110*7 + 6 La funzione f(x): = x 5 da Z7 in Z7 quindi invertibile!!! In Z7 0 1 4 5 2 3 6 è iniettiva … Pag. 6/10 Prof. D.Evangelisti - Dal messaggio a sequenze di numeri Tabella di f -1(y) =x y f -1(y) =x 0 0 1 1 2 4 3 5 4 2 5 3 6 6 Perché f(x): = x 3 non è invertibile e f(x): = x 5 è invertibile come funzioni da Z7 in Z7???? Corollario 2 (del piccolo di teorema di Fermat) Se n è un numero primo ed a un intero t.c. MCD( a, n-1) = 1 allora la funzione f(x): = xa è invertibile in Zn e la sua inversa è f -1(y) := y a’ dove a’ è un intero positivo t.c. a*a’ ≡ 1 mod (n-1); Esaminiamo ora, alla luce del corollario 2, le funzioni degli esempi precedenti n = 7 ; ( n-1) = 6 Esempio 1 f(x): = x 3 ; MCD ( a=3, 6) ≠ 1 non esiste l’inverso di 3 in Z6; la funzione f(x): = x 3 non è invertibile in Z7 Esempio 2 f(x): = x 5 è invertibile in Z7 MCD ( a=5, 6) =1 ; 5 ammette inverso in Z6; la funzione f(x): = x 5 L’inverso di 5 in Z6 è 5 infatti 5*5 = 25 = 6*3 +1 ≡ 1 mod 6; Tabella di composizione di f -1o f(x) dove f(x): = x 5 e f -1(y) = y 5 Da Z7 0 1 2 3 4 5 6 In Z7 con f(x): = x 5 0 1 4 5 2 3 6 Da Z7 0 1 4 5 2 3 6 f -1(y) = y 5 0 1 1024 = 146*7 +2 3125 = 446*7 +3 32 = 4*7+4 243 = 34*7 +5 7776= 1110*7 + 6 In Z7 0 1 2 3 4 5 6 f -1o f(x) = I; I := funzione identità da Z7 in Z7 Un cracker che si rispetti, data la chiave pubblica (n , a) non è in grado di determinare l’inverso a’ di a in Z(n-1) ???? e quindi decrittare i messaggi critati con la funzione f(x): = xa mediante la funzione f -1(y) := y a’…. Ma i matematici ne sanno una più del diavolo… Proposizione 1 Se n è il prodotto di due numeri primi distinti p,q ed a è un numero intero primo con (p-1)(q-1) allora la funzione f(x): = xa è invertibile in Zn e la sua inversa è f 1 (y) := y a’ dove a’ è un intero positivo tale che . a*a’ ≡ 1 mod (p-1)(q-1) ; Allora ….. è fatta!!!! Pag. 7/10 Prof. D.Evangelisti - Dal messaggio a sequenze di numeri Il codice a chiave pubblica RSA Il codice RSA utilizza come chiavi pubbliche funzioni del tipo f(x): = xa da Zn in Zn e tutto il mondo conosce la chiave pubblica (n,a) dove • n è il prodotto di primi distinti p e q ( scelti molto.. ma molto grandi!!!!) • a è primo con (p-1)(q-1) • a≤n Per decrittare il messaggio occorre conoscere f -1(y) := y a’ dove a’ è l’ inverso di a in Z(p-1)(q1) Il nostro cracker non conosce i fattori p,q …. certo potrebbe calcolarli fattorizzando n … ma questa è un’operazione con costi computazionali enormi…. a tutt’oggi ai limiti del possibile soprattutto se n è il prodotto di 2 soli fattori primi molto grandi… Un esempio di codice RSA Alice vuole ricevere messaggi da Bianconiglio senza che il terribile Cat ficchi il naso… Sceglie 2 numeri primi “ grandi” p= 13 e q = 19 • calcola p*q = 247 • calcola φ(247) = (p-1)(q-1) = 12*18 = 216 • sceglie a = 7 ( primo con 216) • calcola la sua chiave segreta mediante la relazione a*a’ + (-y) 216 = 1 cioè 216 y + 1 intero.. è fortunata !!! con y=1 a’ = 31 a' = a • finalmente rende noti i due numeri (247; 7) Sta per arrivare la regina.. Bianconiglio vuole avvertire Alice … le scrive 90 (la paura!!!) prende la chiave pubblica di Alice ( 247, 7 ) e calcola 907≡ mod 247 per rendere più semplice il calcolo (non ha un computer Bianconiglio…solo una semplice calcolatrice..) ) scrive 907 = ( 902 90)2 90 e ad ogni passaggio riduce il numero ottenuto mod 247 902 = 8100 = 32*247 +196 ≡ 196mod 247 196*90 = 17640 = 71*247 +103 ≡ 103mod 247 (103)2 = 10609 = 42*247 + 235 ≡ 235mod 247 235*90 = 21150 = 85* 247 +155 ≡ 155mod 247 Alice riceve da Bianconiglio 155 per decrittare il messaggio Alice prende la sua chiave privata a’ = 31 e calcola 15531 Uffa che calcolo!!!! Ma anche Alice, che è una bimba molto intelligente, usa il metodo di Bianconiglio , scrive la potenza 15531= (((1552*155)2*155)2*155)2*155 e calcola Pag. 8/10 Prof. D.Evangelisti - Dal messaggio a sequenze di numeri (155)2 = 24025 = 97*247 +66 ≡ 66 mod 247 66*155 = 10230 = 41*247 + 103 ≡ 103 mod 247 (103)2 = 10609 = 42*247 +235 ≡ 235 mod 247 235 *155 = 36425 = 147*247 + 116 ≡ 116 mod 247 (116)2 = 13456 = 54 * 247 +118 ≡ 118 mod 247 118* 155 = 18290 = 74*247 +12 ≡ 12 mod 247 (12)2 = 144 ≡ 144 mod 247 144*155 = 22320 = 90*247 + 90 ≡ 90 mod 247 Alice riceve 90 .. aiuto!!! Se la dà a gambe levate… poi .. ma questa è un’altra storia… Cosa è successo in questo wonderfull world??? Bianconiglio ha scritto (90)7≡ 155 mod 247 Alice ha calcolato ((90)7)31 = 90217 = 90216 +1 = 90216 90 ≡ 90 mod 247 perché 90216 = 90 φ(247) ed essendo 90 relativamente primo con 247 per il teorema di Eulero 90 φ(247) ≡ 1 mod 247. Se la base della potenza ( il messaggio unitario) non è un numero primo con n (n= 247 nell’esempio) la proposizione 1 garantisce comunque il risultato finale, purchè siano verificate le sue ipotesi. Mentre scappa Alice, che una bimba molto intelligente..riflette : “ci sarà un algoritmo per calcolare le potenze mod n???)… Ma certo!!! Il metodo dei quadrati ripetuti Alice pensa come avrebbe potuto calcolare 15531 ed ha questa brillante idea : L’esponente 31 in base 2 è scritto : 31= ( 1111)2 cioè 31 = 1+ 1*2 +1*22+ 1*23+ 1*24 da cui 155 31 = 155 1 + 1* 2 + 1* 2 2 + 1* 2 3 + 1* 2 4 = (155 )( 155 2 ) 1 (155 22 ) 1 (155 esegue ora dei prodotti successivi riducendoli passo passo modulo 247 155 1552 = 2425 = 97 . 247 + 66 ≡ 66 mod 247 155 . 66 = 10230 = 41 . 247 + 103 ≡ 103 mod 247 2 (155 2 ) = (66) 2 = 4356 =17 ⋅ 247 + 157 ≡ 157 mod 247 103 ⋅157 = 16171 = 65 ⋅ 247 + 116 ≡ 116 mod 247 3 3 (155 2 ) = (157) 2 = 24649 = 99 ⋅ 247 + (155 2 ) ≡ mod 247 196 ⋅116 = 22736 = 92 ⋅ 247 + 12 4 (155 2 ) = (196 2 ) = 38416 = 155 ⋅ 247 + 131 ≡ 131mod 247 131 ⋅12 = 1572 = 6 ⋅ 247 + 90 ≡ 90 mod 247 Semplice no??? Pag. 9/10 23 ) 1 (155 2 4 )1 Prof. D.Evangelisti - Dal messaggio a sequenze di numeri La sicurezza del codice RSA Il codice RSA è virtualmente inattaccabile per un fatto molto semplice: la fattorizzazione di un numero intero nel prodotto di fattori primi richiede un tempo molto grande quando questo numero è abbastanza grande, quindi anche se si sa che il numero n è il prodotto di due soli numeri primi ( grandi) p e q trovarli risulta praticamente impossibile. e di conseguenza risulta impossibile trovare la chiave segreta. Diamo un’occhiata a questa tabella: Cifre di n 50 75 100 200 500 Sapere se n è primo richiede 15 sec 22 sec 40sec 10 min 3 giorni Pag. 10/10 Trovare i fattori di n richiede 4 ore 104 giorni 74 anni 4*109 anni (età della terra) 4*1025 anni