Schema di firma ElGamal

Da testwiki.
Versione del 16 mar 2025 alle 06:41 di imported>FrescoBot (Bot: numeri di pagina nei template citazione)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Vai alla navigazione Vai alla ricerca

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

Generazione della chiave

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

  • Scegliere un numero casuale x tale che 1<x<p2.
  • Calcolare y=gxmodp.
  • La chiave pubblica è y.
  • La chiave privata x.

Generazione della firma

Per firmare un messaggio m, l'utente compie i seguenti passi:

  • Scegliere un numero casuale k tale che 1<k<p1 e gcd(k,p1)=1 (ovvero, k e p1 siano coprimi).
  • Calcolare rgk(modp).
  • Calcolare s(H(m)xr)k1(modp1).
  • Se s=0 ricominciare.

La coppia (r,s) sarà la firma digitale di m.

Verifica

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

  • 0<r<p e 0<s<p1.
  • gH(m)yrrs(modp).

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)xr+sk(modp1).

Per il piccolo teorema di Fermat:

gH(m)gxrgks(gx)r(gk)s(y)r(r)s(modp).

Sicurezza

Un utente terzo può falsificare la firma entrando a conoscenza della chiave segreta x o trovando collisioni nella funzione di hash H(m)H(M)(modp1). Entrambi i problemi sono ritenuti difficili.

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

Falsificazione esistenziale

La pubblicazione originale[1] non prevedeva una funzione crittografica di hash come parametro di sistema. Il messaggio m era usato direttamente nell'algoritmo al posto di 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<p1 un numero casuale. Se r=gey(modp) e s=r(modp1), la coppia (r,s) è una firma valida per il messaggio m=es(modp1).
  2. Falsificazione a due parametri. Siano 1<e,v<p1 due numeri casuali e sia gcd(v,p1)=1. Se r=geyv(modp) e s=rv1(modp1), la coppia (r,s) è una firma valida per il messaggio m=es(modp1).

Note

Bibliografia

Voci correlate

Template:Portale