PRIMAVERA IN BICOCCA 1. Numeri primi e fattorizzazione Una

annuncio pubblicitario
PRIMAVERA IN BICOCCA
1. Numeri primi e fattorizzazione
Una delle applicazioni più rilevanti della Teoria dei Numeri si ha nel campo della crittografia. In queste note vogliamo delineare, in particolare, il metodo di crittografia a
chiave pubblica RSA, che prende il nome dai suoi ideatori Rivest, Shamir e Adleman.
Da un punto di vista matematico, la crittografia a chiave pubblica si basa sull’idea di individuare una funzione che sia invertibile ma, mentre la funzione individuata deve essere
facile da calcolare, la sua inversa deve essere invece molto difficile da calcolare. È per
certi versi sorprendente che una funzione con queste proprietà sia la funzione che, dati
due numeri primi, ne restituisce il loro prodotto. Per capire meglio il senso di questa
affermazione ci mettiamo in un contesto leggermente più generale. Ricordiamo intanto
la definizione di numero primo.
Definizione. Un numero naturale p, diverso da 0 e da 1, si dice primo se gli unici interi
positivi per cui è divisibile sono 1 e p.
Esempio. Sono numeri primi 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31 . . . Il più grande numero
primo finora (gennaio 2014) conosciuto è 257885161 −1, scoperto nel 2013. Questo numero
ha 17425170 cifre decimali.
È noto fin dall’antichità che i numeri primi sono infiniti e hanno un ruolo centrale nell’aritmetica perchè permettono di costruire, attraverso la moltiplicazione, tutti i numeri
interi. Più precisamente:
Teorema (Teorema della Fattorizzazione Unica). Ogni numero intero n, maggiore o
uguale a 2, si scrive come prodotto di potenze di numeri primi, cioè
n = pt11 pt22 · · · ptss
con p1 , p2 , . . . , ps numeri primi distinti, t1 , . . . , ts interi positivi. Questa scrittura è unica
a meno dell’ordine, cioè i primi p1 , . . . , ps e gli esponenti t1 , · · · ts sono univocamente
determinati da n.
Esempio. La fattorizzazione di 1500 è 22 · 3 · 53 . La fattorizzazione di 26094 è 2 · 3 · 4349.
Supponiamo ora che ci venga dato un numero N che sappiamo essere il prodotto di due
numeri primi distinti p e q (dunque N = p · q) e ci venga chiesto, conoscendo solo N ,
di determinare p e q. Un modo di procedere è di dividere N per 2, 3, 4, . . . N − 1 fin
quando non troviamo un fattore di N . Quante divisioni
√ dobbiamo fare? Se N = p · q
allora p e q non possono essere entrambi maggiori di N , altrimenti il loro prodotto
√
sarebbe maggiore di N . Quindi, se supponiamo che sia p < q , abbiamo che p ≤ N .
Il punto cruciale per la crittografia è che, se N è abbastanza grande, il numero di
divisioni che dobbiamo provare è talmente elevato che, con la attuale potenza di calcolo
dei computer, non possiamo dare una risposta al problema in un tempo ragionevole. Il
1
2
PRIMAVERA IN BICOCCA
metodo delle divisioni è certamente poco efficiente, ma anche con i metodi teorici più
efficienti a disposizione, e con le attuali risorse di calcolo, il problema di fattorizzare
numeri grandi è in pratica impossibile. Per darvi una idea dell’ordine di grandezza del
numero N = p · q impiegato in crittografia, lo standard di sicurezza, considerato solido
almeno fino al 2030, prevede di utilizzare un numero N dell’ordine di 10600 . La società
RSA Security ha lanciato, nel 1991, una sfida (RSA Factoring Challenge) pubblicando
una lista di numeri della forma N = p · q, e promettendo un premio in denaro per chi
fosse riuscito a fattorizzarli. La sfida si è conclusa nel 2007. Il più piccolo numero della
lista aveva 100 cifre decimali ed è stato fattorizzato in pochi giorni, ma molti altri non
sono stati ancora fattorizzati (il più piccolo dei quali ha 190 cifre decimali).
La funzione invertibile che è facile da calcolare, ma la cui inversa è difficile da calcolare,
è quindi la funzione che, dati due numeri primi p e q, ci restituisce il loro prodotto
N = p · q.
2. Massimo comun divisore e moduli
Siano a e b due numeri interi, che per semplicità supponiamo entrambi positivi. Possiamo
considerare il loro massimo comun divisore, che indichiamo con M CD(a, b). Sia a che
b sono multipli del loro massimo comun divisore. Inoltre i divisori di M CD(a, b) sono
tutti e soli i divisori comuni tra a e b. Come si calcola il massimo comun divisore tra a
e b? Un modo è quello di utilizzare la fattorizzazione in prodotto di numeri primi di a
e b. Un altro modo, che per quello che segue è più utile, è usare l’algoritmo di Euclide
(o algoritmo delle divisioni successive). Vediamolo su un esempio. Prendiamo a = 1218
e b = 132 e vogliamo calcolare il loro massimo comun divisore.
1218 = 132 · 9 + 30
132 = 30 · 4 + 12
30 = 12 · 2 + 6
12 = 6 · 2 + 0
a = bq1 + r1
b = r1 q2 + r2
r1 = r2 q3 + r3
r2 = r3 q4 + 0
Il massimo comun divisore tra 1218 e 132 è l’ultimo resto non nullo nel procedimento
delle divisioni successive. Un’altra informazione che otteniamo dall’algoritmo di Euclide,
è che esistono due interi s e t per cui M CD(a, b) = a · s + b · t. Riprendiamo il nostro
esempio che riscriviamo, per maggior chiarezza, nella colonna di sinistra, usando la
lettera a per 1218 e la lettera b per 132. Nella colonna di destra, partendo dalla prima
divisione, isoliamo il resto. Inoltre in ciascuna delle equazioni di destra, a partire dalla
seconda, sostituiamo le precedenti.
a = b · 9 + 30
b = 30 · 4 + 12
30 = 12 · 2 + 6
30 = a − 9b
12 = b − 4 · 30 = b − 4(a − 9b) = 37b − 4a
6 = 30 − 2 · 12 = (a − 9b) − 2(37b − 4a) =
= 9a − 83b
PRIMAVERA IN BICOCCA
3
Dunque abbiamo ottenuto che 6 = 1218 · 9 − 132 · 83, ovvero una possibile scelta per
gli interi s e t che cercavamo è s = 9 e t = −83. Naturalmente questa non è l’unica
possibilità, perchè se k è un qualunque intero, allora 6 = (9 − kb)a + (−83 + ka)b. Più
in generale, se M CD(a, b) = as + bt, allora è vero anche che M CD(a, b) = a(s − kb) +
b(t + ka).
Introduciamo adesso l’aritmetica dei moduli (o aritmetica dell’orologio). Si tratta di
un concetto che ci è familiare. Comincio dunque con un esempio. Consideriamo un
orologio con 24 ore che indichiamo con 0, . . . 23. Se adesso sono le 15 e ci venisse chiesto
che ore sono tra 22 ore, cosa faremmo per rispondere? Quello che faremmo è sommare
15 + 22 = 37, dividere (divisione con resto) 37 per 24, ottenendo 37 = 24 · 1 + 13 e
considerare il resto ottenuto, cioè 13. Quindi se adesso sono le 15, tra 22 ore sono le 13.
Ancora un esempio. Se partiamo dall’ora 0, dopo 55 ore che ore sono? Di nuovo quello
che facciamo è dividere 55 per 24, 55 = 24 · 2 + 7 e considerare il resto. Dunque, dopo
55 ore sono le 7.
L’aritmetica dei moduli generalizza questo esempio dal caso di un orologio con 24 ore
al caso di un orologio con n di ore, dove n ≥ 1 è un naturale. Vediamolo ancora su
un esempio. Se n = 7 stiamo considerando un orologio con 7 ore, che indichiamo con
0, 1, 2, 3, 4, 5 e 6. Se adesso sono le 5, per sapere che ore sono tra 4 ore quello che
facciamo è sommare 5 + 4 = 9, dividere 9 per 7 ottenendo 9 = 7 · 1 + 2, e dunque tra 4
ore sono le 2. Esattamente lo stesso procedimento che abbiamo usato prima, nel caso di
un orologio di 24 ore. Nel linguaggio matematico l’aritmetica su un orologio con 7 ore
è l’aritmetica modulo 7. In simboli scriviamo che
5 + 4 mod 7 = 2.
Allo stesso modo se partiamo dalle ore 0, e vogliamo sapere che ore sono dopo 89 ore,
dividiamo 89 per 7 e ne prendiamo il resto. Abbiamo dunque 89 = 7 · 12 + 5 e scriviamo
89 mod 7 = 5.
Analogamente al caso della somma, se vogliamo calcolare 5·4 mod 7, calcoliamo 5·4 = 20,
dividiamo il risultato per 7 e ne consideriamo il resto, dunque
5 · 4 mod 7 = 6.
Una proprietà del prodotto modulo 7 ci permette semplificare i conti. Per esempio, se
vogliamo calcolare 89 · 145 mod 7, sappiamo che dobbiamo calcolare 89 · 143 = 12727
e poi dividere il risultato per 7, 12727 = 7 · 1818 + 1, ottenendo che 89 · 143 mod 7 =
12727 mod 7 = 1. Avremmo potuto anche calcolare separatamente 89 mod 7 = 5 e
143 mod 7 = 3 e poi (5 · 3) mod 7 = 15 mod 7 = 1. In modo analogo si può ragionare
per la somma.
In generale, se n ≥ 1 è un naturale fissato e a è un numero intero (che per semplicità
supponiamo positivo) definiamo a mod n come il resto r che otteniamo dividendo a per
n. Osserviamo che il resto nella divisione per n è sempre compreso tra 0 e n − 1. Come
negli esempi precedenti possiamo definire somma o prodotto di a e b modulo n come,
rispettivamente, la somma o il prodotto usuali di a e b seguiti dalla divisione per n.
Come negli esempi se vogliamo calcolare, per esempio, il prodotto a · b mod n possiamo
calcolare a mod n = r1 e b mod n = r2 e poi il prodotto r1 · r2 mod n. Lo stesso vale per
la somma.
4
PRIMAVERA IN BICOCCA
3. La funzione di Eulero
Un ruolo cruciale per la descrizione dell’algoritmo RSA è giocato dalla funzione ϕ di
Eulero. Vediamo come è definita. La funzione ϕ ha come dominio l’insieme N \ {0} e
come codominio N, dunque
ϕ : N \ {0} → N.
In 1 poniamo che la funzione valga 1, cioè poniamo che ϕ(1) = 1. Se n è un numero
naturale maggiore o uguale a 2, per definire ϕ(n) consideriamo l’insieme A di tutti i
numeri naturali k che soddisfano queste due proprietà:
1) 1 ≤ k ≤ n;
2) il massimo comun divisore tra k e n è uguale a 1.
Allora il valore di ϕ in n è uguale al numero di elementi dell’insieme A. La definizione
sembra complicata ma vediamola su qualche esempio.
Esempio. Consideriamo n = 8. L’insieme A è l’insieme di tutti i numeri naturali k che
soddisfano le due proprietà:
1) 1 ≤ k ≤ 8;
2) il massimo comun divisore tra k e 8 è uguale a 1.
Allora otteniamo
A = {1, 3, 5, 7}
e il numero di elementi di A è 4, dunque ϕ(8) = |A| = 4.
Esempio. Consideriamo n = 24. L’insieme A è l’insieme di tutti i numeri naturali k
che soddisfano le due proprietà:
1) 1 ≤ k ≤ 24;
2) il massimo comun divisore tra k e 24 è uguale a 1.
Allora otteniamo
A = {1, 5, 7, 11, 13, 17, 19, 23}
e il numero di elementi di A è 8, dunque ϕ(24) = |A| = 8.
Esempio. Consideriamo n = 11. L’insieme A è l’insieme di tutti i numeri naturali k
che soddisfano le due proprietà:
1) 1 ≤ k ≤ 11;
2) il massimo comun divisore tra k e 11 è uguale a 1.
Allora otteniamo
A = {1, 2, 3, 5, 6, 7, 8, 9, 10}
e il numero di elementi di A è 10, dunque ϕ(11) = |A| = 10.
Adesso abbiamo capito come è definita la funzione di Eulero, ma, riguardando l’ultimo
esempio, abbiamo anche una informazione in più su come calcolarla. Infatti nell’ultimo
esempio, n = 11 è un numero primo. Allora è facile capire come è fatto l’insieme A.
Siccome gli unici divisori di 11 sono 1 e 11, comunque scelgo k con 1 ≤ k ≤ 10, risulta
che il massimo comun divisore tra k e 11 è uguale a 1. Quindi l’insieme A contiene tutti
PRIMAVERA IN BICOCCA
5
gli interi tra 1 e 10. Questo ragionamento vale più in generale. Se p è un numero primo
allora
A = {k : 1 ≤ k ≤ p − 1, M CD(k, p) = 1}
dunque ϕ(p) = |A| = p − 1.
Facciamo un ulteriore passo. Se p è un numero primo e m ≥ 1 un numero intero,
abbiamo che
A = {k : 1 ≤ k ≤ pm e M CD(k, pm ) = 1} = {1, 2, . . . , pm } \ {p, 2p, 3p, . . . , pm−1 p}
dunque ϕ(pm ) = |A| = pm − pm−1 .
Per poter calcolare la funzione di Eulero, senza dover elencare ogni volta gli elementi
dell’insieme A, abbiamo bisogno di una ulteriore sua proprietà. La enuncio solamente
perchè per dimostrarla servono le conoscenze di un corso di Algebra del primo anno
di Matematica (ma se deciderete di studiare Matematica lo scoprirete). La proprietà è
questa. Se n e m sono numeri naturali con M CD(n, m) = 1 allora ϕ(n·m) = ϕ(n)·ϕ(m).
Per esempio se consideriamo 88 = 8 · 11, poichè M CD(8, 11) = 1 abbiamo che ϕ(88) =
ϕ(8)ϕ(11) = 4 · 10 = 40.
Con le tre proprietà che abbiamo visto, cioè
1) ϕ(p) = p − 1 con p numero primo,
2) ϕ(pm ) = pm − pm−1 con p numero primo, m intero positivo,
3) se M CD(m, n) = 1 allora ϕ(n · m) = ϕ(n) · ϕ(m),
possiamo calcolare agevolmente il valore della funzione di Eulero in un qualsiasi numero
naturale n ≥ 2. Infatti per il Teorema della Fattorizzazione unica sappiamo che possiamo
scrivere
n = pt11 pt22 pt33 · · · ptrr
con p1 , p2 , . . . pt numeri primi distinti e t1 , . . . tr interi positivi. Poichè M CD(pt11 , pt22 · · · ptrr ) =
1, applicando la proprietà 3) otteniamo
ϕ(n) = ϕ(pt11 )ϕ(pt22 pt33 · · · ptrr ).
Adesso applichiamo di nuovo la proprietà 3) osservando che M CD(pt22 , pt33 · · · ptrr ) = 1 e
dunque
ϕ(n) = ϕ(pt11 )ϕ(pt22 )ϕ(pt33 · · · ptrr ).
Procedendo in questo modo abbiamo
ϕ(n) = ϕ(pt11 )ϕ(pt22 )ϕ(pt33 ) · · · ϕ(ptrr ).
Infine per concludere usiamo la proprietà 2) e otteniamo che
ϕ(n) = ϕ(pt11 )ϕ(pt22 )ϕ(pt33 ) · · · ϕ(ptrr ) = (pt11 −pt11 −1 )(pt22 −pt22 −1 )(pt33 −pt33 −1 ) · · · (ptrr −prtr −1 ).
Esempio. Riprendiamo il secondo esempio di calcolo della funzione di Eulero visto
sopra. Abbiamo che 24 = 23 · 3 dunque
ϕ(24) = ϕ(23 )ϕ(3) = (23 − 22 )(3 − 1) = 4 · 2 = 8.
L’ultimo risultato che ci serve sulla funzione di Eulero è un Teorema (dovuto sempre a
Eulero) che enuncio
6
PRIMAVERA IN BICOCCA
Teorema (Teorema di Eulero). Siano N un intero con N ≥ 2 e a un numero intero
con M CD(a, N ) = 1. Allora aϕ(N ) mod N = 1.
Anche qui la dimostrazione richiede delle nozioni di Algebra del primo anno di Matematica.
4. RSA
Alice
Sceglie due numeri primi p e q con p 6= q.
Calcola N = p · q e ϕ(N ) = (p − 1)(q − 1).
Sceglie un intero r in modo che
M CD(ϕ(N ), r) = 1.
Calcola, con l’algoritmo di Euclide, due
interi s e t in modo che rs + ϕ(N )t = 1
Pubblica la coppia (N, r) mentre tiene
ben segreti p, q, ϕ(N ) e s.
Bob
Vuole mandare ad Alice il messaggio b,
dove b è un numero intero, con 0 < b < N .
Per semplicità supponiamo anche che sia
M CD(b, N ) = 1.
Legge la coppia (N, r) che Alice ha
pubblicato, e calcola il numero c = br .
Calcola a = c mod N e invia il numero a
ad Alice.
Riceve il messaggio a da Bob e deve ricostruire il messaggio originale, cioè b.
Calcola as mod N e ritrova b.
Perchè Alice riesce a ricostruire il messaggio originale di Bob? Il motivo è il Teorema di
Eulero che abbiamo citato prima. Infatti
b = b1 mod N = brs+ϕ(N )t mod N = brs bϕ(N )t mod N
= ((br )s
mod N )((bϕ(N ) )t mod N ) = as mod N.
Nell’ultimo passaggio abbiamo usato proprio il Teorema di Eulero, che ci assicura che
bϕ(N ) mod N = 1, dunque anche (bϕ(N ) )t mod N = 1.
Supponiamo adesso che una terza persona, Eva, intercetti il messaggio a che Bob spedisce
ad Alice. Se ci mettiamo nei panni di Eva la situazione è questa
Alice
(N, r)
Eva
Intercetta il messaggio a
che Bob ha spedito ad
Alice.
Conosce la coppia (N, r)
Bob
Spedisce il messaggio a ad
Alice.
PRIMAVERA IN BICOCCA
7
scelta da Alice, perchè
Alice l’ha resa pubblica.
Per ricostruire il messaggio originale b di Bob,
ha bisogno di conoscere
l’intero s e poi operare esattamente come fa
Alice.
È facile per Eva calcolare
l’intero s se conosce ϕ(N ).
Infatti Eva può applicare
l’algoritmo delle divisioni
successive. Quindi il problema di Eva è conoscere ϕ(N ) = (p − 1)(q − 1),
ovvero conoscere p e q.
Eva conosce N = pq ma,
se p e q sono numeri primi
grandi, da questa informazione non sa ricostruire p e
q.
Esempio. Vediamo un esempio concreto di funzionamento dell’algoritmo RSA. Supponiamo innanzitutto che a ciascuna lettera dell’alfabeto sia stato associato un numero
secondo lo schema seguente
A B C D E F G H I L M N O P Q R S T U V Z Spazio
2 3 4 5 6 7 8 9 29 31 12 13 14 37 16 17 18 19 43 21 22
23
Alice sceglie i numeri primi p = 5 e q = 11, calcola N = pq = 55, ϕ(N ) = ϕ(55) =
4 · 10 = 40. Inoltre Alice sceglie un numero r in modo tale che M CD(r, ϕ(N )) =
M CD(r, 40) = 1. Nel nostro esempio Alice sceglie r = 37. Poi Alice calcola, tramite
l’algoritmo di Euclide, due interi s e t per i quali 1 = 40t + 37s, ottenendo t = −12 e
s = 13. Riporto qui i calcoli
40 = 37 · 1 + 3
3 = 40 − 37
37 = 3 · 12 + 1
1 = 37 − 12 · 3 = 37 − 12(40 − 37) = −12 · 40 + 13 · 37.
3=3·1+0
Infine Alice pubblica la coppia (N, r) = (55, 37). Bob legge le informazioni rese pubbliche
da Alice e le spedisce il messaggio seguente
26 7 21 9 52 7 52 41 23 28 24 7 18 49 7
8
PRIMAVERA IN BICOCCA
Per decifrarlo Alice considera il primo numero 26 e calcola 26s mod N cioè 2613 mod 55.
Si tratta quindi di calcolare 2613 , dividerlo per 55 e considerarne il resto. Quello che
Alice ottiene è 31. In modo alternativo, Alice può ragionare cosı̀: da 13 = 1 + 4 + 8
segue che
2613 mod 55 = (261 mod 55) · (264 mod 55) · (268 mod 55)
264 mod 55 = 456976 mod 55 = 36
268 mod 55 = 208827064576 mod 55 = 31
2613 mod 55 = 26 · 36 · 31 mod 55 = 29016 mod 55 = 31.
Dunque decifrando 26 otteniamo 31 ovvero la lettera L. Facciamo ancora un passo. Consideriamo 7. Alice calcola 713 mod 55 ottenenendo 2. Come prima, in modo alternativo,
si poteva ragionare come segue
713 mod 55 = (71 mod 55) · (74 mod 55) · (78 mod 55)
74 mod 55 = 2401 mod 55 = 36
78 mod 55 = 5764801 mod 55 = 31
713 mod 55 = 7 · 36 · 31 mod 55 = 7812 mod 55 = 2.
Il messaggio inviato da Bob, alla luce di quanto abbiamo visto, diventa
L A 21 9 52 A 52 41 23 28 24 A 18 49 A
Se avete voglia, finite di decifrarlo.
Referenze
Un libro piacevole sullo sviluppo storico crittografia, che delinea anche gli aspetti matematici, è
Simon Singh, Codici e Segreti, BUR Biblioteca Universale Rizzoli (1999)
Scarica