RSA-Kryptosystem
Das RSA-Kryptosystem ist ein asymmetrisches Kryptosystem, d. h. es verwendet verschiedene Schlüssel zum Ver- und Entschlüsseln. Es ist nach seinen Erfindern Ronald L. Rivest, Adi Shamir und Leonard Adleman benannt.
Wirtschaftliche und politische Bedeutung, Vorgeschichte
Die immense wirtschaftliche Bedeutung von RSA resultiert aus der Lösung des Schlüsselverteilungsproblems. Bis zur Anwendung von RSA und den neueren asymmetrischen Verschlüsselungssystemen mussten aufwendig Schlüssel- und Codebücher zu den entfernten Kommunikationspartnern (z.B. Handelspartnern, Internet-Kommunikationspartnern, Botschaften, exterritoriale Militäreinrichtungen, U-Booten) mit immensen (Sicherheits-)Kosten transportiert werden. Dieser Weg bedeutete darüber hinaus die größte logistische Schwachstelle der konventionellen symmetrischen Verschlüsselungssysteme. Bis in die 1970er Jahre hielt man dieses Problem prinzipiell nicht für lösbar. Die logistische Schwachstelle hat bei mehreren staatlichen Auseinandersetzungen und Kriegen den Ausgang (mit-)entschieden, so durch Aktivitäten z.B. von Alan Turing und anderen in Bletchley Park im Zweiten Weltkrieg. In Nachfolgeeinrichtungen wurde Anfang der 1970er Jahre von Ellis, Cocks und Williamson ein dem späteren Verfahren von Diffie-Hellman ähnliches asymmetrisches Verfahren entwickelt, welches aber in seiner Bedeutung nicht erkannt und aus Geheimhaltungsgründen nicht (wissenschaftlich) publiziert und auch nicht zum Patent angemeldet wurde.
Für die Verschlüsselung größerer Datenmengen werden hauptsächlich symmetrische Verfahren, wie z. B. AES oder sichere Varianten von DES eingesetzt. Der Grund hierfür ist hauptsächlich ihre deutlich höhere Geschwindigkeit. Asymmetrische Verfahren, wie zum Beispiel RSA, werden aber häufig bei der Initialisierung der symmetrisch verschlüsselten Datenübertragung eingesetzt. In diesen Fall spricht man von hybriden Verfahren.
Verfahren
Nachdem Whitfield Diffie und Martin Hellman eine Theorie zur Public-Key-Kryptografie veröffentlicht hatten, versuchten die drei Mathematiker Rivest, Shamir und Adleman, die Annahmen von Diffie und Hellmann zu widerlegen. Nachdem sie den Beweis bei verschiedenen Verfahren durchführen konnten, stießen sie schließlich auf eines, bei dem sie keinerlei Angriffspunkte fanden. Hieraus entstand dann RSA.
Das Verfahren wurde 1977 entwickelt und basiert auf der Idee, dass die Faktorisierung einer großen Zahl, also ihre Zerlegung in (mindestens zwei) Faktoren, eine sehr aufwändige Angelegenheit ist, während das Erzeugen einer Zahl durch Multiplikation zweier Primzahlen trivial ist. Wenn nun eine Nachricht einem Empfänger verschlüsselt zugeleitet werden soll, generiert dieser einen öffentlichen Schlüssel. Der Nachrichtenabsender verwendet diesen öffentlich bekanntgemachten Schlüssel, indem er damit seine Botschaft verschlüsselt. Nur der Empfänger kann diese "dekodieren", da nur er die "Zusammensetzung" des von ihm erzeugten (öffentlichen) Schlüssels kennt.
Einwegfunktionen
Funktionen wie die Multiplikation/Faktorisierung, bei denen eine Richtung leicht, die andere schwierig zu berechnen ist, bezeichnet man als Einwegfunktionen (engl. one way function). Um allerdings die Entschlüsselung tatsächlich möglich zu machen, muss es sich um Falltürfunktionen (engl. trap door function) handeln, die mit Hilfe einer Zusatzinformation auch rückwärts leicht zu berechnen sind.
Das Verfahren ist mit dem Rabin-Verschlüsselungsverfahren verwandt.
Algorithmus
- Wähle zufällig und stochastisch unabhängig zwei Primzahlen p ≠ q, die etwa gleich lang sein sollten und berechne deren Produkt N = p·q.
In der Praxis werden diese Primzahlen durch Raten einer Zahl und darauffolgendes Anwenden eines Primzahltests bestimmt. - Berechne φ(N) = (p-1) · (q-1), wobei φ für die Eulersche φ-Funktion steht.
- Wähle eine Zahl 1 < e < φ(N), die teilerfremd zu φ(N) ist.
- Berechne die Zahl d so, dass das Produkt e·d kongruent 1 bezüglich des Modulus φ(N) ist, dass also e·d ≡ 1 (mod φ(N)) gilt.
Der öffentliche Schlüssel (public key) besteht dann aus- N, dem Primzahlprodukt sowie
- e, dem öffentlichen Exponenten.
Der private Schlüssel (private key) besteht aus- d, dem privaten Exponenten sowie
- N, welches allerdings bereits durch den öffentlichen Schlüssel bekannt ist.
p, q und φ(N) werden nicht mehr benötigt und sollten nach der Schlüsselerstellung auf sichere Weise gelöscht werden.
Ein Zahlenbeispiel:
- Für die beiden Primzahlen p und q nehmen wir p = 11 und q = 13. Damit wird N = 143.
- Die Eulerfunktion nimmt damit den Wert φ(N) = φ(143) = (p-1)(q-1) = 120 an.
- Für die zu φ(143) = 120 teilerfremde neue Zahl e wähle man e = 23.
- Mit diesen Werten erhalten wir die Bedingung: (23·d) mod 120 ≡ 1. Das heißt: Das Produkt soll bei Division durch 120 den Rest 1 lassen. Man kann damit die Kongruenz als Gleichung schreiben: 23·d = k·120 + 1. Dabei ist k eine ganze Zahl. Als eine Lösung dieser diophantischen Gleichung 120·k - 23·d = -1 ergibt sich d = 47 und k = 9. Damit wird d = 47 der geheime Schlüssel, e = 23 und N = 143 der öffentliche Schlüssel.
Exkurs: Alternativer privater Schlüssel
Gewöhnlich wird in der Praxis der private Schlüssel etwas ausführlicher gespeichert, da diese Form der Speicherung das Entschlüsseln von Krypttexten effizienter macht (mit Hilfe des Chinesischen Restsatzes). Der private Schlüssel besteht daher dann im Gegensatz zu dem, was im Rest dieses Artikels angenommen wird aus folgenden Komponenten:
- N, der Modulus,
- d, der sogenannte private Exponent,
- p, die erste Primzahl,
- q, die zweite Primzahl,
- d mod (p-1), häufig dmp1 genannt,
- d mod (q-1), häufig dmq1 genannt und
- (1/q) mod p, häufig iqmp genannt.
Verschlüsseln von Nachrichten
Um eine Nachricht K zu verschlüsseln, verwendet der Absender die Formel
und erhält so aus dem Klartext K den Geheimtext C.
Beispiel
Es soll die Zahl 7 verschlüsselt werden.
Der Nachrichtenabsender benutzt den veröffentlichten Schlüssel N = 143, e = 23 und rechnet
Zur Berechnung von mod 143 kann die Kongruenzarithmetik verwendet werden. Mit Hilfe der modularen Exponentiation berechnet man schnell:
Dabei wendet man nach jedem Rechenschritt auf die zu handhabenden Zahlen die Modulo-Operation (kurz: mod) an, um die Ergebnisse möglichst "klein" zu halten.
Aus dem Klartext 7 ist somit der Geheimtext 2 geworden.
Entschlüsseln von Nachrichten (Decodierung)

