El Gamal Verschlüsselung und seine Anwendungen Andrés Guevara July 11, 2005 1 Kurze Einführung in die Kryptographie Situation: Absender will Empfänger eine Nachricht schicken. Einige Ziele der Kryptographie sind: Niemand außer dem Empfänger soll die Nachricht lesen können. Der Empfänger soll überprüfen können, ob die Nachricht während der Übertragung geändert wurde. Die Parteien sollen sich identifizieren können Der Absender kann danach nicht ablehnen, dass er die Nachricht geschickt hat. Lösung des ersten Problems (nur der Empfänger kann die Daten lesen und verstehen): Dazu wurden die symmetrischen Verfahren entwickelt. Die heißen symmetrisch, weil die Parteien sich auf einen gemeinsamen Schlüssel einigen, womit die Nachricht verschlüsselt bzw. entschlüsselt wird. Neues Problem: Bevor sie einen Schlüssel gewählt haben, ist die Verbindung unsicher, jeder andere kann die Übertragung des Schlüssels ablesen, also, wie gelingt es, die Kommunikation für die Wahl und besonders für die Übertragung des Schlüssels sicher zu machen? Dafür wurden die asymmetrischen Verfahren entwickelt. Jedes Individuum verfügt über 2 Schlüssel, einen öffentlichen und einen privaten. Will der Absender dem Empfänger eine Nachricht schicken, so verschlüsselt 1
er sie mit dem öffentlichen Schlüssels des Empfängers. Er seinerseits ist der einzige, der sie entschlüsseln kann, denn man braucht dafür seinen privaten Schlüssel; somit ist die Übertragung der Nachricht sicher. Das heißt: Wir wählen für die Kommunikation einen symmetrischen Verfahren. Um den gemeinsamen Schlüssel zu vereinbaren benützen wir aber ein asymmetrisches Verfahren, d.h. die beiden Verfahren komplementieren sich. Wieso wird nur der Schlüssel und nicht die ganze Nachricht mit dem asymmetrischen Verfahren geschickt? Weil die Berechnungen bei den asymmetrischen Verfahren viel komplizierter sind als bei den symmetrischen, d.h. für große Datenmengen wären sie sehr ineffizient. El Gamal ist ein asymmetrisches oder Public-Key Verfahren. Diese Verfahren beruhen auf sogennante Einwegfunktionen. f wird Einwegfunktion gennant falls man f(x) effizient berechnen kann aber es kein effizientes Verfahren gibt, um x aus f(x) zu berechnen Möchte man also x mit Hilfe von einer Einwegfunktion f verschlüsseln, so kann man f(x) schnell berechnen, und aus f(x) kann man nicht die ürsprüngliche Information x berechen. Bei El Gamal ist diese Funktion Exp: Z p 1 Z p, x g x wobei p eine Primzahl ist, Z p 1 die Restklassengruppe modulo p 1 Elementen ist, Z p die Menge der Einheiten oder invertierbaren Elementen in Z p ist g ein Generator von Z p ist, d.h; man kann die Menge Z p schreiben als Z p = {g, g 2,..., g p 1 } 2
Die Umkehrfunktion von Exp wird der diskrete Logarithmus genannt (diskret weil es um endliche Körper geht), und es ist kein effizienter Algorithmus bekannt, der diese Funktion für eine große Primzahl p berechnen kann. Der Empfänger einer Nachricht generiert seine Schlüssel so: Er wählt 1. Eine große Primzahl p, so dass p 1 einen großen Primfaktor hat. 2. Einen Generator g Z p 3. Eine ganze Zahl x, 0 x p 2 zufällig Das 3-Tuppel (p, g, x) ist der private Schlüssel des Empfängers 4. Er berechnet y = g x mod p. Der öffentliche Schlüssel ist das 3-Tupel (p, g, y) und x bleibt geheim. 2 Verschlüsselung Der Absender will eine Nachricht m schicken, wobei m Z p. Der Absender verfügt über den öffentlichen Schlüssel vom Empfänger (p, g, y). Dann wählt er eine Zahl k, 1 k p 2 zufällig. Die verschlüsselte Nachricht ist dann das Tupel (g k, mg xk ) = (g k, my k ) Z 2 p 3 Entschlüsselung Der Empfänger bekommt (g k, mg xk ) vom Absender und hat den privaten Schlüssel (p, g, x). Aus x und p berechnet er x. Dann berechnet er (g k ) x = (g xk ). Multipliziert er dann mg xk g xk = m bekommt er die Nachricht m entschlüsselt. 3
4 Signatur Damit der Empfänger sicher sein kann, dass der Absender die Nachricht geschickt hat und niemand anders, soll der Absender die Nachricht unterschreiben. Die Nachricht wird mit Hilfe des privaten Schlüssels des Absenders untergeschrieben. Der Absender generiert genauso wie der Empfänger einen öffentlichen und einen privaten Schlüssel (p, g, y) bzw. (p, g, x). Die Nachricht wird mit einer Hash-Funktion auf eine Zahl m Z p abgebildet und dieser Wert m wird unterschrieben. Der Absender geht folgendermassen vor: 1. Er wählt zufällig eine Zahl k, 1 k p 2 mit ggt(k, p 1) = 1. 2. Er berechnet r := g k mod (p 1) und s := k 1 (m rx) mod (p 1) 3. (m, r, s) ist die unterzeichnete Nachricht 4.1 Verifikation der Signatur Der Empfänger hat dann zur Verfügung Der öffentliche Schlüssel des Absenders: (p, g, y) Die Signatur des Absenders: (m, r, s) Er verifiziert dass der Absender m untergeschrieben hat, indem er überprüft 1. Ob 1 r p 1. Wenn nicht dann akzeptiert er die Signatur nicht 2. Er berechnet v := g m und w := y r r s Die Signatur wird akzeptiert wenn v = w, denn w = y r r s = (g x ) r (g k ) s = g rx g kk 1 (m rx) = g m = v Bemerkung zur Berechnung: Die Exponenten von g können mod (p 1) verkürzt werden, denn g p 1 = 1 4
5 Gefahren Bei der Signatur muss der Absender sehr viel darauf aufpassen, dass niemand die zufällige Zahl k herausfinden kann, denn man kann mit Hilfe von k, r, m und s die Zahl x aus s = k 1 (m rx) mod (p 1) berechnen, wenn r in Z p 1 invertierbar ist Jedes Mal muss diese Zahl k neu gewählt werden, denn wählt man 2 Mal die gleiche Zahl k für 2 Signaturen (m, r, s) und ( ˆm, r, ŝ) so ist: s ŝ (m ˆm)k 1 mod (p 1) k (s ŝ) 1 (m ˆm) mod (p 1) und man kann wiederum k berechnen Wird keine Hash Funktion für die Signatur der Nachricht verwendet, so kann einen Angreifer eine Nachricht m mit einer gültigen Signatur schicken. Seien b und c Zahlen mit gcd(c, p 1) = 1. Setze: r = g b y c, s = rc 1 mod (p 1) und m = rbc 1 mod (p 1). Es gilt dann g m = y r r s Ohne den ersten Schritt der Verifikation und mit der Annahme, dass der Hashwert m in Z p 1 invertierbar ist, so kann ein Angreifer, der die Signatur (m, r, s) liest, eine eigene Nachricht ˆm verschicken. Er setzt: u = ˆmm 1 mod (p 1); ŝ = su mod (p 1); ˆr Z mit ˆr r mod p und ˆr ru mod (p 1) und ( ˆm, ˆr, ŝ) ist eine gültige Nachricht. 5.1 Letzte Bemerkung Für die Konstruktion der gewünschten Primzahl p bei der Generierung der Schlüsseln kann wie folgt vorgehen: Der Empfänger sucht sich eine grosse Primzahl q Er sucht eine Zahl k, so dass z = 2kq + 1 eine Primzahl ist (in O(lnz) zu finden) 5
Er sucht zufällig einen Generator g in Z p. Damit dass effizient verläuft muss q sehr gross und k klein sein, denn man braucht die Faktorisierung von k dafür 6 Literatur [DelKne2002] H. Delfs, H. Knebl: Introduction to Cryptographie. Berlin: Springer-Verlag, 2002. 6