|
|||||||||
"Der RSA-Algorithmus" | |||||||||
RSA wurde 1975 von Diffie und Hellmann entdeckt und am MIT von Rivest, Shamir und Adleman weiterentwickelt. Es wurde 1977 veröffentlicht und gilt bis heute als sicher. Das Patent für die USA wird von der RSA Data Security Incorporation gehalten und ist im Jahr 2000 abgelaufen. Das Verfahren beruht auf der mathematischen Tatsache, dass eine sehr große natürliche Zahl nur sehr schwer faktorisiert werden kann. Im Wesentlichen beruht es auf folgenden Überlegungen: Es sei n = p * q das Produkt zweier großer verschiedener Primzahlen ("groß" soll bedeuten, dass der zu erwartende Gegner unter Computer-Einsatz nicht in zumutbarer Zeit in der Lage ist, n in die Primfaktoren zu zerlegen). Dann ist j (n) = (p-1) * (q-1). Sei nun e so gewählt, dass ggT(e, j (n)) = 1, d.h. ggT(e, p-1) = ggT(e, q-1) = 1. Dann existiert d = e-1 in Zj (n) und kann etwa durch Umkehrung des euklidschen Algorithmus praktisch berechnet werden. Die Nachrichten mögen als Elemente von Zn vorliegen. Dann verschlüsseln wir x Î Zn durch die Funktion E(x) = xe(n). Diese Abbildung E: Zn ® Zn ist bijektiv: Die Funktion D: Zn ® Zn mit D(x) = xd(n) ist nämlich invers, und kann daher zum Entschlüsseln verwendet werden: D(E(x)) = (xe)d(n) = xed(n) = x1+k * j (n) = (xj (n))k * x º x(n), da n quadratfrei ist. Für die praktische Anwendung mit r Benutzern verwendet man entsprechend r Werte e1, ..., er mit ggT(ei,j (n)) = 1 und die dazu inversen d1, ..., dr in Zj (n). Öffentlich bekanntgegeben werden n, sowie e1, ..., er (in einer Art "Telefonbuch"). Geheimgehalten werden p, q, d1, ..., dr. Nur der i-te Benutzer erfährt di. Will nun Benutzer i an Benutzer j eine Botschaft senden, so verschlüsselt er sie als y = Ej(x) = xej(n). Nur Benutzer j kennt dj und erhält daher mit Dj(y) = ydj(n) den Klartext. Das System kann auch dazu verwendet werden, um die geheime Nachricht mit einer Unterschrift zu versehen, die dem j-ten Benutzer garantieren soll, dass die Nachricht vom i-ten Benutzer stammt. Dazu sendet i an j die Nachricht Ej(Di(x)) = xdi * ej(n). Benutzer j wendet das nur ihm bekannte Dj an: Dj(Ej(Di(x)) = Di(x). Anschließend überprüft er mit der im Telefonbuch vorhandenen Funktion Ei, ob Ei(Di(x)) = x einen sinnvollen Text und damit den Klartext ergibt, so dass die Nachricht vom Benutzer i stammen muss, da nur dieser Di kennt. Um das System direkt zu brechen, d.h. die Funktion Di berechnen zu können, ist die sehr große Zahl n in Primfaktoren zu zerlegen, wofür bis heute kein in polynomialer Zeit arbeitender Algorithmus bekannt ist. Dessen ungeachtet kann bei der Wahl von p, q, e und d nach den obigen Vorschriften dennoch ein sehr leicht zu brechendes System entstehen, wenn die Abbildung E(x) in Zn viele Fixpunkte besitzt, d.h. für viele x Î Zn gilt: xe º x(n). Wie wir wissen, kann die maximale Ordnung l(n) eine Elements in E(Zn) wesentlich kleiner als j(n) sein, so dass im Extremfall E(x) sogar die identische Abbildung sein kann. Abschließend ein Auszug eines Artikel aus dem Jahr 1999: "Ein Forscherteam unter Leitung des niederländischen National Research Institute for Mathematics and Computer Science CWI hat den populären 512-Bit RSA-Schlüssel RSA-155 geknackt. Der RSA-155-Code schützt derzeit in der Hauptsache Emails sowie Kreditkarten-Transaktionen. Zum Knacken des Codes benötigten die Forscher allerdings eine Cray
900-16 und 300 PCs/Workstations im Wert von mehreren Millionen Dollar.
Benötigt wurde insgesamt eine Rechenzeit von 35 Jahren - bei Einführung
des RSA vor 25 Jahren schätzte man die benötigte Rechenzeit auf 50
Milliarden Jahre." | |||||||||
|