• Corso di Sicurezza su reti
• 11-04-2012
Number Theory
Barbara Masucci
Dipartimento di Informatica ed Applicazioni
Università di Salerno
masucci@dia.unisa.it
http://www.dia.unisa.it/professori/masucci
Teoria dei numeri
Concetti preliminari per RSA
Aritmetica modulare
Algoritmo di Euclide per il calcolo del gcd
Calcolo dell’inversa moltiplicativa mod n
Elevazione a potenza modulare
Generazione di numeri primi e test di
primalità
Teorema della divisione
Dati a є Z, n є N esiste un’unica coppia (q,r) con
0 ≤r≤ n-1 tale che
a=q·n+r
r è indicato con a mod n
a=11, n=7, 11=1·7+4 r=11 mod 7=4
a=-11, n=7,-11=(-2) ·7+3 r=-11 mod 7=3
• 1
• Corso di Sicurezza su reti
• 11-04-2012
Congruenze mod n
a e b sono congruenti mod n
(a b mod n) se
a mod n = b mod n
73
4 mod 23
73 mod 23 = 4 mod 23
21 -9 mod 10
21 mod 10 = -9 mod 10
Se a b mod n allora n|(b-a)
Se a b mod n allora b a mod n
L’insieme Zn
Addizione modulo n
(a mod n) + (b mod n) = (a+b) mod n
Proprietà
Commutativa
Associativa
Distributiva
Identità
Esistenza inversa additiva
(l’inversa additiva di x è y tale che x+y 0 mod n)
(Zn, +) gruppo additivo mod n
• 2
• Corso di Sicurezza su reti
• 11-04-2012
Massimo Comune
Divisore (gcd)
d è il massimo comune divisore di a e n se
d è un divisore di a e n
ogni divisore di a e n è un divisore di d
d=a·x+n·y
Proprietà
gcd(a, n)=gcd(a, -n)=gcd(-a, -n)=gcd(|a|, |n|)
gcd(a, 0)=|a|
se gcd(a, n)=1, a e n sono relativamente primi
L’insieme Zn*
Zn* = { [a]n, 0<a≤ n-1 e gcd(a,n)=1}
Esempio: Z4*={ [1]4, [3]4}
[1]4={…, -11, -7, -3, 1, 5, 9, 13, …}
[3]4={…, -9, -5, -1, 3, 7, 11, 15, …}
Esempio: Z8*={ [1]8, [3]8, [5]8, [7]8}
[1]8={…, -23, -15, -7, 1, 9, 17, 25, …}
[3]8={…, -21, -13, -5, 3, 11, 19, 30, …}
Moltiplicazione modulo n
(a mod n) · (b mod n) = (a · b) mod n
Proprietà
Commutativa
Associativa
Distributiva
Identità
Esistenza inversa moltiplicativa
L’inversa moltiplicativa di x è y tale che x·y 1 mod n)
(Zn *, ·) gruppo moltiplicativo mod n
• 3
• Corso di Sicurezza su reti
• 11-04-2012
0
1
2
3
4
5
6
7
0
1
2
3
4
5
6
7
0
0
1
2
3
4
5
6
7
0
0
0
0
0
0
0
0
0
1
1
2
3
4
5
6
7
0
1
0
1
2
3
4
5
6
7
2
2
3
4
5
6
7
0
1
2
0
2
4
6
0
2
4
6
3
3
4
5
6
7
0
1
2
3
0
3
6
1
4
7
2
5
4
4
5
6
7
0
1
2
3
4
0
4
0
4
0
4
0
4
5
5
6
7
0
1
2
3
4
5
0
5
2
7
4
1
6
3
6
6
7
0
1
2
3
4
5
6
0
6
4
2
0
6
4
2
7
7
0
1
2
3
4
5
6
7
0
7
6
5
4
3
2
1
Addizione
Moltiplicazione
Non tutti gli interi in Z8 hanno inversa moltiplicativa,
ma quelli in Z8*={ [1]8, [3]8, [5]8, [7]8} ce l’hanno
Algoritmo di Euclide
Descritto negli Elementi di Euclide (circa 300 A. C.)
Euclide (a,n)
if n = 0 then return a
else return Euclide (n, a mod n)
Algoritmo di Euclide:
Esempi
Euclide (30, 21) = Euclide (21, 9)
= Euclide (9, 3)
= Euclide (3, 0) = 3
Euclide (4864, 3458) = Euclide (3458, 1406)
= Euclide (1406, 646)
= Euclide (646, 114)
= Euclide (114, 76)
= Euclide (76, 38)
= Euclide (38, 0) = 38
• 4
• Corso di Sicurezza su reti
• 11-04-2012
Algoritmo di Euclide:
complessità
Assumiamo a > n ≥ 0
Se a<n, Euclide (a,n) chiama Euclide (n,a) e procede
Se a=n, Euclide (a,n) termina subito perché a mod n=0
Al massimo log n chiamate
Analisi complessa basata sui numeri di Fibonacci
Per ogni chiamata O( (log a)2 ) operazioni su bit
Totale: al massimo O( (log a)3 ) operazioni su bit
Euclide (a,n) richiede al massimo O( (log a)2 ) operazioni
su bit
Polinomiale nella lunghezza dell’input
Algoritmo di Euclide Esteso
Oltre a computare d=gcd(a,n) computa anche due interi x, y
tali che d = gcd(a,n) = a·x+n·y
Stesso running time asintotico di Euclide (a,n)
Algoritmo di Euclide Esteso
• 5
• Corso di Sicurezza su reti
• 11-04-2012
Soluzione di ax≡b (mod n)
Dati
a, b, n calcolare x
0 1 2 3 4 5 6 7
Esempi:
3x≡7 (mod 8) soluzione 5
2x≡4 (mod 8) soluzione 2,6
0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7
2 0 2 4 6 0 2 4 6
3 0 3 6 1 4 7 2 5
4 0 4 0 4 0 4 0 4
4x≡2 (mod 8) nessuna soluzione 5 0 5 2 7 4 1 6 3
6 0 6 4 2 0 6 4 2
7 0 7 6 5 4 3 2 1
Soluzione di ax≡b (mod n)
Ha soluzioni se e solo se g|b
Se g|b ci sono esattamente g distinte
soluzioni mod n:
per i = 0,1,…, g-1
dove
g = a·x′+n·y (da Euclide-esteso (a,n) )
Soluzione di ax≡1 (mod n)
• 6
• Corso di Sicurezza su reti
• 11-04-2012
Soluzione di ax≡1 (mod 8)
0 1 2 3 4 5 6 7
0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7
2 0 2 4 6 0 2 4 6
3 0 3 6 1 4 7 2 5
4 0 4 0 4 0 4 0 4
5 0 5 2 7 4 1 6 3
6 0 6 4 2 0 6 4 2
7 0 7 6 5 4 3 2 1
Soluzione di ax≡1 (mod 7)
0
1
2
3
4
5
6
0
0
0
0
0
0
0
0
1
0
1
2
3
4
5
6
2
0
2
4
6
1
3
5
3
0
3
6
2
5
1
4
4
0
4
1
5
2
6
3
5
0
5
3
1
6
4
2
6
0
6
5
4
3
2
1
Esempio: calcolo di 5-1 mod 7
d = x·a + y·n
1 = -2·7 + 3·5
3 = 5-1 mod 7
a
7
n
5
d
1
x y
-2 3
5
2
1
1 -2
2
1
1
0
1
1
0
1
1
0
• 7
• Corso di Sicurezza su reti
• 11-04-2012
Esempio: calcolo di 5-1 mod 11
a
11
d = x·a + y·n
1 = 1·11 + (-2)·5
-2 = 5-1 mod 11
-2 = 9 mod 11
n
5
d
1
x y
1 -2
5
1
1
0
1
1
0
1
1
0
9 = 5-1 mod 11
Teorema cinese del resto
Dati
m1, m2,…,mt interi positivi tali che gcd(mi,mj)=1, i≠j
M= m1·m2 …·mt
a1, a2,…,at interi
Esiste una sola soluzione modulo M al sistema di congruenze
x≡a1 mod m1
x≡a2 mod m2
…
x≡at mod mt
Mi = M/mi
yi = Mi-1 mod mi
Teorema cinese del resto
Esempio
x≡2 mod 5
x≡3 mod 13
a1=2, m1=5, M1=13, y1=13-1 mod 5=2
a2=3, m2=13, M2=5, y2=5-1 mod 13= 8
M=65
Soluzione del sistema:
• 8
• Corso di Sicurezza su reti
• 11-04-2012
Elevazione a potenza modulare
Calcolo di xy mod z
Metodo naive
Metodo left-to-right
Metodo right-to-left
Elevazione a potenza modulare
Metodo naive
Calcolo di xy mod z
Elevazione a potenza modulare
Metodo naive
Calcolo di xy mod z
• 9
• Corso di Sicurezza su reti
• 11-04-2012
Elevazione a potenza modulare
Metodo left-to-right
Calcolo di xy mod z
Idea:
y = y020+ y121 +… +yt2t
y = y0+2(y1+ 2(y2+… +2(yt-1+2yt)))))
Elevazione a potenza modulare
Metodo left-to-right
xy = xy0+2(y1+2(y2+…+2(yt-1+2yt)))))
= xy0x2(y1+2(y2+…+2(yt-1+2yt)))))
= xy0(xy1+2(y2+…+2(yt-1+2yt))))))2
= xy0(xy1(xy2+…+2(yt-1+2yt))))))2)2
= xy0 (xy1( … (xyt-1(xyt)2)2… )2
Elevazione a potenza modulare
Metodo left-to-right
Calcolo di xy mod z
Idea:
y = y020+ y121 +… +yt2t
y = y0+2(y1+… +2(yt-1+2yt)))))
y
yt-1
xy = x 0 (… (x
y
(x t)2)2… )2
• 10
• Corso di Sicurezza su reti
• 11-04-2012
Elevazione a potenza modulare
Metodo left-to-right
Calcolo di xy mod z
Idea:
y = y020+ y121 +… +yt2t
y = y0+2(y1+… +2(yt-1+2yt)))))
y
yt-1
xy = x 0 (… (x
y
(x t)2)2… )2
Potenza_Modulare (x, y, z)
a←1
for i = t downto 0 do
a ← (a · a) mod z
if yi = 1 then a ← (a · x) mod z
return a
Elevazione a potenza modulare
Metodo left-to-right
Potenza_Modulare (x, y, z)
a←1
for i = t downto 0 do
a ← (a · a) mod z
if yi = 1 then a ← (a · x) mod z
return a
Elevazione a potenza modulare
Metodo right-to-left
• 11
• Corso di Sicurezza su reti
• 11-04-2012
Elevazione a potenza modulare
Metodo right-to-left
Elevazione a potenza modulare
Metodo right-to-left
Elevazione a potenza modulare
Metodo right-to-left
• 12
• Corso di Sicurezza su reti
• 11-04-2012
Elevazione a potenza modulare
Metodo right-to-left
Potenza_Modulare (x, y, z)
if y = 0 then return 1
X ← x; P ← 1
if y0 = 1 then P ← x
for i = 1 to t do
X ← X ·X mod z
if yi=1 then P ← P ·X mod z
return P
Numeri primi
Un intero p > 1 è un numero primo se e solo
se i suoi unici divisori sono 1 e sé stesso
Esempi: 2, 3, 5, 7, 11, 13, 17, 19,...
Teorema fondamentale dell’aritmetica
Ogni intero composto n > 1 può essere scritto in
modo unico come prodotto di potenze di primi
n = p1e1 p2e2... pkek
pi primo, ei intero positivo
Funzione di Eulero
Zn* = { [a]n, 0<a≤ n-1 e gcd(a,n)=1}
φ(n) = cardinalità di Zn* (funzione di Eulero)
φ(p) = p-1
se p primo
φ(pq) = (p-1)(q-1)
φ(n) =
se p,q primi
se n = p1e1 p2e2... pkek,
pi primo, ei ≥ 0
• 13
• Corso di Sicurezza su reti
• 11-04-2012
Teorema di Eulero
Per ogni a ∈ Zn*, aφ(n) = 1 mod n
Esempi:
a=3, n=10, φ(10)=4 34=81=1 mod 10
a=2, n=11, φ(11)=10 210=1024=1 mod 11
Teorema di Fermat
Se p è primo, per ogni a ∈ Zp*,
ap-1 = 1 mod p
Se p è primo, per ogni a ∈ Z
ap = a mod p
Esempi:
a=7, p=19 718 = 1 mod 19
a=10, p=5 105 = 10 mod 5 = 0 mod 5
Generazione di un
primo ‘grande’
1. Genera a caso un dispari p di grandezza appropriata
2. Testa se p è primo
3. Se p è composto, go to 1.
• 14
• Corso di Sicurezza su reti
• 11-04-2012
Generazione di un
primo ‘grande’
1. Genera a caso un dispari p di grandezza appropriata
2. Testa se p è primo
3. Se p è composto, go to 1.
Come testare se un numero p è primo?
Che probabilità abbiamo che p sia primo?
Distribuzione dei
numeri primi
π(x) = numero di primi in [2,x]
Teorema dei numeri primi:
π(x) è circa x/ln x
Esempio: π(1010) = 455.052.511
1010/ln 1010 ≈ 434.294.481,9 (4% in meno)
Scelta di un primo
di 512 bit
Scelto un intero in [2,2512] la probabilità che sia
primo è circa 1 su ln 2512 (ln 2512 ≈ 354,89)
Numero medio di tentativi ≈ 354,89
Se si scelgono solo dispari, numero medio di tentativi
≈ 177,44
Se si scelgono dispari in [2511,2512] la probabilità è
• 15
• Corso di Sicurezza su reti
• 11-04-2012
Scelta di un primo
di 1024 bit
Scelto un intero in [2,21024] la probabilità che sia
primo è circa 1 su ln 21024 (ln 21024 ≈ 709,78)
Numero medio di tentativi ≈ 709,78
Se si scelgono solo dispari, numero medio di tentativi
≈ 354,89
Se si scelgono dispari in [21023,21024] probabilità
Test di Primalità
Due tipi di test:
Probabilistici
Deterministici
Test di primalità probabilistici
Il test può sbagliare
numero composto viene dichiarato primo
probabilità di errore ≤ 1/2
Ripetendo il test indipendentemente t volte,
probabilità di errore ≤ (1/2)t
• 16
• Corso di Sicurezza su reti
• 11-04-2012
Test di primalità probabilistici
Insieme di witness W(p)
dato a∈[1, p-1] è facile verificare se a∈W(p)
se p è primo allora W(p) è vuoto
se p è composto allora |W(p)| ≥ p/2
Test di primalità
probabilistici
Test di Solovay-Strassen
Pubblicato nel 1977
Probabilità di errore ≤ (1/2)t
Test di Miller-Rabin
Il più usato in pratica
Il più veloce
Probabilità di errore ≤ (1/4)t
Test di Miller-Rabin
Sia p il numero da testare
p-1=2kq, con q dispari e k>0
Scegli a∈[1, p-1] e calcola aq, a2q, …,a2
(quadrati ripetuti)
k
q
Se p è primo, a2 q = 1 mod p (teorema di Fermat)
j
Sia j il più piccolo indice per cui a2 q = 1 mod p
k
Se j=0, allora aq = 1 mod p
j-1
j-1
Se j>0, allora (a2 q -1)(a2 q +1) mod p =0
p divide uno dei due fattori
p non può dividere il primo,
altrimenti j non è il più
j
piccolo valore per cui a2 q = 1 mod p
j-1
p divide il secondo fattore, da cui a2 q = -1 mod p
• 17
• Corso di Sicurezza su reti
• 11-04-2012
Test di Miller-Rabin
k
Data la sequenza aq, a2q, …,a2 q, se p è
primo una delle due condizioni è vera:
aq =1 mod p
j-1
= -1 mod p per qualche j ∈[1, k]
Altrimenti p è composto
a2
q
Test di Miller-Rabin
Test MR(p)
calcola k>0 e q dispari: p-1=2kq
scegli a caso a∈[1, p-1]
if aq=1 mod p, then return “primo”
for j=0 to k-1 do
j
if a2 q = -1 mod p, then return “primo”
return “composto”
Test di Miller-Rabin
Insieme di witness di Miller-Rabin
WMR(p) = {a : aq ≠ 1 mod p and
j
a2 q ≠ -1 mod p per ogni j∈[0,k-1]}
Se p è un primo dispari
WMR(p) è vuoto
Se p è un numero composto dispari
| WMR(p) | ≥ (3/4) ·φ(p)
• 18
• Corso di Sicurezza su reti
• 11-04-2012
Test di Miller-Rabin p=29
Witness di Miller-Rabin
WMR(29) = {a : a7 ≠ 1 mod 29 and
j
a2 ·7 ≠ -1 mod 29 per ogni j∈[0,1]}
a=10
107 mod 29=17 (continua)
(107)2 mod 29=28=-1 mod 29 (stop: “primo”)
a=2
27 mod 29=12 (continua)
(27)2 mod 29=28= -1 mod 29 (stop: “primo”)
Prova per tutti gli a ∈[1,28]: sempre output “primo”
Test di Miller-Rabin p=221
Witness di Miller-Rabin
WMR(221) = {a : a55 ≠ 1 mod 221 and
j
a2 ·55 ≠ -1 mod 221 per ogni j∈[0,1]}
a=5
555 mod 221=112 (continua)
(555)2 mod 221=168 (valori terminati, stop: “composto”)
a=21
2155 mod 221=220= -1 mod 221 (stop: “primo”)
Per ogni a ∈ {1,…,220}/ WMR(221), output: “primo”
a=1, 21, 47, 174, 200, 220
Test di primalità
deterministici
Fino al 2002, non erano noti test deterministici
efficienti
Nel 2002, primo test deterministico
polinomiale proposto da Agrawal, Kayal e
Saxena
Miller-Rabin ancora usato perché più efficiente
• 19
• Corso di Sicurezza su reti
• 11-04-2012
Cryptography and Network Security
by W. Stallings (2005)
cap. 4 (Finite Fields)
cap. 8 (Introduction to Number Theory)
Introduction to Algorithms
by Cormen, Leiserson, Rivest (I ed)
cap 31 (Number Theory)
• 20