Crittosistema di ElGamal - Dipartimento di Informatica ed Applicazioni
Crittosistema di ElGamal - Dipartimento di Informatica ed Applicazioni
Crittosistema di ElGamal - Dipartimento di Informatica ed Applicazioni
Trasformi i suoi PDF in rivista online e aumenti il suo fatturato!
Ottimizzi le sue riviste online per SEO, utilizza backlink potenti e contenuti multimediali per aumentare la sua visibilità e il suo fatturato.
<strong>Crittosistema</strong> <strong>ElGamal</strong><br />
Alfr<strong>ed</strong>o De Santis<br />
<strong>Dipartimento</strong> <strong>di</strong> <strong>Informatica</strong> <strong>ed</strong> <strong>Applicazioni</strong><br />
Università <strong>di</strong> Salerno<br />
ads@<strong>di</strong>a.unisa.it<br />
http://www.<strong>di</strong>a.unisa.it/professori/ads<br />
Alice<br />
chiave privata<br />
kpriv<br />
Cifratura<br />
file pubblico<br />
utente chiave pubblica<br />
Alice kpub<br />
… …<br />
canale insicuro<br />
Devo cifrare il messaggio<br />
M <strong>ed</strong> inviarlo ad Alice<br />
Marzo 2012<br />
Bob<br />
2<br />
Alice<br />
Alice<br />
Cifrari asimmetrici<br />
chiave privata<br />
kpriv<br />
chiave privata<br />
kpriv<br />
file pubblico<br />
utente chiave pubblica<br />
Alice kpub<br />
… …<br />
Cifratura<br />
file pubblico<br />
utente chiave pubblica<br />
Alice kpub<br />
… …<br />
canale insicuro<br />
C<br />
Cifratura <strong>di</strong> M per Alice<br />
C ← CIFRA (kpub, M)<br />
Bob<br />
1<br />
3
Devo decifrare il<br />
messaggio cifrato C<br />
Alice<br />
Decifratura<br />
file pubblico<br />
utente chiave pubblica<br />
Alice kpub<br />
… …<br />
<strong>Crittosistema</strong> <strong>di</strong> <strong>ElGamal</strong><br />
! Taher Elgamal<br />
! Sicurezza basata<br />
sull’intrattabilità del<br />
problema del logaritmo<br />
<strong>di</strong>screto<br />
??<br />
C?<br />
Taher El Gamal,<br />
A Public Key Cryptosystem and a Signature Scheme Bas<strong>ed</strong> on Discrete Logarithms<br />
IEEE Transactions and Information Theory, vol. IT-31, No. 4, Jul. 1985.<br />
4<br />
6<br />
chiave privata<br />
kpriv<br />
Alice<br />
Decifratura<br />
file pubblico<br />
utente chiave pubblica<br />
Alice kpub<br />
… …<br />
Decifratura <strong>di</strong> C<br />
M ← DECIFRA (kpriv, C)<br />
C<br />
<strong>Crittosistema</strong> <strong>di</strong> <strong>ElGamal</strong><br />
! Utilizza il concetto <strong>di</strong> generatore <strong>di</strong> Z p *<br />
! p primo<br />
! g è generatore <strong>di</strong> Z p* se {g i |1≤i≤ p-1} = Z p*<br />
5<br />
7
chiave privata<br />
α ∈ Z p<br />
Alice<br />
Chiavi <strong>ElGamal</strong><br />
file pubblico<br />
utente chiave pubblica<br />
A (p, g, β)<br />
… …<br />
p primo<br />
g generatore <strong>di</strong> Zp* (comuni a tutti)<br />
β =g α mod p<br />
Cifratura <strong>ElGamal</strong><br />
C<br />
Cifratura <strong>di</strong> M per Alice<br />
y 1 ← g k mod p<br />
y 2 ← M β k mod p<br />
C ← (y 1,y 2)<br />
utente chiave pubblica<br />
A (p, g, β=g α )<br />
… …<br />
Bob<br />
k ∈ Z p<br />
8<br />
10<br />
Cifratura <strong>ElGamal</strong><br />
Devo cifrare il messaggio M<br />
<strong>ed</strong> inviarlo ad Alice<br />
file pubblico<br />
utente chiave pubblica<br />
A (p, g, β=g α )<br />
… …<br />
Bob<br />
Decifratura <strong>ElGamal</strong><br />
Devo decifrare il<br />
messaggio cifrato C<br />
Alice<br />
utente chiave pubblica<br />
A (p, g, β=g α )<br />
… …<br />
C<br />
??<br />
C?<br />
9<br />
11
Decifratura <strong>ElGamal</strong><br />
chiave privata<br />
α<br />
utente chiave pubblica<br />
A (p, g, β=g α )<br />
… …<br />
Decifratura <strong>di</strong> C = (y 1,y 2)<br />
z"←"y 1 α mod p<br />
M ← z -1 · y 2 mod p<br />
Alice Cifratura <strong>di</strong> M per Alice<br />
y1 ← g<br />
12<br />
k mod p<br />
y2 ← M βk mod p<br />
C ← (y1 ,y2 )<br />
(435, 2396)<br />
“Piccolo” esempio:<br />
Cifratura <strong>ElGamal</strong><br />
Cifratura <strong>di</strong> M = 1299 per A<br />
y 1 ← 2 853 mod 2579 = 435<br />
y 2 ← 1299·949 853 mod 2579 = 2396<br />
C ← (435, 2396)<br />
utente chiave pubblica<br />
A (p=2579,g=2, β=949)<br />
… …<br />
Bob<br />
853<br />
14<br />
chiave privata<br />
α=765<br />
Alice<br />
chiave privata<br />
α=765<br />
Alice<br />
“Piccolo” esempio:<br />
Chiavi <strong>ElGamal</strong><br />
utente chiave pubblica<br />
A (p=2579,g=2, β=949)<br />
… …<br />
β = 2 765 mod 2579 = 949<br />
“Piccolo” esempio:<br />
Decifratura <strong>ElGamal</strong><br />
utente chiave pubblica<br />
A (p=2579,g=2, β=949)<br />
…<br />
Decifratura <strong>di</strong> C = (435, 2396)<br />
1299 ← 2396(435 –765 ) mod 2579<br />
(435, 2396)<br />
13<br />
15
Correttezza<br />
z -1 · y 2<br />
Decifratura <strong>ElGamal</strong><br />
= (y 1 α ) -1 y2 z=y 1 α<br />
= (g kα ) -1 y 2 y 1 =g α<br />
= (g kα ) -1 M β k y 2 =M β k<br />
utente chiave pubblica<br />
A (p, g, β=g α )<br />
… …<br />
Decifratura <strong>di</strong> C = (y 1,y 2)<br />
z"←"y 1 α mod p<br />
M ← z -1 · y 2 mod p<br />
Alice Cifratura <strong>di</strong> M per Alice<br />
y1 ← g<br />
16<br />
k mod p<br />
y2 ← M βk = (g<br />
mod p<br />
C ← (y1 ,y2 )<br />
kα ) -1 M gαk β=gα = M<br />
M<br />
k<br />
y 1 =g k<br />
y 2=M β k<br />
Esempio: Cifratura <strong>ElGamal</strong><br />
18<br />
Esempio: Chiavi <strong>ElGamal</strong><br />
Primo p <strong>di</strong> 155 bit<br />
p<br />
g<br />
α<br />
β=g α<br />
Esempio: Decifratura <strong>ElGamal</strong><br />
M<br />
k<br />
y 1 =g k<br />
y 2=M β k<br />
-α<br />
y1 y2<br />
17<br />
19
Sicurezza <strong>di</strong> <strong>ElGamal</strong><br />
Sicurezza della chiave privata<br />
(y 1,y 2)<br />
Sicurezza del testo in chiaro<br />
! Decifrazione<br />
! In<strong>di</strong>stinguibilità <strong>di</strong> due testi in chiaro<br />
Sicurezza <strong>di</strong> <strong>ElGamal</strong><br />
Sicurezza della chiave privata<br />
(y 1,y 2)<br />
Sicurezza del testo in chiaro<br />
! Decifrazione<br />
! In<strong>di</strong>stinguibilità <strong>di</strong> due testi in chiaro<br />
20<br />
22<br />
Sicurezza chiave privata<br />
Conoscendo (p, g, β) e sapendo che β = g α mod p<br />
vuole calcolare α<br />
Cioè il logaritmo <strong>di</strong>screto <strong>di</strong><br />
β = g α mod p<br />
Sicurezza testo in chiaro<br />
decifrazione<br />
Conoscendo (p, g, β), dove β = g α mod p,<br />
e C=(y 1 ,y 2), dove y 1 ← g k mod p e y 2 ← M β k mod p<br />
vuole calcolare M<br />
Equivalente a risolvere il problema <strong>di</strong><br />
Diffie-Hellman<br />
21<br />
23
Problema <strong>di</strong><br />
Diffie-Hellman<br />
Input: primo p, generatore g,<br />
g x mod p, g y mod p<br />
Calcolare: g xy mod p<br />
Il miglior algoritmo conosciuto calcola prima<br />
il logaritmo <strong>di</strong>screto x ← log g,p(g x mod p)<br />
… ma non si sa se sono equivalenti!<br />
Sicurezza testo in chiaro<br />
decifrazione<br />
Voglio<br />
risolvere:<br />
p primo, g generatore<br />
β = g α mod p<br />
y 1 ← g k mod p<br />
y 2 ← M β k mod p<br />
Input: primo p, generatore g,<br />
g x mod p, g y mod p<br />
Calcolare: g xy mod p<br />
Posso usarlo per risolvere il problema <strong>di</strong> Diffie Hellman!<br />
M<br />
24<br />
26<br />
Sicurezza testo in chiaro<br />
decifrazione<br />
Assumiamo che esiste un algoritmo efficiente<br />
p primo, g generatore<br />
β = g α mod p<br />
y 1 ← g k mod p<br />
y 2 ← M β k mod p<br />
Posso usarlo per risolvere il problema <strong>di</strong> Diffie Hellman!<br />
Sicurezza testo in chiaro<br />
decifrazione<br />
Voglio<br />
risolvere:<br />
p primo, g generatore<br />
β = g x mod p<br />
y 1 ← g y mod p<br />
y 2 ← M g xy mod p<br />
Input: primo p, generatore g,<br />
g x mod p, g y mod p<br />
Calcolare: g xy mod p<br />
Posso usarlo per risolvere il problema <strong>di</strong> Diffie Hellman!<br />
M<br />
M<br />
25<br />
27
Sicurezza testo in chiaro<br />
decifrazione<br />
Voglio<br />
risolvere:<br />
p primo, g generatore<br />
β = g x mod p<br />
y 1 ← g y mod p<br />
y 2 ← M g xy mod p<br />
Input: primo p, generatore g,<br />
g x mod p, g y mod p<br />
Calcolare: g xy mod p<br />
Posso usarlo per risolvere il problema <strong>di</strong> Diffie Hellman!<br />
Sicurezza testo in chiaro<br />
decifrazione<br />
Voglio<br />
risolvere:<br />
p primo, g generatore<br />
β = g x mod p<br />
y 1 ← g y mod p<br />
y 2 ← valore a caso in Z p *<br />
Input: primo p, generatore g,<br />
g x mod p, g y mod p<br />
Calcolare: g xy mod p<br />
M<br />
y 2 / g xy mod p<br />
M<br />
28<br />
y 2 / g xy mod p<br />
Posso usarlo per risolvere il problema <strong>di</strong> Diffie Hellman!<br />
! Calcolo l’inverso mod p dell’output dell’algoritmo (ottengo g xy / y 2 )<br />
! Moltiplico per y 2 (ottengo g xy mod p)<br />
30<br />
Sicurezza testo in chiaro<br />
decifrazione<br />
Voglio<br />
risolvere:<br />
p primo, g generatore<br />
β = g x mod p<br />
y 1 ← g y mod p<br />
y 2 ← valore a caso in Z p*<br />
Input: primo p, generatore g,<br />
g x mod p, g y mod p<br />
Calcolare: g xy mod p<br />
Posso usarlo per risolvere il problema <strong>di</strong> Diffie Hellman!<br />
Sicurezza <strong>di</strong> <strong>ElGamal</strong><br />
Sicurezza della chiave privata<br />
(y 1,y 2)<br />
Sicurezza del testo in chiaro<br />
! Decifrazione<br />
M<br />
y 2 / g xy mod p<br />
! In<strong>di</strong>stinguibilità <strong>di</strong> due testi in chiaro<br />
(sicurezza semantica)<br />
29<br />
31
Sicurezza semantica<br />
Generazione (PK,SK)<br />
b ← {0,1}<br />
A vince se b=b’.<br />
PK<br />
(m0,m1) A<br />
C=EPK (mb )<br />
Il crittosistema è sicuro semanticamente se ogni efficiente A vince con<br />
probabilità
Sicurezza <strong>di</strong> <strong>ElGamal</strong><br />
Il crittosistema <strong>di</strong> <strong>ElGamal</strong> è semanticamente<br />
sicuro, se vale la DDH.<br />
Prova. Se esistesse un algoritmo efficiente<br />
che rompe la sicurezza semantica allora lo<br />
posso usare per risolvere la DDH<br />
Sicurezza <strong>di</strong> <strong>ElGamal</strong><br />
Il crittosistema <strong>di</strong> <strong>ElGamal</strong> è semanticamente sicuro, se<br />
vale la DDH.<br />
Prova. Se esistesse un algoritmo efficiente che rompe la<br />
sicurezza semantica allora lo posso usare per risolvere la<br />
DDH<br />
! Voglio risolvere il problema: dato (g, g x , g y , γ) è γ=g xy oppure γ=g c<br />
! Uso l’algoritmo efficiente che rompe la sic sem per risolvere DDH<br />
36<br />
38<br />
Sicurezza semantica <strong>ElGamal</strong><br />
Generazione ( (p,g,g α ), α )<br />
b ← {0,1}<br />
A vince se b=b’.<br />
p, g, g α<br />
g k , m b (g α ) k<br />
(m 0,m 1)<br />
b’<br />
A<br />
Il crittosistema è sicuro semanticamente se ogni efficiente A vince con<br />
probabilità
Sicurezza <strong>di</strong> <strong>ElGamal</strong><br />
! |Prob[A’(DH)=1]-Prob[A’(rand)=1]|
Sicurezza CCA1<br />
Generazione (PK,SK)<br />
PK<br />
b ← {0,1}<br />
A vince se b=b’.<br />
D SK(c 1)<br />
D SK(c p)<br />
C=E PK(m b)<br />
c 1<br />
c p<br />
(m 0 ,m 1 )<br />
b’<br />
non-adaptive<br />
chosen-ciphertext<br />
attacks<br />
A<br />
Il crittosistema è CCA1 sicuro se ogni efficiente A vince con probabilità
Decifratura Cramer-Shoup Lite<br />
chiave privata<br />
x,y,a,b ∈ Z p<br />
Alice<br />
file pubblico<br />
utente chiave pubblica<br />
A (p, g1, g2, h=g x<br />
1 g2<br />
y , c=g1 ag2 b )<br />
… …<br />
Decifratura <strong>di</strong> M per Alice<br />
Sia C = (u,v,w,e)<br />
If e≠u a v b then output invalid<br />
else output w/(u x u y )<br />
computazioni mod p<br />
Cifratura <strong>di</strong> M per Alice<br />
C ← (g 1 k , g2 k , M h k , c k )<br />
Sicurezza CCA1<br />
Generazione (PK,SK)<br />
PK<br />
b ← {0,1}<br />
A vince se b=b’.<br />
D SK (c 1 )<br />
D SK (c p )<br />
C=E PK(m b)<br />
c 1<br />
c p<br />
(m 0,m 1)<br />
b’<br />
48<br />
non-adaptive<br />
chosen-ciphertext<br />
attacks<br />
A<br />
Il crittosistema è CCA1 sicuro se ogni efficiente A vince con probabilità
Cramer-Shoup Lite: Sicurezza CCA1<br />
A’ (g, g x’ , g y’ , γ)<br />
Generazione ( (p, g 1 , g 2 , g 1 x g2 y , g1 a g2 b ), (x,y,a,b ) )<br />
(p, g 1 , g 2 , g 1 x g2 y , g1 a g2 b )<br />
D SK(c 1)<br />
D SK(c p)<br />
b ← {0,1}<br />
(g y’ ) k , γ k , m b (g y’ ) x γ y , (g y’ ) a γ b<br />
Algoritmo per decidere DDH<br />
c 1<br />
c p<br />
(m 0,m 1)<br />
If b=b’ then output “DH” else output “rand”<br />
Cramer-Shoup Lite:<br />
Sicurezza CCA1<br />
b’<br />
A<br />
! |Prob[A’(DH)=1]-Prob[A’(rand)=1]|
Chiavi Cramer-Shoup<br />
chiave privata<br />
x,y,a,b,a’,b’ ∈ Z p<br />
Alice<br />
file pubblico<br />
utente chiave pubblica<br />
A (p, g 1, g 2, h=g 1 x g2 y ,c=g1 a g2 b ,d=g1 a’ g2 b’ ,H)<br />
… …<br />
p primo<br />
g 1 g 2 generatori <strong>di</strong> Z p*<br />
(comuni a tutti)<br />
h = g 1 x g2 y mod p<br />
c = g 1 a g2 b mod p<br />
d = g 1 a’ g2 b’ mod p<br />
H funzione<br />
hash<br />
Decifratura Cramer-Shoup<br />
chiave privata<br />
x,y,a,b,a’,b’ ∈ Z p<br />
Alice<br />
56<br />
file pubblico<br />
utente chiave pubblica<br />
A (p, g 1 , g 2 , h=g 1 x g2 y ,c=g1 a g2 b ,d=g1 a’ g2 b’ ,H)<br />
… …<br />
Decifratura <strong>di</strong> M per Alice<br />
Sia C = (u,v,w,e)<br />
If e≠u a+za’ v b+zb’ then output invalid<br />
else output w/(u x u y )<br />
computazioni mod p<br />
Cifratura <strong>di</strong> M per Alice<br />
z ← H(g k<br />
1 , g2<br />
k , M hk )<br />
C ← (g k 58<br />
1 , g2<br />
k , M hk , (cdz ) k )<br />
Cifratura Cramer-Shoup<br />
C<br />
Cifratura <strong>di</strong> M per Alice<br />
z ← H(g 1 k , g2 k , M h k )<br />
C ← (g 1 k , g2 k , M h k , (cd z ) k )<br />
computazioni mod p<br />
file pubblico<br />
utente chiave pubblica<br />
A (p, g 1, g 2, h=g 1 x g2 y ,c=g1 a g2 b ,d=g1 a’ g2 b’ ,H)<br />
… …<br />
Bob<br />
Sicurezza CCA2<br />
Generazione (PK,SK)<br />
PK<br />
b ← {0,1}<br />
A vince se b=b’.<br />
D SK (c 1 )<br />
D SK (c p )<br />
C*=E PK (m b )<br />
D SK(c 1)<br />
D SK(c p)<br />
c 1<br />
c p<br />
(m 0 ,m 1 )<br />
c’ 1 ≠c*<br />
c’ p ≠c*<br />
b’<br />
k ∈ Z p<br />
A<br />
Il crittosistema è CCA2 sicuro se ogni efficiente A vince con probabilità
Bibliografia<br />
! Cryptography and Network Security<br />
by W. Stallings (2010)<br />
! cap. 9 (Public-Key Cryptography and RSA)<br />
! Cryptography: Theory and Practice (I <strong>ed</strong>.)<br />
by D.R. Stinson (1995)<br />
! cap 5 (The RSA System and Factoring)<br />
60<br />
Domande?<br />
61