Teoria dei Numeri - INTRANET - Dipartimento di...
-
Upload
vuongkhuong -
Category
Documents
-
view
213 -
download
0
Transcript of Teoria dei Numeri - INTRANET - Dipartimento di...
•Alfredo De Santis •04/04/2002
•Corso di Sicurezza su Reti •1
Crittografia a Chiave Pubblica 0
Crittosistema a chiave pubblica
file pubblicoutente chiave pubblica
A kpub … …
utente chiave pubblicautente chiave pubblicaA A kpub … …
chiave privatakpriv
chiave privatachiave privatakpriv
nnarellaCrittografia a Chiave Pubblica 1
Cifratura
iagio
utente chiave pubblicaA kpub … …
utente chiave pubblicautente chiave pubblicaA A kpub … …
Devo cifrare il messaggio MDevo cifrare il messaggio Med inviarlo ad ed inviarlo ad AA
file pubblico
Crittografia a Chiave Pubblica 2
Cifratura
utente chiave pubblicaA kpub … …
utente chiave pubblicautente chiave pubblicaA A kpub … …
Cifratura Cifratura di M per di M per AAC ← CIFRA CIFRA (kpub, M)
CCfile pubblico
iagioCrittografia a Chiave Pubblica 3
Decifratura
nnarella
utente chiave pubblicaA kpub … …
utente chiave pubblicautente chiave pubblicaA A kpub … …
Devo decifrare il messaggio cifrato C
CC????C?C?
file pubblico
Crittografia a Chiave Pubblica 4
Decifratura
utente chiave pubblicaA kpub … …
utente chiave pubblicautente chiave pubblicaA A kpub … …
CC
Decifratura di CM ← DECIFRADECIFRA (kpriv , C)
chiave privatakpriv
chiave privatachiave privatakpriv
file pubblico
nnarellaCrittografia a Chiave Pubblica 5
Teoria dei NumeriCrittosistemi a chiave pubblica più comuni basati sulla Teoria dei Numeri
“… both Gauss and lesser mathematicians may be justified in rejoicing that there is one science at anyrate, and that their own, whose very remoteness from ordinary human activities keep it gentle and clean.”G. H. Hardy, A Mathematician’s Apology, 1940
•Alfredo De Santis •04/04/2002
•Corso di Sicurezza su Reti •2
Crittografia a Chiave Pubblica 6
RSA
Sicurezza basata sulla difficoltà di fattorizzare
Proposto nel 1978 da
Rivest Shamir Adleman
Crittografia a Chiave Pubblica 7
RSA
Shamir Rivest Adleman
Crittografia a Chiave Pubblica 8
Chiavi RSA
file pubblicoutente chiave pubblica
A (n,e) … …
utente chiave pubblicautente chiave pubblicaA A (n,e) … …
chiave privata(n,d)
chiave privatachiave privata(n,d)
n = pqp,q primi
ed = 1 mod (p-1)(q-1)
nnarellaCrittografia a Chiave Pubblica 9
Cifratura RSA
utente chiave pubblicaA (n,e) … …
utente chiave pubblicautente chiave pubblicaA A (n,e) … …
Devo cifrare il messaggio MDevo cifrare il messaggio M
ed inviarlo ad ed inviarlo ad AA
file pubblico
iagio
Crittografia a Chiave Pubblica 10
Cifratura RSA
utente chiave pubblicaA (n,e) … …
utente chiave pubblicautente chiave pubblicaA A (n,e) … …
Cifratura Cifratura di M per di M per AAC ← Me mod n
CC
iagio
file pubblico
Crittografia a Chiave Pubblica 11
Decifratura RSA
utente chiave pubblicaA (n,e) … …
utente chiave pubblicautente chiave pubblicaA A (n,e) … …
Devo decifrare il messaggio cifrato C
CC????C?C?
file pubblico
nnarella
•Alfredo De Santis •04/04/2002
•Corso di Sicurezza su Reti •3
Crittografia a Chiave Pubblica 12
Decifratura RSA
utente chiave pubblicaA (n,e) … …
utente chiave pubblicautente chiave pubblicaA A (n,e) … …
CCDecifratura di C
M ← Cd mod n
chiave privata(n,d)
chiave privatachiave privata(n,d)
nnarella
file pubblico
Crittografia a Chiave Pubblica 13
“Piccolo” esempio: Chiavi RSA
utente chiave pubblica A (n = 3337, e = 79) … …
utente chiave pubblica utente chiave pubblica A A (n = 3337, e = 79) … …
chiave privata(n=3337, d=1019)chiave privatachiave privata
(n=3337, d=1019)
ed = 79 ·1019 = 1 mod 3220(p-1)(q-1) = 46 ·70 = 3220
3337 = 47 ·71p = 47, q = 71
file pubblico
nnarella
Crittografia a Chiave Pubblica 14
Esempio: Cifratura RSA
utente chiave pubblica A (n = 3337, e = 79)
… …
utente chiave pubblica utente chiave pubblica A A (n = 3337, e = 79)
… … 1570
Cifratura di M = 688 per AA1570 ← 6887 9 mod 3337
file pubblico
iagioCrittografia a Chiave Pubblica 15
Esempio: Decifratura RSA
utente chiave pubblica A (n = 3337, e = 79) … …
utente chiave pubblica utente chiave pubblica A A (n = 3337, e = 79) … …
1570
Decifratura di C = 1570688 ← 15701019 mod 3337
chiave privata(n=3337, d=1019)chiave privatachiave privata
(n=3337, d=1019)
nnarella
file pubblico
Crittografia a Chiave Pubblica 16
“Piccolo” esempio: Chiavi RSA
utente chiave pubblica A (n = 55, e = 3) … …
utente chiave pubblica utente chiave pubblica A A (n = 55, e = 3) … …
chiave privata(n=55, d=27)
chiave privatachiave privata(n=55, d=27)
ed = 3 · 27 = 1 mod 40(p-1)(q-1) = 10 · 4 = 40
55 = 11 ·5p = 11, q = 5
file pubblico
nnarellaCrittografia a Chiave Pubblica 17
Esempio: Cifratura RSA
utente chiave pubblica A (n = 55, e = 3)
… …
utente chiave pubblica utente chiave pubblica A A (n = 55, e = 3)
… … 15
Cifratura di M = 5 per AA15 ← 53 mod 55
file pubblico
iagio
•Alfredo De Santis •04/04/2002
•Corso di Sicurezza su Reti •4
Crittografia a Chiave Pubblica 18
Esempio: Decifratura RSA
utente chiave pubblica A (n = 55, e = 3) … …
utente chiave pubblica utente chiave pubblica A A (n = 55, e = 3) … …
15
Decifratura di C = 155 ← 1527 mod 55
chiave privata(n=55, d=27)
chiave privatachiave privata(n=55, d=27)
nnarella
file pubblico
Crittografia a Chiave Pubblica 19
Esempio: Cifratura RSA
utente chiave pubblica A (n = 55, e = 3)
… …
utente chiave pubblica utente chiave pubblica A A (n = 55, e = 3)
… … 47
Cifratura di M = 5718 per AA47 ← 57183 mod 55
file pubblico
iagio
Crittografia a Chiave Pubblica 20
Esempio: Decifratura RSA
utente chiave pubblica A (n = 55, e = 3) … …
utente chiave pubblica utente chiave pubblica A A (n = 55, e = 3) … …
47
Decifratura di C = 4753 ← 4727 mod 55
chiave privata(n=55, d=27)
chiave privatachiave privata(n=55, d=27)
nnarella
file pubblico
Crittografia a Chiave Pubblica 21
Esempio: Decifratura RSA
utente chiave pubblica A (n = 55, e = 3) … …
utente chiave pubblica utente chiave pubblica A A (n = 55, e = 3) … …
47
Decifratura di C = 4753 ← 4727 mod 55
chiave privata(n=55, d=27)
chiave privatachiave privata(n=55, d=27)
nnarella
file pubblico
5353≠≠57185718
Crittografia a Chiave Pubblica 22
Esempio: Decifratura RSA
utente chiave pubblica A (n = 55, e = 3) … …
utente chiave pubblica utente chiave pubblica A A (n = 55, e = 3) … …
47
Decifratura di C = 4753 ← 4727 mod 55
chiave privata(n=55, d=27)
chiave privatachiave privata(n=55, d=27)
nnarella
file pubblico
57185718≡≡53 53 mod mod 5555
Crittografia a Chiave Pubblica 23
Esempio corretto
utente chiave pubblica A (n = 55, e = 3)
… …
utente chiave pubblica utente chiave pubblica A A (n = 55, e = 3)
… …
15,13,2
Cifratura di 001010011110010001010011110010
15 ← 53 mod 55 13 ← 73 mod 552 ← 183 mod 55
file pubblico
iagio
011110110100010011110110100010
55=11011155=11011122
•Alfredo De Santis •04/04/2002
•Corso di Sicurezza su Reti •5
Crittografia a Chiave Pubblica 24
Esempio corretto
utente chiave pubblica A (n = 55, e = 3)
… …
utente chiave pubblica utente chiave pubblica A A (n = 55, e = 3)
… …
15,13,2
Cifratura di M = 5718 per AA15 ← 53 mod 55 13 ← 73 mod 552 ← 183 mod 55
file pubblico
iagio
011110110100010011110110100010
Crittografia a Chiave Pubblica 25
Esempio: Decifratura RSA
utente chiave pubblica A (n = 55, e = 3) … …
utente chiave pubblica utente chiave pubblica A A (n = 55, e = 3) … …
15,13,2
Decifratura di C = 15,13,25 ← 1527 mod 557 ← 1327 mod 5518 ← 227 mod 55
chiave privata(n=55, d=27)
chiave privatachiave privata(n=55, d=27)
nnarella
file pubblico
Crittografia a Chiave Pubblica 26
EsercizioSvolgere altro “piccolo” esempio RSA
– Calcolo p, q– Calcolo n– Calcolo e, d– Calcolo cifratura– Calcolo decifratura
Crittografia a Chiave Pubblica 27
Crittografia a chiave pubblica ed a chiave privata
qVantaggi della crittografia a chiave pubblica– Chiavi private mai trasmesse– Possibile la firma digitale
qVantaggi della crittografia a chiave privata– Molto più veloce (ad es., DES è ≥100 volte più veloce
di RSA, in hardware tra 1.000 e 10.000 volte)– Sufficiente in diverse situazioni
(ad esempio, applicazioni per singolo utente)
Crittografia a Chiave Pubblica 28
iagio
Digital Envelope
utente chiave pubblicaA kpub … …
utente chiave pubblicautente chiave pubblicaA A kpub … …
Cifratura Cifratura di M per di M per A A k ← genera chiave sessioneC1 ← CIFRA CIFRA (kpub, k) C2 ← E E (k, M)
CC11,C,C22
file pubblico
Crittografia a Chiave Pubblica 29
Digital Envelope: Decifratura
utente chiave pubblicaA kpub … …
utente chiave pubblicautente chiave pubblicaA A kpub … …
chiave privatakpriv
chiave privatachiave privatakpriv
DecifraturaDecifratura di di CC11,C,C22k ← DECIFRA DECIFRA (kpriv , C1)M ← D (k, C2)
CC11,C,C22
file pubblico
nnarella
•Alfredo De Santis •04/04/2002
•Corso di Sicurezza su Reti •6
Crittografia a Chiave Pubblica 30
Digital Envelope: vantaggi
q Chiave di sessione solo per uno o pochi messaggiq Molto più veloce della sola
crittografia a chiave pubblica
Crittografia a Chiave Pubblica 31
Correttezza decifratura RSA
Cd mod n = (Me)d mod n = Mde mod n= M1+r(p-1)(q-1) mod n= M mod n = M
poichè 0≤M<n
Teorema di Eulerox∈Zn
* ⇒ x(p-1)(q-1)=1 mod n
Prova per tutti gli x mediante il teorema del resto cinese
Prova per tutti gli x mediante Prova per tutti gli x mediante il il teorema del resto cineseteorema del resto cinese
ed = 1 mod (p-1)(q-1)
Crittografia a Chiave Pubblica 32
Funzione di Euleroq φ(n) = cardinalità di Zn* = { x | 0<x<n tali che gcd(x,n)=1}q φ(p) = p-1 se p primoq φ(pq) = (p-1)(q-1) se p,q primi
q φ(n) =
fattorizzazione n = p1e1 p2
e2... pkek, pi primo, ei ≥ 0
q Teorema di Eulero: x ∈ Zn* ⇒ xφ(n) = 1 mod n
−
−⋅
−⋅
k21 p1
1p1
1p1
1n L
Crittografia a Chiave Pubblica 33
Efficienza delle computazioni
Come effettuare le computazioni?
– Elevazione a potenza modularegenerazione di e
– Generazione e,dd ← e-1 mod (p-1)(q-1)
– Generazione numeri primi
Crittografia a Chiave Pubblica 34
Elevazione a potenza modulareMetodo naive
Potenza_Modulare_naive (x, y, z)a ← 1for i = 1 to y do
a ← (a ·x) mod zreturn a
Potenza_Modulare_naive (x, y, z)a ← 1for i = 1 to y do
a ← (a ·x) mod zreturn a
Calcolo di xy mod z
Crittografia a Chiave Pubblica 35
Elevazione a potenza modulareMetodo naive
Potenza_Modulare_naive (x, y, z)a ← 1for i = 1 to y do
a ← (a · x) mod zreturn a
Potenza_Modulare_naive (x, y, z)a ← 1for i = 1 to y do
a ← (a · x) mod zreturn a
Calcolo di xy mod z
Se y è di 512 bit, occorrono ≈ 2512 operazioni
•Alfredo De Santis •04/04/2002
•Corso di Sicurezza su Reti •7
Crittografia a Chiave Pubblica 36
Elevazione a potenza modulareMetodo left-to-right
Calcolo di xy mod z y = y020+ y121 +… +yt2t
Idea: y = y0+2(y1+ 2(y2+… +2(yt-1+2yt)))))
Esempio:Esempio:40 = 0·20 + 0·21 + 0·22 + 1·23 + 0·24 + 1·25
40 = 0 + (2 (0 + 2 (0 + (2 (1 + 2 (0 + 2·1))))))
Crittografia a Chiave Pubblica 37
Elevazione a potenza modulareMetodo left-to-right
Calcolo di xy mod z y = y020+ y121 +… +yt2t
Idea:Idea: y = y0+2(y1+ 2(y2+… +2(yt-1+2yt)))))
xy = xy0+2(y 1+2(y 2+…+2(y t-1+2y t)))))
= xy0x2(y 1+2(y 2+…+2(y t-1+2y t)))))
= xy0(xy1+2(y 2+…+2(y t-1+2y t))))))2
= xy0(xy1(xy2+…+2(y t-1+2y t))))))2)2
= xy0 (xy1( … (xy t-1(xy t)2)2… )2
Crittografia a Chiave Pubblica 38
Elevazione a potenza modulareMetodo left-to-right
Esempio:Esempio: x40
40 = 0·20 + 0·21 + 0·22 + 1·23 + 0·24 + 1·25
40 = 0 + (2 (0 + 2 (0 + (2 (1 + 2 (0 + 2·1))))))
x40 = x0 ( x0 (x0 (x1 (x0 (x1)2 )2 )2 )2 )2
Calcolo di xy mod z y = y020+ y121 +… +yt2t
Idea: y = y0+2(y1+… +2(yt-1+2yt)))))
xy = xy0 (… (xy t-1(xy t)2)2… )2
Crittografia a Chiave Pubblica 39
Elevazione a potenza modulareMetodo left-to-right
Calcolo di xy mod z y = y020+ y121 +… +yt2t
Idea: y = y0+2(y1+… +2(yt-1+2yt)))))
xy = xy0 (… (xy t-1(xy t)2)2… )2
Potenza_Modulare (x, y, z)a ← 1for i = t downto 0 do
a ← (a · a) mod zif yi = 1 then a ← (a · x) mod z
return a
Potenza_Modulare (x, y, z)a ← 1for i = t downto 0 do
a ← (a · a) mod zif yi = 1 then a ← (a · x) mod z
return a
left-to-right
Crittografia a Chiave Pubblica 40
Elevazione a potenza modulareMetodo right-to-left
Calcolo di xy mod z y = y020+ y121 +… +yt2t
Idea:Idea: xy = x20y0+21y1…+2ty t
= x20y0 · x21y1 · … · x2 ty t
= (x20)y0 · (x21)y1 · … · (x2t)y t
Crittografia a Chiave Pubblica 41
Elevazione a potenza modulareMetodo right-to-left
Esempio:Esempio: x40
40 = 0·20+ 0·21 +0·22 + 1·23 + 0·24 + 1·25
x40 = (x1)0 · (x2)0 · (x4)0 · (x8)1 · (x16)0 · (x32)1
Calcolo di xy mod z y = y020+ y121 +… +yt2t
Idea:Idea: xy = (x20)y0 · (x21)y1 · … · (x2t)y t
•Alfredo De Santis •04/04/2002
•Corso di Sicurezza su Reti •8
Crittografia a Chiave Pubblica 42
Elevazione a potenza modulareMetodo right-to-left
Esempio:Esempio: x40
40 = 0·20+ 0·21 +0·22 + 1·23 + 0·24 + 1·25
x40 = (x1)0 · (x2)0 · (x4)0 · (x8)1 · (x16)0 · (x32)1
x1 x2 x4 x8 x16 x32
Calcolo di xy mod z y = y020+ y121 +… +yt2t
Idea:Idea: xy = (x20)y0 · (x21)y1 · … · (x2t)y t
=1=1 =1=1 =1=1 =1=1
Crittografia a Chiave Pubblica 43
Elevazione a potenza modulareMetodo right-to-left
Esempio:Esempio: x40
40 = 0·20+ 0·21 +0·22 + 1·23 + 0·24 + 1·25
x40 = (x1)0 · (x2)0 · (x4)0 · (x8)1 · (x16)0 · (x32)1
x40 = x8 · x32
Calcolo di xy mod z y = y020+ y121 +… +yt2t
Idea:Idea: xy = (x20)y0 · (x21)y1 · … · (x2t)y t
=1=1 =1=1 =1=1 =1=1
Crittografia a Chiave Pubblica 44
Elevazione a potenza modulareMetodo right-to-left
Potenza_Modulare (x, y, z)if y = 0 then return 1X ← x; P ← 1if y0 = 1 then X ← xfor i = 1 to t do
X ← X ·X mod zif yi=1 then P ← P ·X mod z
return P
Potenza_Modulare (x, y, z)if y = 0 then return 1X ← x; P ← 1if y0 = 1 then X ← xfor i = 1 to t do
X ← X ·X mod zif yi=1 then P ← P ·X mod z
return P 5596mod 123455596596mod 1234mod 1234i 0 1 2 3 4 5 6 7 8 9
yi 0 0 1 0 1 0 1 0 0 1X 5 25 625 681 1011 369 421 779 947 925P 1 1 625 625 67 67 1059 1059 1059 1013
Crittografia a Chiave Pubblica 45
Scelta esponente pubblico
qMinimizzare operazioni per elevazione a potenzaq e ← 3 q e ← 216+1
decimale 65.537binario 10000000000000001
Crittografia a Chiave Pubblica 46
RSA Performance
qCeleron 450, Windows 2000, Crypto++,
27decifratura1024 bit1cifratura1024 bit4decifratura512 bit
0,2cifratura512 bit
ms/operazione
Crittografia a Chiave Pubblica 47
Efficienza delle computazioni
Come effettuare le computazioni?
– Elevazione a potenza modularegenerazione di e
– Generazione e,dd ← e-1 mod (p-1)(q-1)
– Generazione numeri primi
•Alfredo De Santis •04/04/2002
•Corso di Sicurezza su Reti •9
Crittografia a Chiave Pubblica 48
Teorema della ricorsione del gcdPer tutti gli interi a ≥ 0 e b > 0
gcd(a,b) = gcd(b,a mod b)
Teorema della ricorsione del gcdPer tutti gli interi a ≥ 0 e b > 0
gcd(a,b) = gcd(b,a mod b)
Algoritmo di EuclideDescritto negli Elementi di Euclide (circa 300 A. C.)
Euclide (a,b)if b = 0 then return a
else return Euclide (b, a mod b)
Euclide (a,b)if b = 0 then return a
else return Euclide (b, a mod b)
Crittografia a Chiave Pubblica 49
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
Crittografia a Chiave Pubblica 50
Algoritmo di Euclide: complessità
qAssumiamo a ≥ b qAl massimo log b chiamateqPer ogni chiamata O( (log a)2 ) operazioni su bit qTotale: al massimo O( (log a)3 ) operazioni su bit qEuclide (a,b) richiede al massimo O( (log a)2 )
operazioni su bit
Crittografia a Chiave Pubblica 51
Algoritmo di Euclide Esteso
q Computa interi d, x, y tali che d = gcd(a,b) = ax+by
q Stesso running time asintotico di Euclide (a,b)
Euclide-esteso (a,b)if b = 0 then return (a, 1, 0)(d , x , y´) ← Euclide-esteso (b, a mod b)(d, x, y) ← (d´, y´, x - a/b y )return (d, x, y)
Euclide-esteso (a,b)if b = 0 then return (a, 1, 0)(d , x , y´) ← Euclide-esteso (b, a mod b)(d, x, y) ← (d´, y´, x - a/b y )return (d, x, y)
Crittografia a Chiave Pubblica 52
Euclide_iterativo (a,b)while b ≠ 0 do
r ← a mod b; a ← b; b ← r;return a
Euclide_iterativo (a,b)while b ≠ 0 do
r ← a mod b; a ← b; b ← r;return a
Algoritmo di Euclide (iterativo)
Esercizio: versione iterativa di Euclide-esteso (a,b)
Crittografia a Chiave Pubblica 53
Soluzione di ax≡b (mod m)
Esempi:
3x≡7 (mod 8) soluzione 5
2x≡4 (mod 8) soluzione 2,6
4x≡2 (mod 8) nessuna soluzione12345670724602460636147250540404040452741630364206420276543210100000000076543210
Dati a, b, m calcolare x
•Alfredo De Santis •04/04/2002
•Corso di Sicurezza su Reti •10
Crittografia a Chiave Pubblica 54
Soluzione di ax≡b (mod m)
g = gcd(a,m)g = g = gcdgcd(a,m)(a,m)q Ha soluzioni se e solo se g|b
q Se g|b ci sono esattamente g distinte
soluzioni mod m:
per i = 0,1,…, g-1
dove g = ax′+my (da Euclide-esteso (a,m) ) gm
igb
x' +
Crittografia a Chiave Pubblica 55
Soluzione di ax≡1 (mod m)
q Ha soluzioni se e solo se gcdgcd(a,m) =1(a,m) =1
q Se gcdgcd(a,m) =1 (a,m) =1 l’unica soluzione mod n è:x´
dove 1 = ax′+my (da Euclide-esteso (a,m) )q Tale soluzione viene denotata con a -1 mod m
Crittografia a Chiave Pubblica 56
Soluzione di ax≡1 (mod 8)
Ha soluzioni se e solo se gcdgcd(a,8) =1(a,8) =1
1 = 1-1 mod 8
3 = 3-1 mod 8
5 = 5-1 mod 8
7 = 7-1 mod 812345670724602460636147250540404040452741630364206420276543210100000000076543210
Crittografia a Chiave Pubblica 57
Soluzione di ax≡1 (mod 7)
Ha soluzioni se e solo se gcdgcd(a,7) =1(a,7) =11 = 1-1 mod 7 4 = 2-1 mod 75 = 3-1 mod 72 = 4-1 mod 73 = 5-1 mod 76 = 6-1 mod 7
123456062461350536251404415263035316420265432101000000006543210
Crittografia a Chiave Pubblica 58
Euclide-esteso (a,b)if b = 0 then return (a, 1, 0)(d , x , y´) ← Euclide-esteso (b, a mod b)(d, x, y) ← (d´, y´, x - a/b y )return (d, x, y)
Euclide-esteso (a,b)if b = 0 then return (a, 1, 0)(d , x , y´) ← Euclide-esteso (b, a mod b)(d, x, y) ← (d´, y´, x - a/b y )return (d, x, y)
Esempio: calcolo di 5-1 mod 7
0110110112-211253-2157yxdba
1 = -2·7 + 3·5
3 = 5-1 mod 7
d = x·a + y·b
Crittografia a Chiave Pubblica 59
Efficienza delle computazioni
Come effettuare le computazioni?
– Elevazione a potenza modularegenerazione di e
– Generazione e,dd ← e-1 mod (p-1)(q-1)
– Generazione numeri primi
•Alfredo De Santis •04/04/2002
•Corso di Sicurezza su Reti •11
Crittografia a Chiave Pubblica 60
Generazione chiavi
1. Input L (lunghezza modulo)2. Genera 2 primi di lunghezza L/23. n ← p ·q4. Scegli a caso e5. If gcd ( e, (p-1)(q-1) ) = 1
then d ← e-1 mod (p-1)(q-1)else goto 4.
1. Input L (lunghezza modulo)2. Genera 2 primi di lunghezza L/23. n ← p ·q4. Scegli a caso e5. If gcd ( e, (p-1)(q-1) ) = 1
then d ← e-1 mod (p-1)(q-1)else goto 4.
Crittografia a Chiave Pubblica 61
Generazione chiavi (comunemente usata in pratica)
1. Input L (lunghezza modulo)2. e ← 3 oppure e ← 216+1 (= 65.537)3. Genera 2 primi di lunghezza L/24. n ← p ·q5. If gcd ( e, (p-1)(q-1) ) = 1
then d ← e-1 mod (p-1)(q-1)else goto 3.
1. Input L (lunghezza modulo)2. e ← 3 oppure e ← 216+1 (= 65.537)3. Genera 2 primi di lunghezza L/24. n ← p ·q5. If gcd ( e, (p-1)(q-1) ) = 1
then d ← e-1 mod (p-1)(q-1)else goto 3.
Crittografia a Chiave Pubblica 62
1. Genera a caso un dispari p di grandezza appropriata2. Testa se p è primo3. Se p è composto, go to 1.
1. Genera a caso un dispari p di grandezza appropriata2. Testa se p è primo3. Se p è composto, go to 1.
Generazione di un primo ‘grande’
Crittografia a Chiave Pubblica 63
Variante con sequenza di ricerca1. Genera a caso un dispari p di grandezza appropriata2. Testa se p è primo3. Se p è composto, p ← p+2, go to 2.
Variante con sequenza di ricerca1. Genera a caso un dispari p di grandezza appropriata2. Testa se p è primo3. Se p è composto, p ← p+2, go to 2.
Generazione di un primo ‘grande’
1. Genera a caso un dispari p di grandezza appropriata2. Testa se p è primo3. Se p è composto, go to 1.
1. Genera a caso un dispari p di grandezza appropriata2. Testa se p è primo3. Se p è composto, go to 1.
Crittografia a Chiave Pubblica 64
Distribuzione dei numeri primi
q π(x) = numero di primi in [2,x]
q Teorema dei numeri primi:
q Esempio: π(1010) = 455.052.511
1010/ln 1010 ≈ 434.294.481,9 (4% in meno)
q Per x ≥ 17
xlnx1.25506(x)
xlnx p <<
1xx/ln
(x)lim
px
=∞→
Crittografia a Chiave Pubblica 65
Scelta di un primo di 512 bit
qScelto un intero in [2,2512] la probabilità che sia primo è circa 1 su ln 2512 (ln 2512 ≈ 354,89)qNumero medio di tentativi ≈ 354,89qSe si scelgono solo dispari dimezza ≈ 177,44qSe si scelgono dispari in [2511,2512] probabilità è
79,1771
221
2ln2
2ln2
511511
511
512
512 )( ≈≈ −
1 … … … 11 … … … 1
510 bit scelti a caso510 bit scelti a caso
•Alfredo De Santis •04/04/2002
•Corso di Sicurezza su Reti •12
Crittografia a Chiave Pubblica 66
Scelta di un primo di 1024 bit
qScelto un intero in [2,21024] la probabilità che sia primo è circa 1 su ln 21024 (ln 21024 ≈ 709,78)qNumero medio di tentativi ≈ 709,78qSe si scelgono solo dispari dimezza ≈ 354,89qSe si scelgono dispari in [21023,21024] probabilità
23,3551
221
2ln2
2ln2
10231023
1023
1024
1024 )( ≈≈ −
1 … … … 11 … … … 1
1022 bit scelti a caso1022 bit scelti a caso Crittografia a Chiave Pubblica 67
Test di primalità
qIl miglior algoritmo deterministico è una
variante di Cohen e H. Lenstra del test
di Adleman, Pomerance e Rumely [1983]
qComplessità (lg p)O(lg lg lg p)
Crittografia a Chiave Pubblica 68
Test di primalità probabilistici
Insieme di witness W(p)– dato a∈[0, p-1] è facile verificare se a∈W(p)– se p è primo allora W(p) è vuoto– se p è composto allora |W(p)| ≥ p/2
Test PrimalitàTest Test PrimalitàPrimalitàpp primo primo
compostocomposto
Certamente!Certamente!Certamente!
Probabilmente!Probabilmente!Probabilmente!
Scelgo aScelgo aScelgo a
Crittografia a Chiave Pubblica 69
Diminuizione della probabilità di errore
qProbabilità di errore (n è composto ma viene
dichiarato primo) di tale test ≤ 1/2
qSe il test viene ripetuto indipendentemente t
volte allora la probabilità di errore ≤ (1/2)t
Crittografia a Chiave Pubblica 70
Test di primalità probabilistici
q Test di Solovay-Strassen– Pubblicato nel 1977– Probabilità di errore ≤ (1/2)t
q Test di Miller-Rabin– Il più usato in pratica – Il più veloce – Probabilità di errore ≤ (1/4)t
Crittografia a Chiave Pubblica 71
Test di Solovay-Strassenq (a|n) simbolo di Jacobiq Criterio di Eulero: Sia n un primo dispari.
gcd(a,n) = 1 ⇒ a(n-1)/2 = (a|n) mod n
q Sia n un numero composto dispari.|{a : gcd(a,n) = 1 and a(n-1)/2 = (a|n) mod n}| ≤ φ(n)/2
q Insieme di witness di EuleroWE(n) = {a : gcd(a,n)>1 oppure a(n-1)/2 ≠ (a|n) mod n}
•Alfredo De Santis •04/04/2002
•Corso di Sicurezza su Reti •13
Crittografia a Chiave Pubblica 72
Simbolo di Jacobiq (a|n) = (a|p1)
e1 (a|p2)e2... (a|pk)
ek
0 se p divide a(a|p) = 1 se a è un quadrato mod p
-1 se a non è un quadrato mod pfattorizzazione dispari n = p1
e1 p2e2... pk
ek , pi primo, ei ≥ 0
q Può essere computato con O((log n)2) operazioni su bit– (a|n) = 0 ⇔ gcd(a,n) > 1– a = b mod n ⇒ (a|n) = (b|n)– (ab|n) = (a|n) (b|n)– (2|n) = (-1)(n2-1)/8
– (m|n) = (n|m) (-1)(n-1)(m-1)/4
Simbolo di Legendrep primo
(a|p) = a(p-1)/2 mod p
Crittografia a Chiave Pubblica 73
Simbolo di JacobiPuò essere computato con O((log n) 2) operazioni su bit
– a = b mod n ⇒ (a|n) = (b|n)– (ab|n) = (a|n) (b|n)– (2|n) = (-1)(n2-1)/8
– (m|n) = (n|m) (-1)(n-1)(m-1)/4
Esempio: (158|235) = (2|235) (79|235)= (-1) (235|79) (-1)(78)(234)/4
= (77|79) = (79|77) (-1)(76)(78)/4
= (2|77) = -1
Esempio: (158|235) = (2|235) (79|235)= (-1) (235|79) (-1)(78)(234)/4
= (77|79) = (79|77) (-1)(76)(78)/4
= (2|77) = -1
Crittografia a Chiave Pubblica 74
Test di Miller-Rabinq Insieme di witness di Miller-Rabin
WMR(n) = {a : ar ≠ 1 mod n anda2jr ≠ -1 mod n per ogni j∈[0,s-1]}
q Se n è un primo dispariWMR(n) è vuoto
q Se n è un numero composto dispari (n ≠ 9)| WMR(n) | ≥ (3/4) ·φ(n)
n-1 = 2s r con r disparin-1 = 2s r con r dispari
Crittografia a Chiave Pubblica 75
Witness di Miller-Rabin n=91
q Witness di Miller-Rabin
WMR(91) = {a : a45 ≠ 1 mod 91 anda2j·45 ≠ -1 mod 91 per ogni j∈[0,0]}
q Se n è un numero composto dispari| WMR(n) | ≥ (3/4) ·φ(n)
q Strong liars: elementi in {1,2,…,90} / WMR(91) {1,9,10,12,16,17,22,29,38,53,62,69,74,75,79,81,82,90}
Sono 18 = φ(91)/4 elementi
91-1 = 21 · 4591-1 = 21 · 45
91 = 7·1391 = 791 = 7·1313
Crittografia a Chiave Pubblica 76
Witness di Miller-Rabin n=105
q Witness di Miller-RabinWMR(105) = {a : a13 ≠ 1 mod 105 and
a2j·13 ≠ -1 mod 105 per ogni j∈[0,2]}q Strong liars: elementi in {1,2,…,104} / WMR(105)
{1,104}
Sono solo 2 < 12 = φ(105)/4 elementi
In genere strong liars molto meno di φ(n)/4
105-1 = 23 · 13105-1 = 23 · 13
105 = 3·5 ·7105 = 3105 = 3·55 ·77
Crittografia a Chiave Pubblica 77
Fattorizzazione
Dato n calcolare l’unica fattorizzazionen = p1
e1 p2e2... pk
ek
con pi primo ed ei ≥ 0
Splitting di n: calcolare due interi a,b >1
(fattori non-triviali) tali che n = a·b
•Alfredo De Santis •04/04/2002
•Corso di Sicurezza su Reti •14
Crittografia a Chiave Pubblica 78
Fattorizzazione: un semplice algoritmo
Complessità caso peggiore Θ( )
(accade se n = pq)
Se n ha 512 bit allora
nPer tutti i primi p in [2, ]
Se p|n allora p è fattore di n
n
2n 256≈
Calcolo di un fattore primo:
Crittografia a Chiave Pubblica 79
Fattorizzazione: complessità algoritmi
Complessità di tempo sub-esponenziale in media
Lq[a,c] = O(e(c+o(1))(ln q)a(lnln q)1-a)
con c > 0 ed 0 < a < 1
q Algoritmo basato su curve ellittiche: Ln[ 1/2, 1]
q Quadratic sieve: Ln[ 1/2, 1]
q General number field sieve : Ln[ 1/3, 1.923]il più veloceil più veloce
Crittografia a Chiave Pubblica 80
Quadratic sieve in pratica
qQuadratic sieve è migliore dell’algoritmo basato su curve ellittiche
q Implementazioni del Quadratic sieve
anno numero digit mips per anno1984 71 0.011988 106 1401993 120 8251994 129 5000
RSARSA--1291291600 computer
per 8 mesifactoring by e-mail
1 1 mips mips per anno per anno ≈≈ 3 ·103 ·101313 istruzioni istruzioni
= 425 bit= 425 bitCrittografia a Chiave Pubblica 81
General Number field sieve in praticaq General Number field sieve è migliore del Quadratic
sieve solo per interi di almeno 110-120 cifre decimaliq RSA-130, fattorizzato nel 1996 con 500 mips per
anno q RSA-140, fattorizzato il 2 febbraio 1999, elapsed
time 9 settimaneq RSA-155, fattorizzato il 22 agosto 1999, con 8000
mips per anno, elapsed time 7,4 mesi
512 bit!512 bit!160 175-400 MHz SGI and Sun workstations
8 250 MHz SGI Origin 2000 processors120 300-450 MHz Pentium II PCs
4 500 MHz Digital/Compaq boxes
160 175-400 MHz SGI and Sun workstations8 250 MHz SGI Origin 2000 processors
120 300-450 MHz Pentium II PCs4 500 MHz Digital/Compaq boxes
Crittografia a Chiave Pubblica 82
I numeri più difficili da fattorizzare sono del
tipo n = pq con p,q primi della stessa lunghezza
I numeri più difficili da fattorizzare sono del
tipo n = pq con p,q primi della stessa lunghezza
Calcolo di fattori “piccoli”
Algoritmi per calcolare un fattore p di n:q Algoritmo Rho di Pollard : tempo medio O(√p)
q Algoritmo basato su curve ellittiche: tempo medio
Lp[1/2, √2] = O(e(√2+o(1))(ln q)1/2(lnln q)1/2)
Crittografia a Chiave Pubblica 83
Una strategia generale per fattorizzare
Cerca fattori “piccoli”q Prova divisione per alcuni piccoli primi (2,3,5,7,…) q Prova algoritmo Rho di Pollardq Prova algoritmo basato su curve ellittiche
Cerca fattori “grandi”q Prova Quadratic sieve oppure
General Number field sieve
•Alfredo De Santis •04/04/2002
•Corso di Sicurezza su Reti •15
Crittografia a Chiave Pubblica 84
Che modulo scegliere?
qAd oggi, i numeri più difficili da fattorizzare sono del tipo n = p ·q con p,q primi della stessa lunghezzaq… e di almeno (per essere tranquilli!)
– 768 bit ( = 230 digit) per uso personale– 1024 bit per le aziende– 2048 per chiavi “importanti”
ad esempio Autorità di Certificazione
Crittografia a Chiave Pubblica 85
Intrattabilità della fattorizzazione
La sicurezza di molte tecniche crittografiche si basa sulla intrattabilità della fattorizzazione:
q crittosistema RSA, Rabinq firme digitali RSA q…
Crittografia a Chiave Pubblica 86
Sicurezza di RSA
1. Fattorizza n2. Computa (p-1)(q-1)3. Computa d ← e-1 mod (p-1)(q-1)
1.1. Fattorizza n2.2. Computa (p-1)(q-1)3.3. Computa d ← e-1 mod (p-1)(q-1)
Se potesse fattorizzare…
Crittografia a Chiave Pubblica 87
Sicurezza di RSA
Se potesse computare ϕ(n)=(p-1)(q-1)
potrebbe calcolare d ← e-1 mod (p-1)(q-1)
Crittografia a Chiave Pubblica 88
Se potesse computare ϕ(n)=(p-1)(q-1),
potrebbe calcolare d ← e-1 mod (p-1)(q-1)
n = pq ϕ(n) = (p-1)(q-1)
Due soluzioni: p,q
Sicurezza di RSA
sostituendo p = n/qp2- (n-ϕ(n)+1)p + n = 0
sostituendo p = n/qp2- (n-ϕ(n)+1)p + n = 0
Crittografia a Chiave Pubblica 89
84.773.093 = pq84.754.668 = (p-1)(q-1)
radici: 9539 e 8887
Se potesse computare ϕ(n) = (p-1)(q-1),
potrebbe calcolare d ← e-1 mod (p-1)(q-1)
n = pq ϕ(n) = (p-1)(q-1)
Sicurezza di RSA
sostituendo p = n/qp2- (n-ϕ(n)+1)p + n = 0
sostituendo p = n/qp2- (n-ϕ(n)+1)p + n = 0
p2- 18.426 p + 84.773.093 = 0p2- 18.426 p + 84.773.093 = 0
•Alfredo De Santis •04/04/2002
•Corso di Sicurezza su Reti •16
Crittografia a Chiave Pubblica 90
Sicurezza di RSA
Se potesse computare d …
Crittografia a Chiave Pubblica 91
Sicurezza di RSA
Se potesse computare d … ma questo è
computazionalmente equivalente a fattorizzare!
Crittografia a Chiave Pubblica 92
Un algoritmo che computa d (con input n,e)
può essere usato come oracolo in un algoritmo
Las Vegas che fattorizza n con probabilità ≥1/2
Un algoritmo che computa d (con input n,e)
può essere usato come oracolo in un algoritmo
Las Vegas che fattorizza n con probabilità ≥1/2
Sicurezza di RSA
Se potesse computare d … ma questo è
computazionalmente equivalente a fattorizzare!
Crittografia a Chiave Pubblica 93
Piccoli messaggiq Posso cifrare un solo digit 0,1,… ,9 con RSA ?
C ← Me mod n
Esempio: 125 ← 53 mod 6.012.707
Crittografia a Chiave Pubblica 94
Piccoli messaggiq Posso cifrare un solo digit 0,1,… ,9 con RSA ?
C ← Me mod n
Esempio: 125 ← 53 mod 6.012.707
q Se M < n1/e allora– uso di Digital Envelope– salting del messaggio M
Crittografia a Chiave Pubblica 95
Proprietà moltiplicativa di RSA
Proprietà di omomorfismoC1 = M1
e mod n (M1M2)e = M1e M2
e = C1C2 mod nC2 = M2
e mod n
•Alfredo De Santis •04/04/2002
•Corso di Sicurezza su Reti •17
Crittografia a Chiave Pubblica 96
Decifrazione(d,n)
DecifrazioneDecifrazione(d,n)(d,n)
Proprietà moltiplicativa di RSA
Chosen-ciphertext attack adattivoObiettivo: decifrare C (= Me mod n)
C' ← C ·xe mod n
M' ← (C')d mod n
M ← M' ·x-1 mod n
Scelgo x a caso
M' = (C')d =(C ·xe)d = Cd ·x mod n
C1 = M1e mod n (M1M2)e = M1
e M2e = C1C2 mod n
C2 = M2e mod n
Crittografia a Chiave Pubblica 97
Attacchi ad RSA
qPiccolo esponente pubblico (ad es., e = 3)– Stesso messaggio inviato a più utenti
qAttacchi ad implementazioni:– Timing Attack– Random Faults– Attacco di Bleichenbacher [1998 ] su PKCS 1 (vecchia
versione): uso del Web browser come oracolo!
02 Random 00 M02 02 Random Random 00 M00 M
16 bit16 bit
Crittografia a Chiave Pubblica 98
Informazioni parziali per RSA
Dato C– potrebbero esserci informazioni parziali
sul messaggio M “facili” da ottenere (senza dover decifrare C ! )
– e … “difficili” ?
hard bit : ultimi c ·loglog n bit
C = Me mod nC = Me mod n
Crittografia a Chiave Pubblica 99
Un bit “facile” per RSA
E’ facile calcolare il simbolo di Jacobi del testo in chiaro
(C|n) = (Me|n) = (M|n)e = (M|n)
C = Me mod nC = Me mod n
Crittografia a Chiave Pubblica 100
Un bit “difficile” per RSA
0 se M < n/2halfn,e(C) =
1 se M > n/2
Crittografia a Chiave Pubblica 101
Un bit “difficile” per RSA
0 se M < n/2halfn,e(C) =
1 se M > n/2
Calcolare halfn,e( ·) è computazionalmente equivalente ad invertire RSA
Calcolahalfn,e(·)CalcolaCalcolahalfn,e(·)
halfn,e(C)CDecifran,eDecifraDecifrann,e,e MC
Calcolahalfn,e( ·)CalcolaCalcolahalfn,e( ·)
•Alfredo De Santis •04/04/2002
•Corso di Sicurezza su Reti •18
Crittografia a Chiave Pubblica 102
Un bit “difficile” per RSA
0 se M < n/2halfn,e(C) =
1 se M > n/2
00 n/2n/2 nn
halfn,e(C) = 00 11
M∈
Crittografia a Chiave Pubblica 103
Un bit “difficile” per RSA
0 se M < n/2halfn,e(C) =
1 se M > n/2
C ← C ·(2e mod n) C´= (2 ·M)e mod n
00 n/4n/4 n/2n/2 3n/43n/4 nn
halfn,e(C´) = 00 00 1111
M∈
Crittografia a Chiave Pubblica 104
Un bit “difficile” per RSA
0 se M < n/2halfn,e(C) =
1 se M > n/2
C´´← C ·(4e mod n) C´´= (4 ·M)e mod n
00 n/4n/4 n/2n/2 3n/43n/4 nn
halfn,e(C´´) = 00 00 1111
M∈ n/8n/8 3n/83n/8 5n/85n/8 7n/87n/8
00 00 1111
Crittografia a Chiave Pubblica 105
Un bit “difficile” per RSA
q Ricerca binaria
q Dopo log n chiamate ad halfn,e( ·)l’intervallo consta di un solo valore
Crittografia a Chiave Pubblica 106
Predicato paritàparitàn,e(C) = bit meno significativo di MI predicati paritàn,e( ·) e halfn,e( ·)sono computazionalmente equivalenti
halfn,e(Me mod n) = paritàn,e((2M)e mod n)
C = Me mod nC = Me mod n
halfn,e(C) = paritàn,e( C (2e mod n) mod n )
paritàn,e(C) = halfn,e( C ((2-1)e mod n) mod n )
halfn,e(C) = paritàn,e( C (2e mod n) mod n )
paritàn,e(C) = halfn,e( C ((2-1)e mod n) mod n ) Crittografia a Chiave Pubblica 107
Crittografia probabilistica
Testo in chiaro M = M1 M2 M3 … Testo cifrato C = C1 C2 C3 …
Mi = predicato_difficile (Ci)
•Alfredo De Santis •04/04/2002
•Corso di Sicurezza su Reti •19
Crittografia a Chiave Pubblica 108
Alcuni Crittosistemi a chiave pubblica
q RSA [1977] (fattorizzazione)q Merkle-Hellman [1978] (zaino 0-1)
– Molte varianti… rotte! Resiste Chor-Rivest [1988]q Rabin [1979] (fattorizzazione)q McEliece [1978] (decodifica codici lineari) q El-Gamal [1984] (logaritmo discreto)q Uso di curve ellittiche [1985]
curve iperellittiche [1989]automi cellulari [1985]
rotto!rotto!
Crittografia a Chiave Pubblica 109
Funzioni one-way
“Facili” da calcolare e
“difficili” da invertire
Crittografia a Chiave Pubblica 110
Funzioni one-way trapdoor
“Facili” da calcolare e
“difficili” da invertire
… a meno che si conoscauna “trapdoor”
Crittografia a Chiave Pubblica 111
Alcuni brevetti software (USA)
numero oggetto inventore scadenza3.962.539 DES Ehrsam ed al. 19934.200.770 Diffie-Hellman Hellman, Diffie, Merkle 19974.218.582 Critt. chiave pubblica Helman, Merkle 19974.424.414 Pohling-Hellman Hellman, Pohling 3 gen 20014.405.829 RSA Rivest, Shamir, Adleman 20 sett 20004.748.668 Shamir-Fiat Shamir, Fiat 20054.850.017 Vettori di controllo Matyas, Meyer, Bracht 20065.140.634 Guillou-Quisquater Guillou-Quisquater 20095.231.668 DSA Kravitz 20105.214.703 IDEA Massey-Lai 20105.276.737 Fair Cryptosystems Micali 2011
Crittografia a Chiave Pubblica 112
Export dagli USAInternational Traffic in Arms Regulations (ITAR) [1989]q United States Munitions Listq Strong encryption
– RSA ≥ 512 bit– cifrari a blocco (DES, IDEA, RC6,…) ≥40 bit
q eccetto se limitato a – controllo accessi (ad es., ATM)– autenticazione dati (ad es., MAC, firme)
q Permesso dal Department of Commerce, ad es. Cybercash, cifratura RSA 768 bit per transazioni finanziarie
non deve essere facilmente non deve essere facilmente utilizzabile per cifrare!utilizzabile per cifrare!