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