Processing math: 100%
Il cifrario ElGamal
Cifrari a chiave pubblica
Il cifrario ElGamal
Il cifrario RSA - Algoritmo DHElGamal: demo

Storia

Questo cifrario fu proposto nel 1985 da Taher Elgamal*, dal quale ha preso il nome, riprendendo l'idea base dell'algoritmo DH, la intrattabilità del calcolo del logaritmo discreto in aritmetiche modulari di grande dimensione. A differenza di DH che si limita a generare una chiave condivisa, ElGamal è un vero e proprio cifrario, e permette di cifrare testi brevi, essendo molto più lento dei cifrari a chiave segreta come DES e AES; di fatto poi è utile soprattutto per cifrare parole chiave come le password e in pratica lo scopo è lo stesso di DH.

ElGamal non riuscì a spodestare RSA come principale cifrario a chiave pubblica, ma fu usato dal sistema PGP, Pretty Good Privacy

Le procedure di cifra e decifra sono descritte usando l'esempio seguente, che per semplicità si limita a cifrare una sola letter la J.

Esempio

Innanzitutto Alice e Bruno concordano due numeri pubblici N e g:

  1. Alice e Bruno scelgono pubblicamente un numero primo per esempio N=257 e un generatore dell'aritmetica modula N, per esempio g=5;
  2. Alice genera un numero casuale minore di 257, per esempio a = 121, da mantenere segreto, e lo usa come esponente per calcolare A=ga=5121(mod257)=86

Ora Bruno può inviare un messaggio M cifrato come segue:

  1. Bruno scrive un messaggio M e lo converte in un numero m usando una funzione f biiettiva, che può per esempio essere il codice ASCII a 8 bit; prendendo la lettera J come messaggio M ed essendo il codice ASCII di J il numero 74 si ha m=f(J)=74.
  2. Bruno genera un numero casuale b<N per esempio 147 e lo usa come esponente per calcolare la chiave pubblica B come potenza B=gb(modN), quindi B=5147(mod257)=145
  3. Bruno, conoscendo A che è pubblico e il suo esponente segreto b può calcolare la chiave segreta S=Ab(modN)=86147(mod257)=94
  4. Bruno invia per un canale pubblico il cifrato composto da una coppia di numeri: il primo è c1=B=gb=145, il secondo è c2=mS(modN)=74×94(mod257)=17; la coppia è quindi (c1,c2)=(145,17)

Alice riceve quindi la coppia (145,17) e la decifra come segue:

  1. Alice recupera la chiave segreta calcolando s=ca1=14517=94, infatti per le proprietà delle potenze, valide anche in aritmetica modulare, si ha ca1=(gb)a=gab=(ga)b=Ab=S.
  2. Alice calcola l'inverso di s : s1(modN)=941(mod257)=216
  3. Alice calcola ora m=c2s1(modN)=17×216(mod257)=74 e quindi il carattere ASCII 74 che è J

È notevole il fatto che il cifrario non è deterministico, nel senso che dipendendo anche da un numero casuale, alla stessa lettera potranno di volta in volta corrispondere numeri diversi, detto in altri termini la funzione cifrante non è univoca, mentre la funzione decifrante è necessariamente univoca, e quindi non vi sono problemi. Una situazione che ricorda quella degli omofoni usati nella crittografia classica e che avrebbero dovuto essere appunto usati a casaccio!

Alla pagina ElGamal: demo è possibile provare il cifrario in modo interattivo, verificando anche la predetta caratteristica..

Sicurezza

La cosa importante per la sicurezza è che un terzo che intercettasse i quattro numeri pubblici N,g,A,B non sarebbe in grado di ottenere la chiave k=gabmodN non conoscendo né ab. In realtà basterebbe calcolare i logaritmi a=loggAeb=loggB ma il calcolo del logaritmo discreto è computazionalmente proibitivo per numeri molto grandi (1024 bit e oltre).

Come altri sistemi a chiave pubblica, anche ElGamal è esposto all'attacco del terzo uomo interposto. Nel nostro esempio immaginiamo che Carlo intercetti il numero A che Alice invia a Bruno e, fingendo di essere Bruno, generi un suo numero B e lo invii ad Alice. A questo punto Alice e Carlo generano la chiave segreta k e comunicano via DES; e Carlo può tranquillamente leggere tutti i messaggi che Alice crede di inviare a Bruno! Peggio ancora: Carlo può ripetere il gioco anche con Bruno fingendosi Alice e di qui in avanti, intercettare e leggere tutta la corrispondenza tra gli inconsapevoli Alice e Bruno.

Per prevenire simili attacchi la soluzione è anche qui quella di usare un ente certificatore che garantisca l'identità dei corrispondenti. Alice e Bruno potranno p.es. identificarsi con un meccanismo di firma digitale, utilizzando le chiavi pubbliche fornite dall'ente certificatore.

È quello che capita per il protocollo https di Internet, che richiede un certificato SSL emesso da un ente autorizzato, e contenente le chiavi RSA o in questo caso ElGamal. Tra l'altro fu proprio Taher Elgamal a ideare i certificati SSL.


Riferimenti bibliografici
Siti e pagine web



Creative Commons Licence
La Crittografia da Atbash a RSA by Paolo Bonavoglia is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Based on a work at http://www.crittologia.eu/.
(In altri termini: Testi e figure possono essere riprodotti liberamente per usi non commerciali, a condizione che venga citata esplicitamente la fonte con un link e il nome dell'autore.)

Questo sito non fa uso di cookies propri. Possono peraltro essere presenti cookies di terze parti.


Pagina a cura di Paolo Bonavoglia (paolo@bonavoglia.eu) del

Spazio web di Paolo Bonavoglia
Scrivetemi via E-Mail
Glossario
Bibliografia
X Taher Elgamal, Il Cairo 18-08-1955, è un ingegnere egiziano emigrato negli USA, che si è occupato principalmente della sicurezza informatica e quindi di crittografia. Il nome che in arabo si scrive (da destra a sinistra): طاهر الجمل viene variamente trascritto come El Gamal, ElGamal o Elgamal. Per evitare confusioni si usa scrivere Elgamal il cognome della persona, come lo scrive lui stesso, ElGamal invece è il nome del cifrario.