Der Geheimtext C kann durch modulare Exponentiation wieder zum Klartext K entschlüsselt werden. Der Empfänger benutzt die Formel
mit dem nur ihm bekannten Wert d sowie N.
Beispiel
K ≡ 247 mod 143 = ((((22)2·2)2·2)2·2)2·2 mod 143 = 7
Aus C = 2 wird also wieder K = 7.
Siehe auch Schnelles Potenzieren
Signieren von Nachrichten
Um eine Nachricht K zu signieren, wird diese mit dem eigenen privaten Schlüssel verschlüsselt. Zum Prüfen der Signatur entschlüsselt der Empfänger die Nachricht mit dem öffentlichen Schlüssel des Senders und vergleicht diese mit dem empfangenen K. Wenn sie nicht übereinstimmen, ist die Signatur ungültig. Ist die Signatur gültig, dann kann sich der Empfänger sicher sein, dass derjenige, der das Dokument signiert hat, auch den privaten Schlüssel besitzt und dass niemand seit der Signierung das Dokument geändert hat. Es wird also die Integrität und Authentizität garantiert, vorausgesetzt der private Schlüssel ist wirklich geheim geblieben.
Da asymmetrische Verfahren nicht geeignet sind um größere Datenmengen zu verschlüsseln, wird in der Praxis nicht die Nachricht selbst mit dem privaten Schlüssel verschlüsselt. Stattdessen wird der Hashwert H der Nachricht berechnet. Dieser bildet, meist zusammen mit einigen technisch notwendigen Informationen, wie z. B. das verwendete Hashverfahren, die Eingabe K* der Verschlüsselung mit dem privaten Schlüssel. Diese liefert die eigentliche Signatur. Der Empfänger kann nun mit dem öffentlichen Schlüssel und der Signatur K* bestimmen. Anschließend kann er selber den Hashwert der Nachricht bestimmen und mit dem in K* gespeicherten vergleichen. Wenn die beiden Werte übereinstimmen, kann mit hoher Sicherheit davon ausgegangen werden, daß die Nachricht fehlerfrei übertragen wurde und nicht gefälscht ist.
Siehe auch Elektronische Unterschrift
Sicherheit
Theoretische Sicherheit
Angenommen, der Angreifer kennt lediglich den öffentlichen Schlüssel, also die Werte und . Um den Geheimtext zu entschlüsseln, benötigt er zusätzlich oder einen zu kongruenten Wert.
Wenn der Angreifer kennen würde, könnte er leicht berechnen. Eine Möglichkeit dazu ist die Zerlegung von in seine beiden Primfaktoren und . Diese Primfaktorzerlegung ist für große Zahlen mit den heute bekannten Verfahren praktisch nicht durchführbar. Es ist aber nicht bewiesen, dass es sich bei der Primfaktorzerlegung um ein prinzipiell schwieriges Problem handelt. Im Gegenteil, der Shor-Algorithmus für Quantencomputer leistet dies in Polynominalzeit. Sollte es also gelingen, einen funktionierenden Quantencomputer mit ausreichend Qubits zu konstruieren, wäre RSA nicht mehr sicher. Aber auch mit klassischer Rechentechnik lassen sich mit modernen Algorithmen relativ große Zahlen faktorisieren. So gelang es z. B. Mathematikern der Universität Bonn 2005, im Rahmen eines Wettbewerbs eine einzelne von den RSA Laboratories vorgegebene 200-stellige Dezimalzahl zu faktorisieren. Die Faktorisierung begann Ende 2003 und dauerte bis Mai 2005. Unter anderem kam ein Rechnerverbund von 80 2.2-GHz-Rechnern an der Universität Bonn zum Einsatz. Dies ist aber noch ein gutes Stück von den mindestens 300 Dezimalstellen heute üblicher Schlüssel entfernt. Im November 2005 zahlten RSA Laboratories für die Faktorisierung von RSA-640, einer Zahl mit 640 Bits bzw. 193 Dezimalstellen, eine Prämie von 20.000 US-$. Für die Faktorisierung von RSA-1024 (309 Dezimalstellen) oder gar RSA-2048 (617 Dezimalstellen) sind 100.000 $ bzw. 200.000 $ ausgelobt. Die wachsende Rechenleistung moderner Computer stellt für die Sicherheit von RSA kein Problem dar, zumal diese Entwicklung vorhersehbar ist: Der Nutzer kann bei der Erzeugung seines Schlüsselpaares darauf achten, dass die zu zerlegende Zahl groß genug ist, um während der Dauer der beabsichtigten Verwendung nicht berechnet werden zu können. Problematisch sind nicht vorhersehbare Entwicklungen wie z. B. die Fertigstellung des Quantencomputers oder die Entdeckung eines genialen Algorithmus für klassische Hardware. Beides ist sehr unwahrscheinlich, wobei ersteres jederzeit passieren könnte und letzteres derzeit nicht ausgeschlossen werden kann.
Darüber hinaus konnte noch nicht bewiesen werden, dass der Angreifer überhaupt das Faktorisierungsproblem lösen muss, um die Verschlüsselung zu knacken. Möglicherweise gibt es einen viel einfacheren Weg, zu bestimmen, ohne vorher zu berechnen. Es könnte also sein, dass RSA weniger schwierig als das Faktorisierungsproblem zu lösen ist. Das System von Williams ist ein Public-Key-System, für das bewiesen ist, dass es mindestens so schwierig ist wie das Faktorisierungsproblem.
Praktische Sicherheit
Bei der RSA-Verschlüsselung findet eine deterministische Substitution des Klartextes durch den Geheimtext statt. Es ist daher grundsätzlich möglich, den Klartext durch Wahrscheinlichkeitsanalyse und Known-Plaintext-Angriffe zu ermitteln, da ein Klartext immer genau einem Geheimtext zugeordnet wird (ECB, Electronic Codebook). Das auf RSA aufbauende Übertragungsprotokoll muss daher für Abhilfe sorgen, zum Beispiel in Form von Pseudozufall, der an im Protokollstandard definierten Stellen eingefügt und vom Empfänger nach Entschlüsselung wieder entfernt wird.
Bei der Implementation der Schlüsselerzeugung muss darauf geachtet werden, dass die benutzten Primzahlen und der Faktor e tatsächlich so erzeugt werden, dass die Auswahl nicht aus einer kleinen Menge von möglichen Kandidaten erraten werden kann. Hierzu reichen einfache Zufallszahlengeneratoren in der Regel nicht aus.
RSA wird in der Regel in Hybridverfahren mit symmetrischen Verschlüsselungsverfahren gemischt. Dabei wird zufällig ein Sitzungsschlüssel für eine symmetrische Verschlüsselung generiert, der dann per RSA verschlüsselt und zusammen mit der Nachricht übertragen wird. Der symmetrische Schlüssel ist dabei relativ kurz, so dass der oben beschriebene Angriff mit Wahrscheinlichkeitsanalyse oder Known-Plaintext-Analyse erschwert wird. Voraussetzung ist aber auch hier, dass das Verfahren zur Erzeugung des symmetrischen Schlüssels den gesamten Schlüsselraum mit gleicher Wahrscheinlichkeit abdeckt.
Die Sicherheit von RSA basiert entscheidend darauf, dass die Primfaktorzerlegung des bekannt gegebenen Produktes der beiden geheimen Primzahlen nicht möglich ist. Es wurden inzwischen eine Reihe von Algorithmen entwickelt, die das Problem der Primfaktorzerlegung lösen. Diese sind je nachdem, welche Faktoren die zu untersuchende Zahl tatsächlich hat unterschiedlich schnell. Bei der Wahl der Primzahlen wird deshalb darauf geachtet, dass kein Algorithmus bekannt ist, der das Produkt der beiden Primzahlen schnell zerlegen kann. Man wählt die Primzahlen also so, dass möglichst alle bekannten Faktorisierungsalgorithmen in ihren schlechtesten Fall gezwungen werden.
Beweis
Um die Funktionstüchtigkeit des RSA-Verfahrens zu zeigen, muss folgende Kongruenz bewiesen werden.
wobei
gilt.
Aus folgt aus dem erweitertem Euklidischen Algorithmus, dass und weiters gilt (für ein bestimmtes u).
Für alle a mit ist diese Kongruenz nach dem Satz von Euler-Fermat erfüllt, da
Übrig bleibt noch die Kongruenz für alle a mit zu zeigen. oBdA nehmen wir an, dass (a ist ein Vielfaches von p). Der Beweis für den Fall, dass a von q geteilt wird läuft analog.
Wir erhalten folgende 2 Kongruenzen:
- , da a von p geteilt wird.
- , nach dem kleinen Satz von Fermat
Nach dem chinesischem Restsatz folgt nun .
Optimierung
Es ist nicht notwendig e derart zu bestimmen, dass die Kongruenz erfüllt wird.
Vielmehr reicht es aus e derart zu bestimmen, dass die Kongruenz erfüllt wird. Der Vorteil bei diesem Verfahren liegt in der Größe des Modulus für die Berechnung von d, weil dieser nun kleiner geworden ist und dadurch die Berechnung von d schneller durchgeführt werden kann.
Für die Zahlen und ergibt 120. Das kleinste gemeinsame Vielfache von und ist lediglich 60 (es muss ja ein Teiler von 120 sein) und somit maximal halb so groß wie das Ergebnis der Phi-Funktion, da und zumindest den Faktor 2 gemeinsam haben. In Binärdarstellung ist somit das kgV zumindest um ein Bit kürzer.
Beweis
Der Beweis läuft großteils analog zum Beweis für das originale RSA-System. Es existiert lediglich folgender Unterschied.
Da der kgV ein Vielfaches von p-1 und q-1 ist, gelten folgende 2 Regeln:
Wir unterscheiden 3 Fälle.
Fall 1:
Hierbei erhalten wir 2 Kongruenzen:
- , nach dem kleinen Satz von Fermat
- , nach dem kleinen Satz von Fermat
Nach dem chinesischem Restsatz folgt nun .
Fall 2:
- , da a von p geteilt wird.
- , nach dem kleinen Satz von Fermat
Nach dem Chinesischen Restsatz folgt wiederum .
Fall 3:
analog zu Fall 2
RSA ist kein Primzahltest
Wenn p und q Primzahlen sind funktioniert das RSA-Verfahren. Umgekehrt kann aber aus dem funktionierenden RSA-Verfahren nicht geschlossen werden, dass p und q Primzahlen sind, denn bei Carmichael-Zahlen funktioniert das Verfahren, obwohl Carmichael-Zahlen keine Primzahlen sind.
Beweis
Gegeben:
- , wobei eine Carmichael-Zahl ist
- , Eigenschaft von Carmichael-Zahlen
- , fälschliche Annahme, da angenommen wird, dass c eine Primzahl ist
- , weil von geteilt wird
Zu zeigen:
Betrachten wir nun den Primteiler p
Fall 1:
Fall 2:
Betrachten wir nun die Primteiler q_i von c_i
Fall 1:
Fall 2:
Unabhängig von der Zahl a folgt aus dem dem chinesischem Restsatz,dass .
Dieser Beweis hält offensichtlich auch dann stand, wenn n das Produkt von 2 Carmichael-Zahlen ist.
Vollständiges Beispiel
Vorarbeiten
Die oben genannten Schritte sollen nun an einem vollständigen Beispiel erläutert werden. Um einen Text zu verschlüsseln, müssen zunächst Buchstaben in Zahlen umgewandelt werden. Dazu verwendet man in der Praxis z.B. den ASCII-Code. Hier sei willkürlich die folgende Zuordnung gewählt:
A=01 B=02 C=03 usw. (00 = Leerzeichen)
Darüberhinaus sei angenommen, dass jeweils 3 Zeichen zu einer Zahl zusammengefasst werden. Die Buchstabenfolge AXT wird also zu 012420. Die kleinste zu verschlüsselnde Zahl ist dann 000000 (drei Leerzeichen), die größte 262626 (ZZZ). Der Modulus N = p * q muss also größer 262626 sein.
Klartext: W I K I P E D I A Kodierung: 230911 091605 040901
Schlüsselerzeugung
Zunächst werden geheim zwei Primzahlen gewählt, z.B. p=307 und q=859. Damit ergibt sich:
N = p · q = 263713
φ(N) = (p-1) · (q-1) = 262548
e = 1721 (zufällig, teilerfremd zu φ(N))
d = 1373 (das multiplikative Inverse zu e mod φ(N) mit Hilfe des Erweiterten euklidischen Algorithmus)
Öffentlicher Schlüssel: e = 1721 und N = 263713
Geheimer Schlüssel: d = 1373 und N = 263713
Verschlüsselung
Cn = Kne mod N für n=1,2,3(,...) C1 = 2309111721 mod 263713 C1 = 001715 C2 = 0916051721 mod 263713 C2 = 184304 C3 = 0409011721 mod 263713 C3 = 219983
Entschlüsselung
Kn = Cnd mod N für n=1,2,3(,...) K1 = 0017151373 mod 263713 K1 = 230911 K2 = 1843041373 mod 263713 K2 = 091605 K3 = 2199831373 mod 263713 K3 = 040901
Signatur (Verschlüsselung mit dem geheimen Schlüssel)
Cn = Knd mod N C1 = 2309111373 mod 263713 C1 = 219611 C2 = 0916051373 mod 263713 C2 = 121243 C3 = 0409011373 mod 263713 C3 = 138570
Verifikation (Entschlüsselung mit dem öffentlichen Schlüssel)
Kn = Cne mod N K1 = 2196111721 mod 263713 K1 = 230911 K2 = 1212431721 mod 263713 K2 = 091605 K3 = 1385701721 mod 263713 K3 = 040901
Anwendungsgebiete
- Internet- und Telefonie-Infrastruktur: X.509-Zertifikate
- Übertragungs-Protokolle: IPSec, TLS, SSH, WASTE
- E-Mail-Verschlüsselung: PGP, S/MIME
- Authentifizierung französischer Telefonkarten
- Kartenzahlung: EMV