Accordo su chiavi - Dipartimento di Informatica

Accordo su una chiave
Accordo su chiavi
(key agreement)
…
Alfredo De Santis
Bob
Alice
Dipartimento di Informatica ed Applicazioni
Università di Salerno
[email protected]
Marzo 2012
K
http://www.dia.unisa.it/professori/ads
??
K
1
Diffie-Hellman [1976]
Accordo su chiavi: indice
! Diffie-Hellman
Whitfield Diffie
Martin Hellman
! Basato sull’intrattabilità del problema del
logaritmo discreto
Stanford University
! Puzzle di Merkle
! Non basato su alcuna assunzione
computazionale
W. Diffie and M.E. Hellman,
New directions in cryptography,
IEEE Trans. on Inform. Theory 22
(1976), 644-654.
2
3
Generatori di Zp*
Diffie-Hellman [1976]
g è generatore di Zp* se { gi | 1 ! i ! p-1 } = Zp*
primo p, generatore g di Zp*
210 = 1024 = 1 mod 11
21
= 2 mod 11
28 = 256 = 3 mod 11
22
= 4 mod 11
24 = 16
= 5 mod 11
29 = 512 = 6 mod 11
27 = 128 = 7 mod 11
23
= 8 mod 11
26 = 64
= 9 mod 11
25 = 32
= 10 mod 11
Esempio:
Bob
Alice
g = 2 è un
generatore
di Z11*
??
4
Generatori di Zn*
5
Generatori di Zn*
!  Ordine di %"Zn* = il più piccolo intero positivo r
tale che %r = 1 mod n
!  % è generatore di Zn* se ha ordine $(n)
!  Ordine di %"Zn* = il più piccolo intero positivo r
tale che %r = 1 mod n
!  % è generatore di Zn* se ha ordine $(n)
Teorema di Eulero
x"Zn* # x$(n)=1 mod n
Teorema di Eulero
x"Zn* # x$(n)=1 mod n
!  Zn* ha un generatore
&
n = 2,4,pk,2pk, con p primo e k'1
!  Se p è primo, allora Zp* ha un generatore
6
7
Potenze in Z19*
a
a2
a3
1
1
1
2
4
8
3
9
8
4
16
5
6
7
a4
a5
a6
a7
a8
1
1
16
13
5
7
6
17
a12
a13
a14
a15
a16
a17
a18
1
1
1
1
1
7
14
9
18
17
1
1
1
15
11
3
1
1
6
12
1
1
1
5
10
15
7
2
6
18
16
10
11
14
4
1
12
17
13
9
17
11
6
5
1
4
16
7
9
17
1
11
6
5
1
11
17
9
7
16
4
1
7
4
5
11
9
16
1
5
6
6
11
17
17
7
4
9
7
16
4
1
5
11
9
16
11
1
7
11
1
7
11
1
7
11
1
1
7
11
1
7
11
8
7
18
11
12
1
8
7
18
11
12
1
1
8
7
18
11
12
9
5
7
6
16
11
4
17
1
9
1
5
7
6
16
11
4
17
10
5
12
6
3
11
15
17
18
1
9
14
7
13
16
8
4
2
1
11
7
1
11
7
1
11
7
1
11
7
1
11
7
1
11
7
1
12
11
18
7
8
1
12
11
18
7
8
1
12
11
18
7
8
1
13
17
14
6
12
4
8
17
14
11
10
7
10
16
18
6
2
7
15
5
8
9
3
1
3
4
18
5
13
11
2
9
12
16
15
1
15
16
16
12
9
11
9
2
5
4
11
13
5
18
4
3
7
10
17
8
6
14
1
7
17
6
1
16
9
11
5
4
7
17
6
17
4
11
16
1
Barbara
– Università
6
7 Masucci
5
9 - DIA
1 17
4 11 di16Salerno
6
7
5
9
18
1
18
1
1
18
1
18
1
a9
18
a10
1
a11
18
1
18
1
18
1
18
1
a15
a16
a17
a18
Generatori di Zn*
!  Ordine di %"Zn* = il più piccolo intero positivo r
tale che %r = 1 mod n
!  a è generatore di Zn* se ha ordine $(n)
!  Se % è un generatore di Zn*, allora
!  Zn* = {%i mod n | 0 ! i ! $(n)-1}
!  b = %i mod n è un generatore di Zn* & gcd(i,$(n))=1
8
Potenze in Z19*
a
a2
a3
1
1
1
2
4
8
3
9
8
4
16
5
6
7
11
8
7
9
5
10
a4
a5
a6
a7
a8
1
1
16
13
5
7
6
17
a12
a13
a14
1
1
1
1
1
7
14
9
18
17
1
1
1
1
1
1
1
1
15
11
3
6
12
5
10
15
7
2
6
18
16
1
10
11
14
4
12
17
13
9
17
11
6
5
1
4
1
16
7
9
17
11
6
5
1
11
17
9
7
16
4
1
7
4
5
11
9
16
1
5
6
11
17
9
7
16
4
1
6
17
7
4
5
11
9
16
1
1
7
11
1
7
11
18
11
12
1
8
7
1
7
11
1
7
11
1
7
11
1
18
11
12
1
8
7
18
11
12
7
6
16
11
4
17
1
1
9
5
7
6
16
11
4
17
5
12
6
3
11
15
1
17
18
9
14
7
13
16
8
4
2
11
7
1
11
7
1
1
11
7
1
11
7
1
11
7
1
11
7
12
11
18
7
8
1
1
12
11
18
7
8
1
12
11
18
7
8
13
17
12
4
1
14
11
10
16
18
6
2
7
15
5
8
9
3
14
6
8
1
17
10
7
3
4
18
5
13
11
2
9
12
16
15
15
16
1
12
9
2
11
13
5
18
4
3
7
10
17
8
6
14
16
1
9
11
5
4
7
17
6
1
16
9
11
5
4
7
17
6
1
17
4
11
16
Barbara
– Università
6
7 Masucci
5
9 - DIA
1 17
4 11 di16Salerno
6
7
5
9
1
18
1
18
1
1
18
1
18
1
18
1
a9
18
a10
1
a11
18
1
18
1
18
Esempio:
2 è un generatore in Z19*
•  3=213 mod 19 è un generatore perchè gcd(13,6)=1
•  13=25 mod 19 è un generatore perchè gcd(5,6)=1
•  5=216 mod 19 non è un generatore perchè gcd(16,6)=2
9
Generatori di Zn*
! Il numero di generatori di Zn* è $($(n))
! Se p è primo, il numero di generatori di Zp* è $(p-1)
10
11
Diffie-Hellman [1976]
Diffie-Hellman [1976]
primo p, generatore g di Zp*
scelgo x"Zp
scelgo x"Zp
scelgo y"Zp
primo p, generatore g
scelgo y"Zp
gx mod p
Alice
??
Bob
Alice
Bob
??
12
Diffie-Hellman [1976]
scelgo x"Zp
primo p, generatore g
13
Diffie-Hellman [1976]
scelgo x"Zp
scelgo y"Zp
gx mod p
primo p, generatore g
gx mod p
gy mod p
Alice
scelgo y"Zp
??
gy mod p
Alice
Bob
K = gxy mod p
= (gy)x mod p
14
??
Bob
K = gxy mod p
= (gx)y mod p
15
Diffie-Hellman:
“piccolo” esempio
scelgo x=3
primo 11, generatore 2
Diffie-Hellman:
esempio
scelgo y=4
scelgo
x=3578
5 = 24 mod 11
7984 = 219956 mod 25307
Bob
??
K=4=(24)3 mod 11
scelgo
y=19956
6113 = 23578 mod 25307
8 = 23 mod 11
Alice
primo 25307, generatore 2
Alice
??
K=3694=79843578
K=4=(23)4 mod 11
Bob
K=3694=611319956
16
Logaritmo discreto:
Logaritmo discreto
Complessità algoritmi
La sicurezza di molte tecniche crittografiche si basa
sulla intrattabilità del logaritmo discreto:
!  Crittosistema
Dati a,n,b calcolare x tale che ax = b mod n
Vari algoritmi:
ElGamal
!  Trial multiplication
!  Baby-step giant-step
!  Pollard’s rho algorithm
!  Pohlig-Hellman algorithm
!  Index Calculus
!  Accordo su chiavi Diffie-Hellman
!  Firme
digitali DSS
Dati a,n,b calcolare x tale che ax = b mod n
Esempio: 3x = 7 mod 13
17
soluzione x = 6
18
19
Logaritmo discreto:
Logaritmo discreto:
Complessità algoritmi
record computazioni
Dati a,n,b calcolare x tale che ax = b mod n
Dati a,n,b calcolare x tale che ax = b mod n
Se n è primo, i migliori algoritmi hanno complessità
Ln[a,c] = O(e(c+o(1))(ln n)
a
(lnln n)
1-a
!  130-digit, 431-bit: giugno 2005, A. Joux e R. Lecier
!  3 settimane, 1.15 GHz 16-processor HP AlphaServer GS1280
)
!  160-digit, 530-bit, febbraio 2007, T. Kleinjung
con c > 0 ed 0 < a < 1
!  Vari pc ed un cluster
!  GF(2613), settembre 2005, A. Joux e R. Lercier
!  17 giorni, 4 nodi 1.3GHz 16-processori di un Itanium 2-based
Bull computer Teranova
Miglior algoritmo: Number field sieve
tempo medio euristico
Ln[1/3, 1.923]
!  GF(36"71), 676-bit, 2010, T. Hayashi,
1/3
! 64 $
# & = 1, 922999
"9%
20
Problema di
Diffie-Hellman
21
Problema di
Diffie-Hellman
Input: primo p, generatore g,
gx mod p, gy mod p
Calcolare: gxy mod p
Input: primo p, generatore g,
gx mod p, gy mod p
Calcolare: gxy mod p
Il miglior algoritmo conosciuto calcola prima
il logaritmo discreto x ( logg,p(gx mod p)
Il miglior algoritmo conosciuto calcola prima
il logaritmo discreto x ( logg,p(gx mod p)
… ma non si sa se sono equivalenti!
22
23
Scelta dei parametri
Scelta di un generatore
! Come scegliere p e g?
Scegli_Generatore_Naive (p)
1. Scegli a caso g in Zp*
2. If {gi|1!i! p-1} = Zp*
then trovato
else goto 1.
24
25
Scelta di un generatore
Scelta di un generatore
p primo, p-1 = p1e1 p2e2… pkek
g è un generatore di
Scegli_Generatore_Naive (p)
1. Scegli a caso g in Zp*
2. If {gi|1!i! p-1} = Zp*
Zp*
&
g(p-1)/p1 ) 1 mod p
...
g(p-1)/pk ) 1 mod p
{g |1!i!p-1} = Zp* ?
i
then trovato
else goto 1.
L’unico algoritmo
efficiente necessita
dei fattori primi di
p-1
26
27
Scelta di un generatore
p primo, p-1 = p1e1 p2e2… pkek
g è un generatore di
Zp*
&
Scelta di un generatore
p primo, p-1 = p1e1 p2e2… pkek
g(p-1)/p1 ) 1 mod p
...
g(p-1)/pk ) 1 mod p
g è un generatore di
#  11 primo, p-1 = 10 = 2·5
Esempio
*
#  2 è un generatore di Z11 perché
2(11-1)/2 = 25 = 10 ) 1 mod 11
2(11-1)/5 = 22 = 4 ) 1 mod 11
Zp*
&
g(p-1)/p1 ) 1 mod p
...
g(p-1)/pk ) 1 mod p
#  11 primo, p-1 = 10 = 2·5
Esempio
*
#  3 non è un generatore di Z11 perché
3(11-1)/2 = 35 = 243 = 1 mod 11
3(11-1)/5 = 32 = 9 ) 1 mod 11
28
Probabilità successo
singola iterazione
Scelta di un generatore
p primo, p-1 = p1e1 p2e2… pkek
g è un generatore di
Zp*
&
29
! Numero di generatori modulo un primo p è
g(p-1)/p1 ) 1 mod p
...
g(p-1)/pk ) 1 mod p
$($(p)) = $(p-1)
> (p-1) / (6 ·lnln(p-1))
per ogni intero n'5,
$(n) > n/(6lnln n)
Scegli_generatore ( p, (p1,e1,p2,e2,…,pk,ek) )
1. g ( elemento scelto a caso in Zp*
2. if (g(p-1)/p1 ) 1 mod p and … and g(p-1)/pk ) 1 mod p)
then esci
trovato!
else go to 1.
30
31
Probabilità successo
singola iterazione
Analisi di Scegli_generatore
!  Numero di generatori modulo un primo p è
$($(p)) = $(p-1)
> (p-1) / (6 ·lnln(p-1))
Numero medio di iterazioni < 6 ·lnln(p -1)
per ogni intero n'5,
$(n) > n/(6lnln n)
!  Probabilità che un elemento a caso in Zp* sia generatore
=
$($(p))
$(p)
>
p-1
$(p) · 6lnln(p -1)
=
1
6 ·lnln(p -1)
512 bit
6 ·lnln(2512) * 35,23
1024 bit
6 ·lnln(21024) * 39,38
2048 bit
6 ·lnln(22048) * 43,54
32
Generazione chiavi
Diffie-Hellman
33
Accordo su chiave
Diffie-Hellman: sicurezza
1.  Scegli a caso 2 numeri primi p1 p2
! E’ sicuro contro attaccanti passivi
2.  p ( 1 + 2p1p2
3.  Se p non è primo, go to 1.
4.  g ( Scegli_generatore(p,(2,1,p1,1,p2 ,1))
34
! Non è sicuro contro attacchi
man-in-the-middle
35
Diffie-Hellman
Accordo su chiave
Diffie-Hellman: sicurezza
attacco man-in-the-middle
primo p, generatore g di Zp*
scelgo x"Zp
scelgo z"Zp
gx
mod p
scelgo y"Zp
! E’ sicuro contro attaccanti passivi
gz mod p
! Non è sicuro contro attacchi
man-in-the-middle
! Occorre autenticazione
gy mod p
Alice
gxz
KA =
mod p
= (gz)x mod p
Bob
gz mod p
KA = gxz mod p
= (gx)z mod p
KB = gzy mod p
= (gy)z mod p
KB = gzy mod p
= (gz)y mod p
36
37
Schema di Merkle
Accordo su chiavi: indice
Ralph C. Merkle
! Diffie-Hellman
! Basato sull’intrattabilità del problema del
logaritmo discreto
Corso di Computer Security, UC
Berkeley, autunno 1974:
proposta per un progetto, rifiutata
dal docente
! Puzzle di Merkle
http://merkle.com/1974/
! Non basato su alcuna assunzione
computazionale
Merkle, R. C.,
"Secure Communications over
Insecure Channels".
Communications of the ACM, vol.
21, n. 4, April 1978, pp. 294–299.
38
39
Puzzle di Merkle
Schema di Merkle
! Non basato su assunzioni computazionali
! Alice genera n chiavi distinte e “nasconde” ogni
chiave in un puzzle
! Il puzzle contiene informazioni per il calcolo della
chiave
! La soluzione di un puzzle richiede un tempo
ragionevole
! La soluzione di tutti i puzzle richiede un tempo
elevato
! Puzzle la cui soluzione richiede t operazioni
! Esempio:
Puzzle (x, ID, S)
Scegli una chiave k di 56 bit
Computa y ( CBC-DESk(x, ID, S)
return (y, primi 20 bit di k)
!  x è la soluzione del puzzle
-Richiede 235 operazioni in media
!  ID è l’identificativo del puzzle
-Unico per ciascun puzzle
!  S è un valore noto
-Serve per garantire l’unicità della soluzione del puzzle
-Esempio: 32 bit nulli
40
Puzzle di Merkle
Scegli x1, …, xn, ID1, …, IDn
Puzzlei(Puzzle(xi,IDi,S)
Puzzle di Merkle
Risolvi Puzzlej
Ottieni (xj, IDj)
Computazioni di
Computazioni di
IDj
xj
tempo +(n)
:
! Risoluzione di un puzzle
Bob
??
:
! Costruzione di n puzzle
Puzzle1, …, Puzzlen
Alice
41
Computazioni di
:
! Risoluzione di n/2 puzzle in media
xj
42
tempo +(t)
tempo +(t·n)
43
Puzzle di Merkle
Puzzle di Merkle
Computazioni di
:
! Costruzione di n puzzle
Computazioni di
Se n = +(t)
tempo +(n)
:
! Risoluzione di un puzzle
Computazioni di
problema di sicurezza
! Implementazione poco accorta potrebbe
rendere insicuro lo schema
! Esempio:
tempo +(n)
Puzzle (x, ID, S)
Scegli una chiave k di 56 bit
Computa y ( DESk(x), DESk(ID), DESk(S)
return (y, primi 20 bit di k)
!  x è la soluzione del puzzle
-Richiede 235 operazioni in media
:
!  ID è l’identificativo del puzzle
! Risoluzione di n/2 puzzle in media
-Unico per ciascun puzzle
tempo +(n2)
!  S è un valore noto
-Serve per garantire l’unicità della soluzione del puzzle
-Esempio: 32 bit nulli
44
45
Puzzle di Merkle
Puzzle di Merkle
Scegli x1, …, xn, ID1, …, IDn
Puzzlei(Puzzle(xi,IDi,S)
problema di sicurezza
! Implementazione poco accorta potrebbe
rendere insicuro lo schema
Risolvi Puzzlej
Ottieni (xj, IDj)
Puzzle1, …, Puzzlen
! Esempio:
IDj
Alice
xj
+(n)
! 
! 
! 
! 
! 
Bob
??
xj
46
Puzzle (x, ID, S)
Scegli una chiave k di 56 bit
Computa y ( DESk(x), DESk(ID), DESk(S)
return (y, primi 20 bit di k)
Dopo aver visto IDj
Cifra DESk(IDj) con tutte le possibili chiavi k
Correla le cifrature con tutti i Puzzle visti
Trova il Puzzle con IDj
Decifra il corrispondente DESk(x)
47
Puzzle di Merkle
Bibliografia
problema di sicurezza
! Cryptography and Network Security
by W. Stallings (2010)
! Implementazione poco accorta potrebbe
rendere insicuro lo schema
! Esempio:
Puzzle (x, ID, S)
Scegli una chiave k di 56 bit
Computa y ( DESk(x), DESk(ID), DESk(S)
return (y, primi 20 bit di k)
! cap. 1O
NO
! Accordo su chiavi
Meglio:
!  DESk(x), DESk(ID ! x), DESk(S ! x) con S!0
!  DESk(x), DESx(ID), DESx(S)
!  AESk(x, ID, S)
!  Bene per x di 64 bit (con ID ed S di 32 bit)
!  Per x di 128 bit si può usare 2 volte lo schema
! Tesina di Sicurezza su reti
48
Domande?
50
49