Schema di firma ElGamal

Lo schema di firma ElGamal è un crittosistema di firma digitale basato sulla presunta difficoltà computazionale del calcolo di logaritmi discreti. È stato descritto da Taher Elgamal nel 1984.[1]

L'originale algoritmo di firma di Elgamal è raramente usato nella pratica, in favore di una variante sviluppata dalla NSA nota come Digital Signature Algorithm. Esistono molte altre varianti.[2] Lo schema di firma ElGamal non dev'essere confuso con l'omonimo sistema di cifratura a chiave pubblica, anch'esso proposto da Taher Elgamal.

Parametri di sistema

  • Sia H {\displaystyle H} una funzione di hash resistente alle collisioni.
  • Sia p {\displaystyle p} un numero primo sufficientemente grande, tale che calcolare il suo logaritmo discreto modulo p {\displaystyle p} risulti complesso.
  • Sia g < p {\displaystyle g<p} un generatore scelto arbitrariamente nel gruppo di interi modulo p Z p {\displaystyle Z_{p}^{*}} .

Generazione della chiave

L'autore della firma compie una sola volta i seguenti passi:

  • Scegliere un numero casuale x {\displaystyle x} tale che 1 < x < p 2 {\displaystyle 1<x<p-2} .
  • Calcolare y = g x mod p {\displaystyle y=g^{x}\mod p} .
  • La chiave pubblica è y {\displaystyle y} .
  • La chiave privata x {\displaystyle x} .

Generazione della firma

Per firmare un messaggio m {\displaystyle m} , l'utente compie i seguenti passi:

  • Scegliere un numero casuale k {\displaystyle k} tale che 1 < k < p 1 {\displaystyle 1<k<p-1} e g c d ( k , p 1 ) = 1 {\displaystyle gcd(k,p-1)=1} (ovvero, k {\displaystyle k} e p 1 {\displaystyle p-1} siano coprimi).
  • Calcolare r g k ( mod p ) {\displaystyle r\,\equiv \,g^{k}{\pmod {p}}} .
  • Calcolare s ( H ( m ) x r ) k 1 ( mod p 1 ) {\displaystyle s\,\equiv \,(H(m)-xr)k^{-1}{\pmod {p-1}}} .
  • Se s = 0 {\displaystyle s=0} ricominciare.

La coppia ( r , s ) {\displaystyle (r,s)} sarà la firma digitale di m {\displaystyle m} .

Verifica

Una firma ( r , s ) {\displaystyle (r,s)} di un messaggio m {\displaystyle m} è accettata se le seguenti condizioni di verifica sono soddisfatte:

  • 0 < r < p {\displaystyle 0<r<p} e 0 < s < p 1 {\displaystyle 0<s<p-1} .
  • g H ( m ) y r r s ( mod p ) . {\displaystyle g^{H(m)}\equiv y^{r}r^{s}{\pmod {p}}.}

Correttezza

L'algoritmo è corretto nel senso che una firma correttamente generata verrà sempre accettata se verificata come sopra.

La generazione della firma implica che:

H ( m ) x r + s k ( mod p 1 ) . {\displaystyle H(m)\,\equiv \,xr+sk{\pmod {p-1}}.}

Per il piccolo teorema di Fermat:

g H ( m ) g x r g k s ( g x ) r ( g k ) s ( y ) r ( r ) s ( mod p ) . {\displaystyle {\begin{aligned}g^{H(m)}&\equiv g^{xr}g^{ks}\\&\equiv (g^{x})^{r}(g^{k})^{s}\\&\equiv (y)^{r}(r)^{s}{\pmod {p}}.\\\end{aligned}}}

Sicurezza

Un utente terzo può falsificare la firma entrando a conoscenza della chiave segreta x {\displaystyle x} o trovando collisioni nella funzione di hash H ( m ) H ( M ) ( mod p 1 ) {\displaystyle H(m)\equiv H(M){\pmod {p-1}}} . Entrambi i problemi sono ritenuti difficili.

Il firmatario deve stare attento a scegliere i valori di k {\displaystyle k} in maniera sufficientemente casuale per ogni firma e deve essere sicuro che k {\displaystyle k} , o qualunque informazione parziale riguardo esso, non venga rivelata. Altrimenti, potrebbe essere più semplice per un attaccante dedurre la chiave x {\displaystyle x} , talvolta abbastanza da permettere un attacco praticabile. In particolare, se due messaggi sono inviati usando lo stesso valore di k {\displaystyle k} e la stessa chiave, allora l'attaccante può direttamente calcolare x {\displaystyle x} .[1]

Falsificazione esistenziale

La pubblicazione originale[1] non prevedeva una funzione crittografica di hash come parametro di sistema. Il messaggio m {\displaystyle m} era usato direttamente nell'algoritmo al posto di H ( m ) {\displaystyle H(m)} . Questo permetteva un attacco noto come falsificazione esistenziale, come descritto nella sezione IV dell'articolo. Pointcheval e Stern hanno generalizzato questo caso descrivendo due distinti livelli di falsificazione:[3]

  1. Falsificazione ad un parametro. Sia 1 < e < p 1 {\displaystyle 1<e<p-1} un numero casuale. Se r = g e y ( mod p ) {\displaystyle r=g^{e}y{\pmod {p}}} e s = r ( mod p 1 ) {\displaystyle s=-r{\pmod {p-1}}} , la coppia ( r , s ) {\displaystyle (r,s)} è una firma valida per il messaggio m = e s ( mod p 1 ) {\displaystyle m=es{\pmod {p-1}}} .
  2. Falsificazione a due parametri. Siano 1 < e , v < p 1 {\displaystyle 1<e,v<p-1} due numeri casuali e sia gcd ( v , p 1 ) = 1 {\displaystyle \gcd(v,p-1)=1} . Se r = g e y v ( mod p ) {\displaystyle r=g^{e}y^{v}{\pmod {p}}} e s = r v 1 ( mod p 1 ) {\displaystyle s=-rv^{-1}{\pmod {p-1}}} , la coppia ( r , s ) {\displaystyle (r,s)} è una firma valida per il messaggio m = e s ( mod p 1 ) {\displaystyle m=es{\pmod {p-1}}} .

Note

  1. ^ a b c Elgamal, 1985.
  2. ^ (EN) K. Nyberg, R. A. Rueppel, Message recovery for signature schemes based on the discrete logarithm problem, in Designs, Codes and Cryptography, vol. 7, n. 1-2, 1996, pp. 61–81, DOI:10.1007/BF00125076.
  3. ^ (EN) David Pointcheval e Jacques Stern, Security Arguments for Digital Signatures and Blind Signatures (PDF), in J Cryptology, vol. 13, n. 3, 2000, pp. 361–396. URL consultato il 4 ottobre 2018 (archiviato dall'url originale il 5 dicembre 2014).

Bibliografia

  • (EN) T. ElGamal, A public key cryptosystem and a signature scheme based on discrete logarithms, in IEEE Trans Inf Theory, vol. 31, n. 4, 1985, pp. 469–472. URL consultato il 17 febbraio 2021.

Voci correlate

  Portale Crittografia: accedi alle voci di Wikipedia che trattano di crittografia