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.
Innanzitutto Alice e Bruno concordano due numeri pubblici $N$ e $g$:
Ora Bruno può inviare un messaggio $M$ cifrato come segue:
Alice riceve quindi la coppia $(145,17)$ e la decifra come segue:
È 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..
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 = g^{ab} \mod N$ non conoscendo né $a$ né $b$. In realtà basterebbe calcolare i logaritmi $a = \log_g{A} \quad e \quad b = \log_g{B}$ 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.