4.2 ElGamal
Das ElGamal-Verfahren beruht auf der Schwierigkeit, diskrete
Logarithmen zu berechen, also der Bestimmung von a aus
bekanntem β = αa(mod p), wobei
p eine Primzahl ist.
Wie beim RSA-Verfahren können mit der hier vorgestellten Form nur
Zahlen verschlüsselt werden; Texte müssen wieder
entsprechend kodiert werden.
Das ElGamal-Verfahren besteht aus drei Schritten
- Schlüsselerzeugung:
- Wähle eine große Primzahl p (vgl.
2.3.2), so daß
(p - 1) / 2 ebenfalls Primzahl ist* (vgl.
2.3.1).
N sei die Anzahl der Bits von p.
- Wähle eine Basis α < p.
- Wähle einen geheimen Schlüssel a < p.
- Berechne β = αa(mod p)
- Veröffentliche p, α und β als öffentlichen
Schlüssel.
- Verschlüsselung einer Nachricht:
- Zerlege den Klartext in Blöcke zu je N - 1 Bit
(evtl. auffüllen).
- Wähle geheime Zufallszahl k, die zu p - 1
teilerfremd ist, also ggT(k,
p - 1) = 1 (vgl. 2.1)
- Berechne für jeden Block x den Geheimtext
e (x, k) = (y1,
y2), wobei
y1 = αk(mod p)
und
y2 = βkx (mod
p).
Dabei sind y1 und y2 jeweils
Geheimtextblöcke der Länge N.
- Entschlüsselung:
- Zerlege den Geheimtext in N-Bit Blöcke
- Für jeweils zwei aufeinanderfolgende Blöcke
y1 und y2 löse
y1a x =
y2 (mod p)
nach x auf.
Also ist
d (y1, y2) = x =
y2
(y1a )-1 (mod p)
der gesuchte Klartextblock.
* Für den Spezialfall, daß (p - 1) / 2
ebenfalls eine Primzahl ist, gibt einen effizienten Algorithmus zur
Berechnung des diskreten Logarithmus.
4.2 ElGamal: Beispiel-Applet für kleine Zahlen
source