27.05.2013 Visualizzazioni

Crittosistema di ElGamal - Dipartimento di Informatica ed Applicazioni

Crittosistema di ElGamal - Dipartimento di Informatica ed Applicazioni

Crittosistema di ElGamal - Dipartimento di Informatica ed Applicazioni

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!