Das RSA-Verschlüsselungsverfahren

Werbung
Das RSA-Verschlüsselungsverfahren
Allgemeines
RSA hat den Namen nach den Anfangsbuchstaben der Nachnamen seiner
Erfinder Ronald Rivest, Adi Shamir und Leonard Adelman bekommen. Rivest,
Shamir und Adleman haben das Verfahren 1977 entwickelt. Es gilt bis heute
als sicher.
Das Verfahren selbst braucht nicht geheim zu sein, da es auch dann nicht
möglich ist, eine verschlüsselte Nachricht zu knacken, wenn man weiss, dass
diese mit RSA verschlüsselt ist.
Dies erfüllt das Kerckhoff’sche Prinzip, nach welchem ein Verschlüsselungsverfahren nicht auf der Geheimhaltung des Verfahrens beruhen darf, sondern
nur auf der Geheimhaltung von einem oder mehreren Schlüsseln.
Die RSA-Verschlüsselung nutzt sogenannte „Einweg-Funktionen“. Man kann
diese Funktionen in eine Richtung sehr einfach berechnen, jedoch ist die Umkehrung der entsprechenden Funktion viel komplizierter.
Ein Beispiel für eine Einweg-Funktion ist die Multiplikation von Primzahlen. Es ist
sehr einfach, zwei Primzahlen zu multiplizieren. Wenn nun aber die Teiler einer
Zahl gesucht werden, wird es bereits viel schwieriger, da bisher kein brauchbarer (schneller) Algorithmus bekannt ist, um eine Zahl in ihre Primfaktoren zu
zerlegen. Der Aufwand für so eine Zerlegung steigt exponentiell mit der Vergrösserung der Primzahl. In der Praxis wird mit einem 300stelligen Produkt von
zwei Primzahlen gearbeitet. Dieses lässt sich auch mit sehr leistungsfähigen
Computern nicht in nützlicher Zeit faktorisieren. Würden die Computer leistungsfähiger, könnte man einfach die Zahlen vergrössern.
Die RSA-Verschlüsselung funktioniert genau deshalb, weil die Faktorisierung
einer solchen Primzahl nicht schnell genug möglich ist. Sollte ein Verfahren
gefunden werden, um effizient Zahlen in ihre Primfaktoren zerlegen zu können, wäre das RSA-Verfahren nicht mehr brauchbar.
1
Mathematisches Vorwissen
Um das RSA-Verfahren verstehen zu können, sind einige Begriffe notwendig:
Modulo:
Die Modulo-Operation liefert den Rest einer Division zweier ganzer Zahlen.
Statt „Modulo“ schreibt man entweder „mod“ oder „%“.
Beispiele:
7 % 2 = 1, da 7 : 2 = 3 Rest 1
30 % 15 = 0, da 30 : 15 = 2 Rest 0
44 % 15 = 14, da 44 : 15 = 2 Rest 14
Eulersche φ-Funktion:
Die Eulersche Funktion φ-Funktion φ(n) gibt an, wie viele positive, ganze Zahlen
kleiner gleich n zu n teilerfremd sind, d.h. dass ihr grösster gemeinsamer Teiler gleich 1
ist.
Beispiel:
φ (10)=4, da 1, 3, 7 und 9 zu 10 teilerfremd sind.
Für Primzahlen p gilt:
φ (p)=p-1.
Die Eulersche φ-Funktion ist multiplikativ. Das heisst, es gilt φ(p·q)= φ(p)· φ(q).
Für zwei Primzahlen p und q gilt also:
φ (p·q) = (p-1)·(q-1).
Der Euklidische Algorithmus
Der Euklidische Algorithmus wird verwendet, um den grössten, gemeinsamen
Teiler von zwei Zahlen zu finden. Er funktioniert folgendermassen:
Wir beginnen mit den beiden Zahlen a und b=r0, deren grösster gemeinsamer
Teiler bestimmt werden soll:
a=q1·r0+r1
In jedem weiteren Schritt wird mit dem Divisor und dem Rest des vorhergehenden Schritts eine erneute Division mit Rest durchgeführt und zwar solange,
bis eine Division aufgeht, das heisst, der Rest Null ist:
2
r0=q2·r1+r2
r1=q3·r2+r3
.
.
rn-1=qn+1·rn+0
Der Divisor rn der letzten Division ist dann der grösste gemeinsame Teiler.
Beispiel:
Berechnet werden soll der grösste gemeinsame Teiler von 2344 und 1234,
ggT(2344,1234).
2344
1234
1110
124
118
6
4
=
=
=
=
=
=
=
1·1234
1·1110
8·124
1·118
19·6
1·4
2·2
+
+
+
+
+
+
+
1110
124
118
6
4
2
0
Der grösste gemeinsame Teiler ist die 2.
Begründung:
Dieser Algorithmus funktioniert, weil für a=q1·r0+r1 folgende Gleichung gilt:
ggT(a,r0)=ggT(r0,r1).
(Der Beweis dieser Behauptung ist zu aufwändig, um hier behandelt werden
zu können.)
Der erweitert Euklidische Algrorithmus
Dieser Algorithmus liefert neben dem grössten gemeinsamen Teiler ggT(a,b)
noch zwei ganze Zahlen s und t, welche die folgende Gleichung erfüllen:
ggT(a,b)=s·a + t·b
Betrachten wir ein Beispiel zu a=99 und b=78. Der einfache euklidische Algorithmus liefert die folgende Folge von Divisionen mit Rest:
99
78
21
15
6
=
=
=
=
=
1·78
3·21
1·15
2·6
2·3
+
+
+
+
+
21
15
6
3
0
3 ist ein Teiler von 6 und damit der gesuchte größte gemeinsame Teiler von 99
und 78.
3
Nun kann man diese Gleichungen rückwärts lesen und den Rest jeweils als
Differenz der beiden anderen Terme darstellen. Setzt man diese Restdarstellungen rekursiv ineinander ein, so ergeben sich verschiedene Darstellungen
des letzten Restes 3. Wir beginnen mit der zweitletzten Zeile des euklidischen
Algorithmus und arbeiten uns dann von unten nach oben:
Der größte gemeinsame Teiler ist so als ganzzahlige Linearkombination der
beiden Ausgangszahlen 78 und 99 dargestellt.
Wir werden diesen Algorithmus für zwei Teilerfremde Zahlen verwenden. Damit
erhalten wir:
1 =s·a + t·b, was äquivalent ist zu:
1=( t·b) mod a
Begründung:
1 = s·a + t·b
<=>
1- s·a = t·b
Wird t·b nun durch a geteilt, ergibt dies das Resultat: -s Rest 1.
http://users.minet.uni-jena.de/~infotest/goldenerSchnitt/geschichte/euklid.html
4
Beispiel:
Gesucht ist der ggT(48,5), sowie t und s aus der Gleichung:
ggT(48,5)=t·48+s·5
5
Das RSA-Verfahren
Erzeugung des Schlüssels
Bevor man etwas verschlüsseln kann, müssen die Schlüssel (öffentlich und privat) generiert werden. Dazu werden folgende Schritte gemacht:
1. Wähle zufällig zwei grosse Primzahlen p und q und berechne n=p·q.
2. Berechne die Eulersche φ-Funkion von n:
φ(n)=(p-1)·(q-1)
3. Wähle zufällig eine Zahl e, welche zu φ(n) teilerfremd sein muss.
4. Berechne d>0, sodass gilt:
(d·e) mod φ(n) =1.
(Nach der Begründung auf der letzten Seite gilt: (d·e) mod φ(n) =1 ist
äquivalent zu 1= k· φ(n) + d·e. d kann also mit Hilfe des erweiterten euklidischen Algorithmus aus e und φ(n) berechnet werden.)
Damit haben wir alles, was wir für die Verschlüsselung brauchen:
Der öffentliche Schlüssel besteht aus e und n.
Der private Schlüssel besteht aus p, q, φ(n) und d, kann also aus p, q und e
berechnet werden.
Verschlüsselung
Der Klartext wird zuerst in Blöcke einer bestimmten Länge zerteilt. Jeder Block
wird als binäre Codierung einer Zahl M angeschaut. Diese Zahl muss kleiner
sein als n. (Sollte das nicht der Fall sein, muss die Nachricht in weitere Blöcke
aufgeteilt werden.) Aus dieser Zahl kann schliesslich der Code C berechnet
werden. Dies geschieht mit Hilfe der Formel:
C = Me mod n
Um etwas zu verschlüsseln reicht es also, wenn der öffentliche Schlüssel bekannt ist.
Entschlüsselung
Um den verschlüsselten Block zu entschlüsseln verwendet man folgende Formel:
M = Cd mod n
6
Sicherheit:
Auch wenn jemand (z.B. Bob) den öffentlichen Schlüssel von Alice kennt,
kann er Nachrichten an sie nur ver- aber nicht entschlüsseln. Dazu müsste er in
der Lage sei, aus dem Produkt n=p·q, p und q zu berechnen – und dies ist
nicht möglich, da es keinen effizienten Algorithmus zur Primfaktorzerlegung
gibt.
7
Beispiel zum RSA-Verfahren
Alice wählt die Primzahlen p=17 und q=11 für ihren Schlüssel. Diese beiden
Zahlen müssen geheim gehalten werden, da sonst der Schüssel nicht mehr
sicher ist.
Weiter wählt Alice e=7.
a) Gib an, weshalb 7 eine mögliche Wahl für e ist.
Wir nehmen an, dass die Nachricht, welche verschlüsselt werden soll in die
Zahl 88 umgewandelt werden kann.
b) Welche Grössen muss Bob kennen, um diese Nachricht für Alice zu verschlüsseln? (Welches ist also der öffentliche Schlüssel von Alice?)
c) Verschlüssele die Nachricht von Bob an Alice.
d) Alice erhält nun die Nachricht von Bob. Welche Grössen braucht sie,
um diese Nachricht zu entschlüsseln?
e) Berechne diejenigen Grössen, welche Alice für die Entschlüsselung
braucht.
f) Entschlüssele Bobs Nachricht für Alice.
8
Aufgaben zum RSA-Verfahren
Verschlüssele die folgenden Zahlen mit RSA und entschlüssele sie dann wieder.
Sollte dein Taschenrechner bei den grossen Zahlen an seine Grenzen stossen,
kannst du die Rechnungen auch mit einem Mathe-Programm machen. Die
Befehle für „a Modulo b“ lauten folgendermassen:
Maxima: mod (a,b); „Ctrl+Enter“
Wolfram alpha: a mod b
(Maxima lässt sich gratis downloaden, Worfam alpha kann online benutzt
werden: www.wolframalpha.com.)
Auf der Seite www.mathe-online.at/materialien/Franz.Embacher/files/RSA
kannst du die Lösungen der folgenden Aufgaben schrittweise eingeben und
auch nach jedem Schritt kontrollieren. Solltest du Schwierigkeiten bei den einzelnen Aufgaben haben, gibt es auch Erklärungen, welche angeklickt werden können.
Aufgabe 1
p=7
q=13
e=5
M=12
Aufgabe 2
p=3
q=17
e=5
M=15
Aufgabe 3
Hier muss bei der Suche von d speziell aufgepasst werden.
p=3
q=5
e=7
M=2
Aufgabe 4
p=5
q=11
e=3
M=10
9
Quellen
•
Skript von D. Kruse:
http://www.dkruse.de/dokumente/netzwerke/Sicher3_Asymm_Verschlu
esselung.pdf
•
Julian von Mendel: Facharbeit zum Thema RSA-Verschüsselung,
Schwabach, 2009
•
Freimuth, Hromkovic, Keller, Steffen: Einführung in die Kryptologie. Wiesbaden 2010
•
Wikipedia 2012:
http://de.wikipedia.org/wiki/Erweiterter_euklidischer_Algorithmus
http://de.wikipedia.org/wiki/Euklidischer_Algorithmus
10
Herunterladen