Dal messaggio a sequenze di numeri

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