Aritmetica modulare, numeri primi e crittografia

Transcript

Aritmetica modulare, numeri primi e crittografia
Aritmetica modulare, numeri primi e crittografia
Alberto Canonaco
Università di Pavia
14 Giugno 2016
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Numeri primi
Definizione
Un intero n > 1 è un numero primo se non esistono due interi
a, b > 1 tali che n = ab.
Sono dunque numeri primi: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, . . .
Teorema fondamentale dell’aritmetica
Ogni intero n > 1 si può scrivere, in modo unico a meno
dell’ordine, come prodotto di numeri primi.
Esempio
140 = 2 · 7 · 5 · 2 = 5 · 2 · 2 · 7 = · · ·
Di solito si scrive 140 = 22 · 5 · 7.
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Alcune proprietà dei numeri primi
Teorema
I numeri primi sono infiniti.
Si sa molto di più sulla distribuzione dei numeri primi.
In particolare, il cosiddetto teorema dei numeri primi afferma che i
numeri primi fino a n sono (in un senso che si può rendere
n
matematicamente rigoroso) “circa” log(n)
.
Esempio
I numeri primi fino a un miliardo sono 50847534, mentre
1000000000
= 48254942, 43
log(1000000000)
D’altra parte non si conoscono risultati generali che permettano di
determinare facilmente se un dato numero è primo.
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Il problema della fattorizzazione
Dato un intero n > 1 come posso stabilire se n è primo? Nel caso
che non lo sia, come posso trovare la sua fattorizzazione?
È facile fornire un algoritmo che risolve entrambi i problemi:
1. d = 2
2. se d >
√
n, allora n è primo (fine!)
3. se d - n (d non divide n), sostituisco d + 1 a d e torno al
punto 2
4. se d | n (d divide n), allora n non è primo, d è un suo fattore
primo e riapplico l’algoritmo con dn (< n) al posto di n
Osservazione
Nel caso peggiore (cioè quando n è primo), l’algoritmo richiede
√
circa n passi. Il suo tempo è quindi esponenziale come funzione
del numero di cifre di n (che è circa log(n)).
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Efficienza degli algoritmi
Esistono algoritmi molto più veloci (e complicati...).
I
In particolare si può sempre fattorizzare n in tempo
subesponenziale, ma non polinomiale (almeno allo stato
attuale delle conoscenze).
I
È invece possibile stabilire in tempo polinomiale se n è primo
o no: anche se questo è stato dimostrato rigorosamente solo
nel 2002 da Agrawal, Kayal e Saxena, erano già noti degli
algoritmi che in pratica funzionano in tempo polinomiale.
I
Inoltre esistono dei test di primalità probabilistici molto
semplici e ancora più veloci, che sono sicuri se indicano che n
non è primo e altrimenti permettono di concludere solo che n
è molto probabilmente primo.
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Conseguenze
In pratica un computer può trovare velocemente (in pochi minuti)
dei numeri primi anche di parecchie centinaia di cifre, mentre in
generale impiegherebbe un tempo enormemente maggiore per
fattorizzare un numero della stessa grandezza.
Il caso che richiede più tempo è quello in cui n = pq con p e q
numeri primi circa della stessa grandezza (ma non troppo vicini e
scelti con alcune altre accortezze).
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
RSA-768
Un normale pc impiegherebbe almeno mille anni per fattorizzare
1230186684530117755130494958384962720772853569595334792197
3224521517264005072636575187452021997864693899564749427740
6384592519255732630345373154826850791702612214291346167042
9214311602221240479274737794080665351419597459856902143413
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
RSA-768
Un normale pc impiegherebbe almeno mille anni per fattorizzare
1230186684530117755130494958384962720772853569595334792197
3224521517264005072636575187452021997864693899564749427740
6384592519255732630345373154826850791702612214291346167042
9214311602221240479274737794080665351419597459856902143413
=
3347807169895689878604416984821269081770479498371376856891
2431388982883793878002287614711652531743087737814467999489
×
3674604366679959042824463379962795263227915816434308764267
6032283815739666511279233373417143396810270092798736308917
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Crittografia
Scopo della crittografia è di trasformare un messaggio rendendolo
incomprensibile a chiunque, tranne a chi è autorizzato a leggerlo.
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Crittografia
Scopo della crittografia è di trasformare un messaggio rendendolo
incomprensibile a chiunque, tranne a chi è autorizzato a leggerlo.
Ci sono essenzialmente due tipi di crittografia:
I
la crittografia simmetrica, in cui un’unica chiave (nota solo a
mittente e destinatario) permette di crittare e decrittare il
messaggio;
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Crittografia
Scopo della crittografia è di trasformare un messaggio rendendolo
incomprensibile a chiunque, tranne a chi è autorizzato a leggerlo.
Ci sono essenzialmente due tipi di crittografia:
I
la crittografia simmetrica, in cui un’unica chiave (nota solo a
mittente e destinatario) permette di crittare e decrittare il
messaggio;
I
la crittografia asimmetrica, in cui si usa una chiave pubblica
(nota a tutti) per crittare il messaggio e una chiave privata
(nota solo al destinatario) per decrittarlo.
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Crittografia
Scopo della crittografia è di trasformare un messaggio rendendolo
incomprensibile a chiunque, tranne a chi è autorizzato a leggerlo.
Ci sono essenzialmente due tipi di crittografia:
I
la crittografia simmetrica, in cui un’unica chiave (nota solo a
mittente e destinatario) permette di crittare e decrittare il
messaggio;
I
la crittografia asimmetrica, in cui si usa una chiave pubblica
(nota a tutti) per crittare il messaggio e una chiave privata
(nota solo al destinatario) per decrittarlo.
Uno dei primi sistemi di crittografia asimmetrica fu inventato nel
1977 da Rivest, Shamir e Adleman, basandosi proprio sulla facilità
di trovare due numeri primi grandi e sulla difficoltà di fattorizzarne
il prodotto.
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Divisione con resto
Teorema
Dati due interi a e n con n > 0, esistono unici due altri interi q e r
(detti quoziente e resto della divisione di a per n) tali che
I
a = qn + r
I
0≤r <n
Il resto della divisione di a per n si chiama a modulo n e si indica
a mod n
Chiaramente a mod n = 0 se e solo se n | a.
Esempio
Se n = 10 e a ≥ 0, q si ottiene da a cancellando l’ultima cifra,
mentre r è proprio l’ultima cifra di a (scritto come al solito in base
10). Quindi, per esempio, 216 = 21 × 10 + 6 e 216 mod 10 = 6.
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Algoritmo RSA
Preliminarmente il destinatario
I
sceglie (opportunamente) due numeri primi p e q
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Algoritmo RSA
Preliminarmente il destinatario
I
sceglie (opportunamente) due numeri primi p e q
I
calcola n := pq
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Algoritmo RSA
Preliminarmente il destinatario
I
sceglie (opportunamente) due numeri primi p e q
I
calcola n := pq
I
calcola m := mcm(p − 1, q − 1)
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Algoritmo RSA
Preliminarmente il destinatario
I
sceglie (opportunamente) due numeri primi p e q
I
calcola n := pq
I
calcola m := mcm(p − 1, q − 1)
I
sceglie un intero 1 < c < m tale che mcd(c, m) = 1
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Algoritmo RSA
Preliminarmente il destinatario
I
sceglie (opportunamente) due numeri primi p e q
I
calcola n := pq
I
calcola m := mcm(p − 1, q − 1)
I
sceglie un intero 1 < c < m tale che mcd(c, m) = 1
I
trova un intero 0 ≤ d < m tale che (cd) mod m = 1
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Algoritmo RSA
Preliminarmente il destinatario
I
sceglie (opportunamente) due numeri primi p e q
I
calcola n := pq
I
calcola m := mcm(p − 1, q − 1)
I
sceglie un intero 1 < c < m tale che mcd(c, m) = 1
I
trova un intero 0 ≤ d < m tale che (cd) mod m = 1
I
divulga n e c (la chiave pubblica), mentre tiene segreti
p, q, m e d (la chiave privata)
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Algoritmo RSA
Preliminarmente il destinatario
I
sceglie (opportunamente) due numeri primi p e q
I
calcola n := pq
I
calcola m := mcm(p − 1, q − 1)
I
sceglie un intero 1 < c < m tale che mcd(c, m) = 1
I
trova un intero 0 ≤ d < m tale che (cd) mod m = 1
I
divulga n e c (la chiave pubblica), mentre tiene segreti
p, q, m e d (la chiave privata)
Per mandare un intero 0 ≤ a < n (ogni messaggio si può
trasformare in questa forma, eventualmente spezzandolo)
il mittente
I
calcola b := ac mod n e manda b
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Algoritmo RSA
Preliminarmente il destinatario
I
sceglie (opportunamente) due numeri primi p e q
I
calcola n := pq
I
calcola m := mcm(p − 1, q − 1)
I
sceglie un intero 1 < c < m tale che mcd(c, m) = 1
I
trova un intero 0 ≤ d < m tale che (cd) mod m = 1
I
divulga n e c (la chiave pubblica), mentre tiene segreti
p, q, m e d (la chiave privata)
Per mandare un intero 0 ≤ a < n (ogni messaggio si può
trasformare in questa forma, eventualmente spezzandolo)
il mittente
I
calcola b := ac mod n e manda b
Infine il destinatario
I
calcola b d mod n (= a)
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Sicurezza dell’algoritmo RSA
La sicurezza dell’algoritmo dipende da alcune assunzioni su cui non
ci sono certezze, ma che sembrano molto plausibili grazie ai
numerosi esperti che hanno studiato (e continuano a studiare) la
questione. In particolare non deve essere possibile risolvere
velocemente nessuno dei seguenti problemi:
I
fattorizzare n
I
trovare d conoscendo solo n e c
I
trovare a conoscendo solo n, c e b
D’altra parte è noto che vanno prese alcune precauzioni tecniche
tra cui evitare che a assuma valori particolari per i quali l’ultimo
problema si risolve facilmente.
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Aritmetica modulare
Dati degli interi a, a0 e n con n > 0, si vede subito che
a mod n = a0 mod n ⇐⇒ n | (a0 − a)
Proposizione
Se a mod n = a0 mod n e b mod n = b 0 mod n, allora
(a + b) mod n = (a0 + b 0 ) mod n
(ab) mod n = (a0 b 0 ) mod n
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Aritmetica modulare
Dati degli interi a, a0 e n con n > 0, si vede subito che
a mod n = a0 mod n ⇐⇒ n | (a0 − a)
Proposizione
Se a mod n = a0 mod n e b mod n = b 0 mod n, allora
(a + b) mod n = (a0 + b 0 ) mod n
(ab) mod n = (a0 b 0 ) mod n
Dimostrazione.
Se a0 − a = cn e b 0 − b = dn, si trova
(a0 + b 0 ) − (a + b) = (c + d)n
a0 b 0 − ab = (cdn + bc + ad)n
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Esponenziale modulare
Per calcolare ak mod n (con k > 0) non è necessario calcolare ak .
Se k > 1, posso scrivere k = k1 + k2 on 0 < k1 , k2 < k. Essendo
ak = ak1 +k2 = ak1 ak2 ,
se so calcolare ai := aki mod n, allora
ak mod n = (a1 a2 ) mod n.
Scegliendo k1 = k − 1 e k2 = 1 se k è dispari e k1 = k2 = k2 se k è
pari, se ne deduce induttivamente che posso calcolare ak mod n
con circa log(k) moltiplicazioni modulari, dunque in tempo
polinomiale se k < n.
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Massimo comun divisore e minimo comune multiplo
Definizione
Dati due interi a, b > 0 si definiscono
mcd(a, b) := max{k : k | a, k | b}
mcm(a, b) := min{k > 0 : a | k, b | k}
Osservazione
I
Se sono note le fattorizzazioni di a e di b, si calcolano
facilmente mcd(a, b) e mcm(a, b). Inoltre
mcm(a, b) =
I
ab
mcd(a, b)
Si definisce allo stesso modo mcd(a, 0) e risulta mcd(a, 0) = a
(perché k | 0 per ogni k).
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Algoritmo di Euclide
Se a ≥ b > 0, per calcolare mcd(a, b) pongo
r1 := a,
Alberto Canonaco
r2 := b.
Aritmetica modulare, numeri primi e crittografia
Algoritmo di Euclide
Se a ≥ b > 0, per calcolare mcd(a, b) pongo
r1 := a,
r2 := b.
Poi definisco
r3 := r1 mod r2
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Algoritmo di Euclide
Se a ≥ b > 0, per calcolare mcd(a, b) pongo
r1 := a,
r2 := b.
Poi definisco
r3 := r1 mod r2
e induttivamente, se ri > 0,
ri+1 := ri−1 mod ri
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Algoritmo di Euclide
Se a ≥ b > 0, per calcolare mcd(a, b) pongo
r1 := a,
r2 := b.
Poi definisco
r3 := r1 mod r2
e induttivamente, se ri > 0,
ri+1 := ri−1 mod ri
Dato che ri+1 < ri , esiste j tale che
rj 6= 0
Alberto Canonaco
e
rj+1 = 0
Aritmetica modulare, numeri primi e crittografia
Algoritmo di Euclide
Se a ≥ b > 0, per calcolare mcd(a, b) pongo
r1 := a,
r2 := b.
Poi definisco
r3 := r1 mod r2
e induttivamente, se ri > 0,
ri+1 := ri−1 mod ri
Dato che ri+1 < ri , esiste j tale che
rj 6= 0
e
rj+1 = 0
Allora
mcd(a, b) = rj .
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Dimostrazione
Dato 2 ≤ i ≤ j, per definizione esiste un intero qi tale che
ri−1 = qi ri + ri+1 . Allora
mcd(ri−1 , ri ) = mcd(qi ri + ri+1 , ri ) = mcd(ri+1 , ri )
(perché k | ri+1 e k | ri se e solo se k | (qi ri + ri+1 ) e k | ri ).
Dunque
mcd(a, b) = mcd(r1 , r2 ) = mcd(r2 , r3 ) = · · ·
= mcd(rj , rj+1 ) = mcd(rj , 0) = rj
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Ulteriori proprietà
I
Poiché ri+1 < ri < ri−1 , deve essere qi > 0, e quindi
ri−1 = qi ri + ri+1 ≥ ri + ri+1 > 2ri+1
Ne segue che l’algoritmo di Euclide richiede circa log(a) passi,
e dunque un tempo polinomiale se a < n.
I
Inoltre, partendo da rj e sostituendo ricorsivamente ri+1 con
ri−1 − qi ri , si possono trovare (sempre in tempo polinomiale)
due interi x e y tali che
ax + by = mcd(a, b).
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Esempio
a = r1 = 91, b = r2 = 35
91 = 2 · 35 + 21
(q2 = 2, r3 = 21)
35 = 21 + 14
21 = 14 + 7
(q3 = 1, r4 = 14)
(q4 = 1, r5 = 7)
14 = 2 · 7 + 0
(q5 = 2, r6 = 0)
Dunque j = 5 e mcd(91, 35) = r5 = 7. Inoltre
7 = 21 − 14
= 21 − (35 − 21) = 2 · 21 − 35
= 2 · (91 − 2 · 35) − 35 = 2 · 91 − 5 · 35
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Efficienza dell’algoritmo RSA
Osserviamo che tutti i calcoli richiesti dall’algoritmo possono essere
svolti velocemente (in particolare, in tempo polinomiale):
I
Già detto che si possono trovare i primi p e q (e ovviamente
calcolare n := pq).
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Efficienza dell’algoritmo RSA
Osserviamo che tutti i calcoli richiesti dall’algoritmo possono essere
svolti velocemente (in particolare, in tempo polinomiale):
I
Già detto che si possono trovare i primi p e q (e ovviamente
calcolare n := pq).
I
Con l’algoritmo di Euclide si calcola
m := mcm(p − 1, q − 1) =
(p − 1)(q − 1)
mcd(p − 1, q − 1)
e si trova 1 < c < m tale che mcd(c, m) = 1.
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Efficienza dell’algoritmo RSA
Osserviamo che tutti i calcoli richiesti dall’algoritmo possono essere
svolti velocemente (in particolare, in tempo polinomiale):
I
Già detto che si possono trovare i primi p e q (e ovviamente
calcolare n := pq).
I
Con l’algoritmo di Euclide si calcola
m := mcm(p − 1, q − 1) =
(p − 1)(q − 1)
mcd(p − 1, q − 1)
e si trova 1 < c < m tale che mcd(c, m) = 1.
I
Inoltre si trovano due interi x e y tali che cx + my = 1.
Dunque (cx) mod m = 1 e allora d := x mod m verifica
0 ≤ d < m e (cd) mod m = 1.
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Efficienza dell’algoritmo RSA
Osserviamo che tutti i calcoli richiesti dall’algoritmo possono essere
svolti velocemente (in particolare, in tempo polinomiale):
I
Già detto che si possono trovare i primi p e q (e ovviamente
calcolare n := pq).
I
Con l’algoritmo di Euclide si calcola
m := mcm(p − 1, q − 1) =
(p − 1)(q − 1)
mcd(p − 1, q − 1)
e si trova 1 < c < m tale che mcd(c, m) = 1.
I
Inoltre si trovano due interi x e y tali che cx + my = 1.
Dunque (cx) mod m = 1 e allora d := x mod m verifica
0 ≤ d < m e (cd) mod m = 1.
I
Con l’esponenziale modulare si calcolano b := ac mod n e
b d mod n.
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Caratterizzazione dei numeri primi
Proposizione
Sia p un numero primo e siano a e b due interi tali che p | (ab).
Allora p | a o p | b.
Dimostrazione.
Se p | b, OK. Altrimenti mcd(b, p) = 1, e dunque esistono x e y
tali che bx + py = 1. Essendo ab = pk per qualche k, si trova
a = a(bx + py ) = abx + apy = pkx + pay = p(kx + ay ),
il che dimostra che p | a.
Osservazione
Con questo si dimostra il teorema fondamentale dell’aritmetica.
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Teorema cinese del resto
Siano n1 e n2 due interi positivi tali che mcd(n1 , n2 ) = 1. Dati
0 ≤ a1 < n1 e 0 ≤ a2 < n2 , esiste unico 0 ≤ a < n1 n2 tale che
(
a mod n1 = a1
a mod n2 = a2
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Teorema cinese del resto
Siano n1 e n2 due interi positivi tali che mcd(n1 , n2 ) = 1. Dati
0 ≤ a1 < n1 e 0 ≤ a2 < n2 , esiste unico 0 ≤ a < n1 n2 tale che
(
a mod n1 = a1
a mod n2 = a2
Dimostrazione.
Dato che sia a che (a1 , a2 ) possono assumere n1 n2 valori, basta
dimostrare l’unicità della soluzione.
Se a e a0 sono due soluzioni del sistema, allora n1 | (a0 − a) e
n2 | (a0 − a). Questo implica che
mcm(n1 , n2 ) =
n1 n2
= n1 n2 | (a0 − a),
mcd(n1 , n2 )
e quindi a0 = a perché 0 ≤ a, a0 < n1 n2 .
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Piccolo teorema di Fermat
Sia p un numero primo e a un intero tale che a mod p 6= 0. Allora
ap−1 mod p = 1
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Piccolo teorema di Fermat
Sia p un numero primo e a un intero tale che a mod p 6= 0. Allora
ap−1 mod p = 1
Osservazione
Questo teorema fornisce un criterio molto veloce per vedere se un
intero n > 1 non è primo: scelto 0 < a < n, se an−1 mod n 6= 1,
sicuramente n non è primo.
Se invece an−1 mod n = 1, non si può concludere che n è primo,
ma una semplice variante di questo criterio (ripetuto per un
numero abbastanza grande di valori di a) permette di sapere che n
è molto probabilmente primo.
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Dimostrazione
Per i = 0, 1, . . . , p − 1 sia ai := (ai) mod p. Se ai = aj , allora
p | (ai − aj) = a(i − j)
Per ipotesi p - a, dunque p | (i − j). Dato che 0 ≤ i, j < p, questo
implica i = j. Visto che a0 = 0, ne segue che
{a1 , . . . , ap−1 } = {1, . . . , p − 1}
Posto r := 1 · · · (p − 1), si ha ap−1 r = a(2a) · · · ((p − 1)a), e quindi
(ap−1 r ) mod p = (a1 · · · ap−1 ) mod p = r mod p
Pertanto p | (ap−1 r − r ) = r (ap−1 − 1), e, tenendo conto che p - r
(perché p - i per 0 < i < p), si ottiene p | (ap−1 − 1), da cui si
deduce subito ap−1 mod p = 1.
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Correttezza dell’algoritmo RSA
p e q primi distinti, n := pq, m := mcm(p − 1, q − 1), c, d > 0 tali
che (cd) mod m = 1. Devo dimostrare che dato 0 ≤ a < n e posto
b := ac mod n, vale b d mod n = a.
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Correttezza dell’algoritmo RSA
p e q primi distinti, n := pq, m := mcm(p − 1, q − 1), c, d > 0 tali
che (cd) mod m = 1. Devo dimostrare che dato 0 ≤ a < n e posto
b := ac mod n, vale b d mod n = a.
Essendo b d mod n = (ac )d mod n = acd mod n, devo quindi
dimostrare acd mod n = a, che per il teorema cinese equivale a
(
acd mod p = a mod p
acd mod q = a mod q
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Correttezza dell’algoritmo RSA
p e q primi distinti, n := pq, m := mcm(p − 1, q − 1), c, d > 0 tali
che (cd) mod m = 1. Devo dimostrare che dato 0 ≤ a < n e posto
b := ac mod n, vale b d mod n = a.
Essendo b d mod n = (ac )d mod n = acd mod n, devo quindi
dimostrare acd mod n = a, che per il teorema cinese equivale a
(
acd mod p = a mod p
acd mod q = a mod q
Per simmetria basta dimostrare la prima uguaglianza.
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Correttezza dell’algoritmo RSA
p e q primi distinti, n := pq, m := mcm(p − 1, q − 1), c, d > 0 tali
che (cd) mod m = 1. Devo dimostrare che dato 0 ≤ a < n e posto
b := ac mod n, vale b d mod n = a.
Essendo b d mod n = (ac )d mod n = acd mod n, devo quindi
dimostrare acd mod n = a, che per il teorema cinese equivale a
(
acd mod p = a mod p
acd mod q = a mod q
Per simmetria basta dimostrare la prima uguaglianza.
Se a mod p = 0, anche acd mod p = 0.
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia
Correttezza dell’algoritmo RSA
p e q primi distinti, n := pq, m := mcm(p − 1, q − 1), c, d > 0 tali
che (cd) mod m = 1. Devo dimostrare che dato 0 ≤ a < n e posto
b := ac mod n, vale b d mod n = a.
Essendo b d mod n = (ac )d mod n = acd mod n, devo quindi
dimostrare acd mod n = a, che per il teorema cinese equivale a
(
acd mod p = a mod p
acd mod q = a mod q
Per simmetria basta dimostrare la prima uguaglianza.
Se a mod p = 0, anche acd mod p = 0.
Se a mod p 6= 0, osservo che cd = 1 + (p − 1)k per qualche k
(perché (cd) mod m = 1 e (p − 1) | m), e quindi acd = a(ap−1 )k .
Usando il piccolo teorema di Fermat concludo che
acd mod p = (a(ap−1 )k ) mod p = (a · 1k ) mod p = a mod p
Alberto Canonaco
Aritmetica modulare, numeri primi e crittografia