ElGamal

Disambiguazione – Se stai cercando il crittosistema di firma digitale, vedi Schema di firma ElGamal.

ElGamal è un sistema di cifratura a chiave pubblica, proposto dal ricercatore egiziano-americano Taher Elgamal nel 1985. Lo schema è basato sulla difficoltà del calcolo del logaritmo discreto.

Fasi della cifratura

Ci sono tre fasi in questo algoritmo:

Generazione delle chiavi

L'utente A genera e rende nota una chiave pubblica:

Y A = ( α X A mod q ) {\displaystyle Y_{A}=(\alpha ^{X_{A}}{\bmod {q}})}

Analogamente l'utente B genera la sua chiave pubblica:

Y B = ( α X B mod q ) {\displaystyle Y_{B}=(\alpha ^{X_{B}}{\bmod {q}})}

Dove:

  • q numero grande primo (es. dell'ordine di 10100), parametro globale.
  • α radice primitiva di q, parametro globale.
  • XA scelto a caso in maniera uniforme tra [1,(q-1)], che costituisce la chiave privata di A e deve essere mantenuto segreto.
  • XB scelto a caso in maniera uniforme tra [1,(q-1)], che costituisce la chiave privata di B e deve essere mantenuto segreto.

Cifratura

L'utente A che vuole inviare un messaggio M a B, con M < q, sceglie a caso un numero k nell'intervallo [1,(q-1)] e calcola:

K A = ( Y B ) k mod q {\displaystyle K_{A}=(Y_{B})^{k}{\bmod {q}}}

Dopodiché genera il messaggio da inviare come una coppia (C1,C2) formata da:

C 1 = α k mod q {\displaystyle C_{1}=\alpha ^{k}{\bmod {q}}}
C 2 = K A M mod q {\displaystyle C_{2}=K_{A}M{\bmod {q}}}

Decifratura

Il testo cifrato (C1,C2) viene inviato a B il quale recupera M nel seguente modo:

K B = ( C 1 X B ) mod q {\displaystyle K_{B}=(C_{1}^{X_{B}}){\bmod {q}}}
M = ( C 2 K B 1 ) mod q {\displaystyle M=(C_{2}\cdot K_{B}^{-1}){\bmod {q}}}

Correttezza

Si ha che KA = KB in quanto:

K A = ( Y B k ) mod q = {\displaystyle K_{A}=(Y_{B}^{k}){\bmod {q}}=}
= ( ( α X B mod q ) k ) mod q = {\displaystyle =((\alpha ^{X_{B}}{\bmod {q}})^{k}){\bmod {q}}=}
= ( α k X B ) mod q {\displaystyle =(\alpha ^{kX_{B}}){\bmod {q}}}
K B = ( C 1 X B ) mod q = {\displaystyle K_{B}=(C_{1}^{X_{B}}){\bmod {q}}=}
= ( ( α k mod q ) X B ) mod q = {\displaystyle =((\alpha ^{k}{\bmod {q}})^{X_{B}}){\bmod {q}}=}
= ( α k X B ) mod q {\displaystyle =(\alpha ^{kX_{B}}){\bmod {q}}}

Siccome KA = KB = K si ha che:

M = ( C 2 K B 1 ) mod q {\displaystyle M=(C_{2}\cdot K_{B}^{-1}){\bmod {q}}}
= ( ( K A M mod q ) K B 1 ) mod q = {\displaystyle =((K_{A}M{\bmod {q}})K_{B}^{-1}){\bmod {q}}=}
= ( K A M K B 1 ) mod q = {\displaystyle =(K_{A}MK_{B}^{-1}){\bmod {q}}=}
= ( K M K 1 ) mod q = {\displaystyle =(KMK^{-1}){\bmod {q}}=}
= M mod q = M {\displaystyle =M{\bmod {q}}=M}

Conclusioni

Tutte le operazioni coinvolte sono algoritmicamente fattibili, in maniera efficiente. I costi computazionali di cifratura e decifratura sono paragonabili all'RSA però abbiamo una espansione del testo cifrato di un fattore 2 rispetto al testo in chiaro.

Questo algoritmo è resistente ad attacchi di tipo crittanalitico, l'unico modo di ricavare informazioni segrete dai dati pubblici è effettuare il logaritmo discreto. Ancora oggi non è conosciuto un algoritmo efficiente per calcolare tali valori.

Collegamenti esterni

Vulnerabilità delle firme ElGamal
  • (EN) GnuPG's ElGamal signing keys compromised, su lists.gnupg.org.
  • (EN) Phong Q. Nguyen "Can We Trust Cryptographic Software? Cryptographic Flaws in GNU Privacy Guard v1.2.3." EUROCRYPT 2004: 555–570
  Portale Crittografia
  Portale Sicurezza informatica