Kryptographie — RSA

Werbung
Kryptographie — RSA
Robert Lion Gottwald
16. Februar 2012
1 Symmetrische Verfahren / Private-Key-Verfahren
Traditionelle Verschlüsselungs-Verfahren, sogenannte symmetrische Verfahren, verwenden einen geheimen
Schlüssel. Für perfekte Sicherheit wird ein Schlüssel der gleichen Länge wie die Nachricht benötigt, denn
dann dauert es genauso lange den Schlüssel zu erraten, wie die Nachricht (sog. One-Time-Pad).
Weil das unpraktisch ist, verwendet man meist Schlüssel, die viel kürzer als die Nachricht selbst sind.
Diese sind trotzdem ausreichend sicher, da eine Brute-Force-Suche über den gesamten Schlüsselraum mit
steigender Schlüssellänge schnell zu aufwändig wird. Mit Hilfe einer Einwegfunktion lässt sich ein beweisbar sicheres symmetrisches Kryptosystem konstruieren.
Definition 1 (Einwegfunktion) Eine längenerhaltende Funktion f : Σ∗ → Σ∗ mit den folgenden Eigenschaften heißt Einwegfunktion:
1. f lässt sich in Polynomialzeit berechnen
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.
2 Asymmetrische Verfahren / Public-Key-Verfahren
1976 wurde von Whitfield Diffie und Martin Hellman ein Schlüsselaustauschverfahren vorgestellt, das den
Austausch eines geheimen Schlüssels über ein unsicheres Medium erlaubt, ohne dass ein geteiltes Geheimnis
benötigt wird. Solche kryptographischen Verfahren nennt man asymmetrische Verfahren oder Public-KeyVerfahren. Die Idee dahinter ist, dass die Chiffrierfunktion und die Dechiffrierfunktion so getrennt werden,
dass sich die Dechiffrierfunktion nicht effizient aus der Chiffrierfunktion berechnen lässt. Es ist nicht bekannt, ob eine Einwegfunktion für die Konstruktion eines solchen Kryptosystems ausreicht. Aber mit
Hilfe einer Falltürfunktion lässt sich ein beweisbar sicheres asymmetrisches Kryptosystem konstruieren.
Definition 2 (Falltürfunktion) Eine längenerhaltende Funktion f : Σ∗ → Σ∗ mit den folgenden Eigenschaften heißt Falltürfunktion:
1. f lässt sich in Polynomialzeit berechnen.
2. f lässt sich mit einer Zusatzinformation effizient umkehren.
3. Es ist unwahrscheinlich ohne eine Zusatzinformation in Polynomialzeit eine Eingabe zu finden, die
von f auf das gleiche Wort abgebildet wird.
Die Existenz einer solchen Funktion konnte bisher ebenfalls nicht bewiesen werden.
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 Äquivalenzklasse [1] ist das neutrale Element.
(Zn , +n ) bezeichnet die endliche Gruppe, deren Elemente die Äquivalenzklassen modulo n sind. Die Operation +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 Funktionen verwendet, von denen man annimmt sie seien welche. Im Folgenden werden wir uns das RSAKryptosystem 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
3. Wähle eine kleine ungerade Zahl e, die teilerfremd zu φ(n) = n·
(p − 1) · (q − 1) ist
1
p0 |n (1− p0 )
Q
= p·q ·(1− p1 )·(1− 1q ) =
∗
4. Berechne das multiplikative Inverse d von e in der Gruppe Zφ(n)
(geht mit dem erweiterten euklidischen 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 zueinander Invers:
D(C(M )) = C(D(M )) = M e·d mod n
Beweis:
Aus dem chinesischen Restsatz folgt X ≡ M e·d
X ≡ M e·d
(mod n) g.d.w
(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
Der Beweis funktioniert analog für M ≡ M e·d (mod q)
(mod p).
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, wodurch 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ätzungen:
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 schnellen 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
Überraschenderweise stimmt die Umkehrung fast:
an−1 ≡ 1
(mod n) → n ist Primzahl
Der Ausdruck
M ODU LAR − EXP ON EN T IAT ION (2, n − 1, n) = 1
3
(mod p)
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. CarmichaelZahlen, 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) und x 6≡ −1 (mod n), dann ist n zusammengesetzt.
(mod n) mit x 6≡ 1
Den Beweis führe ich im Rahmen dieses Vortrags nicht mehr.
Wenn n die Zahl ist, die getestet werden soll, wird während der modularen Exponentation die Binärdarstellung der Zahl n-1 durchlaufen. Diese endet mit einer (ggf. auch leeren) Folge von Nullen. Also lässt sie
sich darstellen als n − 1 = u · 2t , wobei t dann der Anzahl der Nullen entspricht. Während der modularen
Exponentation von n − 1, wird also in den letzten t Schritten nur noch quadriert werden. Wenn währenddessen eine nichttriviale Wurzel von 1 entdeckt wird, kann n als zusammengesetzt identifiziert werden. Auf
dieser Basis werden wir eine Funktion erstellen, die für eine gegebene Basis prüft, ob diese ein Zeuge für
die Zusammengesetzheit einer gegebenen Zahl ist.
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
• M. Sipser: Introduction to the Theory of Computation. Boston 1997
• W. Willems: Codierungstheorie und Kryptographie. Basel 2008
4
Herunterladen