Beruflich Dokumente
Kultur Dokumente
2. Es ist unwahrscheinlich in Polynomialzeit eine Eingabe zu finden, die von f auf das gleiche Wort
abgebildet wird.
Die Existenz einer solchen Funktion konnte bisher nicht bewiesen werden, existiert sie aber folgt daraus
P ⊂ N P.
Ein symmetrisches Kryptosystem erfordert einen geteilten geheimen Schlüssel. Wollen zwei Personen
über ein unsicheres Medium kommunizieren, stellt dies ein Problem dar, denn sie müssen sich vorher
treffen, um einen Schlüssel zu vereinbaren.
1
3 Gruppen
Erinnerung: Eine Gruppe besteht aus einer Operation und einer Menge. Es gibt ein neutrales Element,
und für jedes Element ausser dem neutralen gibt es ein inverses Element. Eine Gruppe ist abgeschlossen
bezüglich ihrer Operation, welche assoziativ ist.
(Zn∗ , ·n ) bezeichnet die endliche Gruppe, deren Elemente die Äquivalenzklassen modulo n sind, sofern sie
teilerfremd zu n sind. Die Operation ·n ist definiert als die Multiplikation modulo n. Die Äquivalenz-
klasse [1] ist das neutrale Element.
(Zn , +n ) bezeichnet die endliche Gruppe, deren Elemente die Äquivalenzklassen modulo n sind. Die Ope-
ration +n ist definiert als die Addition modulo n. Die Äquivalenzklasse [0] ist das neutrale Element.
Im Weiteren werden diese Gruppen nur noch mit Zn∗ und Zn bezeichnet.
4 Das RSA-Kryptosystem
Obwohl weder Einwegfunktionen noch Falltürfunktionen bekannt sind, werden für Kryptosysteme Funk-
tionen verwendet, von denen man annimmt sie seien welche. Im Folgenden werden wir uns das RSA-
Kryptosystem genauer anschauen, dessen Sicherheit auf dem Problem der Primfaktorzerlegung beruht,
für das bisher kein effizienter Algorithmus gefunden wurde. Das RSA-Verfahren wurde 1978 von Rivest,
Shamir und Adleman vorgestellt.
4.1 Verfahren
1. Wähle zwei große Primzahlen p und q
2. Berechne n = p · q
1
= p·q ·(1− p1 )·(1− 1q ) =
Q
3. Wähle eine kleine ungerade Zahl e, die teilerfremd zu φ(n) = n· p0 |n (1− p0 )
(p − 1) · (q − 1) ist
∗
4. Berechne das multiplikative Inverse d von e in der Gruppe Zφ(n) (geht mit dem erweiterten euklidi-
schen Algorithmus)
5. Der öffentliche Schlüssel ist (e, n) und der geheime Schlüssel ist (d, n). Die Chiffrierfunktion C ist
dann C(M ) := M e mod n und die Dechiffrierfunktion ist D(C) := C d mod n
4.2 Korrektheitsbeweis
Um die Korrektheit zu beweisen, muss gezeigt werden, dass eine verschlüsselte Nachricht wieder korrekt
entschlüsselt wird. Im Fall von RSA kann dies sogar in beliebiger Reihenfolge passieren, weshalb man es
auch zum Signieren von Nachrichten verwenden kann.
Satz 1 (Korrektheit des RSA-Verfahrens) Die Chiffrier- und Dechiffrierfunktion von RSA sind zu-
einander Invers:
D(C(M )) = C(D(M )) = M e·d mod n
Beweis:
Aus dem chinesischen Restsatz folgt X ≡ M e·d (mod n) g.d.w
X ≡ M e·d (mod p) ∧ X ≡ M e·d (mod q)
∗
Zunächst wird gezeigt M ≡ M e·d (mod p). Da e und d multipliaktive Inverse in der Gruppe Zφ(n) sind,
gilt e · d = 1 + k(p − 1)(q − 1) also:
M e·d ≡ M 1+k(p−1)(q−1) ≡ M · (M p−1 )k·(q−1) (mod p)
Nach dem kleinen fermatschen Satz gilt ap−1 ≡ 1 (mod p) für jede Primzahl p. Daraus ergibt sich für
M 6≡ 0 (mod p):
M · (M p−1 )k·(q−1) ≡ M · (1)k·(q−1) ≡ M (mod p)
Für M ≡ 0 (mod p) gilt ebenfalls M e·d ≡ M (mod p), da 0e·d ≡ 0 (mod p).
Der Beweis funktioniert analog für M ≡ M e·d (mod q)
2
4.3 Schnelle modulare Exponentation
Die Laufzeit der Chiffrier- und Dechiffrierfunktion hängt stark davon ab, wie schnell Ausdrücke der Form
ab mod n berechnet werden können. Da die Zahlen sehr groß werden können, wird für die Laufzeitanalyse
das logarithmische Kostenmaß verwendet. Des Weiteren wird davon ausgegangen, dass sich a · b, a ÷ b und
a mod b in O(β 2 ) berechnen lassen, wobei max(log a, log b) ≤ β. Rechnet man zuerst ab und erst danach
modn, dann ist die Laufzeit pseudopolynomiell, da man b Multiplikationen braucht, b aber exponentiell
zur Eingabegröße wächst. Da eine exponentielle Laufzeit nicht akzeptabel ist, stellt sich die Frage: Wie
geht es besser?
Idee: Wiederholtes Quadrieren, also statt a8 mod n rechnet man (((a2 ) mod n)2 mod n)2 mod n, wo-
durch nicht mehr b, sondern nur noch O(log b) viele Multiplikationen und Modulo-Operationen benötigt
werden.
Algorithm 1 MODULAR-EXPONENTATION(a,b,n)
Sei b = (bk , bk−1 ,..., b0 ) mit bi ∈ {0, 1}
d←1
for i = k to 0 do
d ← d2 mod n
if bi = 1 then
d ← d · a mod n
end if
end for
return d
Sei log b ≤ α und log n ≤ β, dann wird die for-Schleife höchsten α mal durchlaufen. Ein Durchlauf benötigt
O(β 2 ) Zeit. Daraus ergibt sich eine Laufzeit von O(α · β 2 )
4.4 Laufzeit
Für die Laufzeitbestimmung der Chiffrier- und Dechiffrierfunktion von RSA machen wir folgende Abschät-
zungen:
1. log n ≤ β
2. log e ≤ O(1), da e eine kleine Zahl ist
3. log d ≤ β
Daraus folgt die Laufzeit der Chiffrierfunktion O(β 2 ) und die der Dechiffrierfunktion O(β 3 ).
5 Primzahlen
Für das RSA-Kryptosystem werden große Primzahlen benötigt. Der schnellste Weg, diese zu finden, ist,
solange Zufallszahlen zu wählen, bis man eine Primzahl gefunden hat. Dafür benötigt man einen schnel-
len Primzahltest. Zu testen, ob in den Zahlen bis zur Wurzel der Eingabe ein Teiler exisitiert, liefert
exponentielle Laufzeit und kommt daher nicht in Frage. 2002 veröffentlichten Agrawal, Kaya und Saxena
den AKS-Algorithmus, dessen Laufzeit nach einigen Verbesserungen mittlerweile in O((ln n)6+ ) liegt. Der
AKS-Algorithmus wird praktisch in der Regel nicht verwendet, da die Laufzeit, obwohl polynomiell, noch
zu groß ist.
5.1 Fermat-Test
Im Korrektheitsbeweis für das RSA-Kryptosystem haben wir den kleinen fermatschen Satz verwendet
Satz 2 (kleiner fermatscher Satz) Wenn p eine Primzahl ist, dann gilt ap−1 ≡ 1 (mod p)
Überraschenderweise stimmt die Umkehrung fast:
Der Ausdruck
M ODU LAR − EXP ON EN T IAT ION (2, n − 1, n) = 1
3
wird also bis auf wenige Ausnahmen wahr werden, wenn n eine Primzahl ist. Wenn der Test allerdings
erkennt, dass n keine Primzahl ist, dann liegt er nie falsch. Allerdings gibt es Zahlen, sog. Carmichael-
Zahlen, bei denen dieser für alle Basen falsch liegt. Da man aber einen Test will der für alle Eingaben mit
hoher Wahrscheinlichkeit funktioniert, wird oft der Miller-Rabin-Test verwendet.
5.2 Miller-Rabin-Test
Der Miller-Rabin-Test ist eine Verfeinerung des Fermat-Tests. Er ist ein probabilistischer Algorithmus und
benutzt noch eine zusätzliche Eigenschaft, die eine Zahl als zusammengesetzt identifiziert.
Satz 3 Wenn eine nichttriviale Quadratwurzel von 1 (mod n) existiert, i.e. x2 ≡ 1 (mod n) mit x 6≡ 1
(mod n) und x 6≡ −1 (mod n), dann ist n zusammengesetzt.
Algorithm 2 WITNESS(a,n)
n − 1 = u · 2t
d1 ← M ODU LAR − EXP ON EN T IAT ION (a, u, n)
for i = 1 to t do
d2 ← d12 mod n
if d2 = 1 ∧ d1 6= 1 ∧ d1 6= n − 1 then
return T RU E
end if
d1 ← d2
end for
if d1 6= 1 then
return T RU E
end if
return F ALSE
Der Miller-Rabin-Test benutzt diese Funktion dann mit einer gegebenen Anzahl von zufällig gewählten
Basen:
Algorithm 3 MILLER-RABIN(n,s)
for i = 1 to s do
a ← RAN DOM (2, n − 1)
if W IT N ESS(a, n) = T RU E then
return F ALSE
end if
end for
return T RU E
Die Laufzeit von M ILLER−RABIN (n, s) ist dann O(s·β 3 ) mit log n ≤ β, da der Aufruf W IT N ESS(a, n)
die gleiche Laufzeit wie der Aufruf M ODU LAR − EXP ON EN T IT AT ION (a, n − 1, n) hat.
Verwendete Literatur
• T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein: Introduction to Algorithms. 2nd Edition. Cambride 2001