RSA

Aus Foxwiki

RSA (Rivest–Shamir–Adleman) ist ein asymmetrisches kryptographisches Verfahren, das sowohl zum Verschlüsseln als auch zum digitalen Signieren verwendet werden kann. Es verwendet ein Schlüsselpaar, bestehend aus einem privaten Schlüssel, der zum Entschlüsseln oder Signieren von Daten verwendet wird, und einem öffentlichen Schlüssel, mit dem man verschlüsselt oder Signaturen prüft. Der private Schlüssel wird geheim gehalten und kann nicht mit realistischem Aufwand aus dem öffentlichen Schlüssel berechnet werden.

Verfahren

Das Verfahren ist mit dem Rabin-Verschlüsselungsverfahren verwandt. Da es deterministisch arbeitet, ist es unter Umständen für bestimmte Angriffe anfällig. In der Praxis wird RSA daher mit dem Optimal Asymmetric Encryption Padding kombiniert.

Einwegfunktionen

Einwegfunktion Funktionen, bei denen eine Richtung leicht, die andere (Umkehrfunktion) schwierig zu berechnen ist, bezeichnet man als Einwegfunktionen (engl. one-way function). Beispielsweise ist nach aktuellem Wissensstand die Faktorisierung einer großen Zahl, also ihre Zerlegung in ihre Primfaktoren, sehr aufwändig, während das Erzeugen einer Zahl durch Multiplikation von Primzahlen recht einfach und schnell möglich ist. Spezielle Einwegfunktionen sind Falltürfunktionen (engl. trapdoor one-way function), die mit Hilfe einer Zusatzinformation auch rückwärts leicht zu berechnen sind.

Die Verschlüsselung und die Signatur mit RSA basieren auf einer Einwegpermutation mit Falltür (engl. trapdoor one-way permutation, kurz TOWP), einer Falltürfunktion, die gleichzeitig bijektiv, also eine Permutation, ist. Die Einwegeigenschaft begründet, warum die Entschlüsselung (bzw. das Signieren) ohne den geheimen Schlüssel (die Falltür) schwierig ist.

Erzeugung des öffentlichen und privaten Schlüssels

Die Schlüssel bestehen aus den drei Zahlen und . Man nennt den RSA-Modul, den Verschlüsselungsexponenten und den Entschlüsselungsexponenten. Das Zahlenpaar bildet den öffentlichen Schlüssel (public key) und das Paar den privaten Schlüssel (private key). Diese Zahlen werden durch das folgende Verfahren erzeugt:

  1. Wähle zufällig und stochastisch unabhängig zwei Primzahlen . Diese sollen die gleiche Größenordnung haben, aber nicht zu dicht beieinander liegen, sodass der folgende Rahmen ungefähr eingehalten wird: . (In der Praxis erzeugt man dazu solange Zahlen der gewünschten Länge und führt mit diesen anschließend einen Primzahltest durch, bis man zwei Primzahlen gefunden hat.)
  2. Berechne den RSA-Modul
  3. Berechne die Eulersche φ-Funktion von
  4. Wähle eine zu teilerfremde Zahl , für die gilt .
  5. Berechne den Entschlüsselungsexponenten als multiplikativ Inverses von bezüglich des Moduls , was mit dem erweiterten euklidischen Algorithmus erfolgen kann. Es soll also die Kongruenz gelten:

Die Zahlen , und werden nicht mehr benötigt und können nach der Schlüsselerstellung gelöscht werden. Es ist jedoch relativ einfach, diese Werte aus , und zu rekonstruieren. und müssen geheim gehalten werden.

Da die Primzahltests inzwischen ausreichend schnell sind, wählt man heutzutage zuerst einen kleinen Exponenten mit und verwirft bei der Erzeugung die Primzahlen , für die nicht teilerfremd zu sind. Die Wahl eines kleiner als die Fermat-Zahl kann zu Angriffsmöglichkeiten führen, etwa in Form des von Johan Håstad publizierten „Broadcast“-Angriffs, bei dem der Versand einer Nachricht an mehrere Empfänger zu einer Dechiffrierung über den chinesischen Restsatz führen kann.

Wenn weniger als ein Viertel der Bits des RSA-Moduls hat, kann – sofern nicht bestimmte Zusatzbedingungen erfüllt sind – mit einem auf Kettenbrüchen aufbauenden Verfahren effizient ermittelt werden. Bei der Wahl eines Exponenten kleiner als ist diese Möglichkeit jedoch ausgeschlossen.

Beispiel

  1. Wir wählen den Exponenten .
  2. Wir wählen und für die beiden Primzahlen. Die Zahlen und sind teilerfremd zum Exponenten .
  3. Der RSA-Modul ist . Damit bilden und den öffentlichen Schlüssel.
  4. Die eulersche φ-Funktion hat den Wert .
  5. Berechnung der Inversen zu modulo :
    Es gilt: ,
    im konkreten Beispiel: .
    Mit dem erweiterten euklidischen Algorithmus berechnet man nun die Faktoren und , und somit ist der private Schlüssel, während nicht weiter benötigt wird.

Verschlüsseln von Nachrichten

Verschlüsselung

Um eine Nachricht zu verschlüsseln, verwendet der Absender die Formel

und erhält so aus der Nachricht den Geheimtext . Die Zahl muss dabei kleiner sein als der RSA-Modul .

Beispiel

Es soll die Zahl 7 verschlüsselt werden. Der Sender benutzt den veröffentlichten Schlüssel des Empfängers , und rechnet

Das Chiffrat ist also .

Entschlüsseln von Nachrichten

Entschlüsselung

Der Geheimtext kann durch modulare Exponentiation wieder zum Klartext entschlüsselt werden. Der Empfänger benutzt die Formel

mit dem nur ihm bekannten Wert sowie .

Beispiel

Für gegebenes wird berechnet

Der Klartext ist also .

Signieren von Nachrichten

Um eine Nachricht zu signieren, wird vom Sender auf die Nachricht die RSA-Funktion mit dem eigenen privaten Schlüssel angewandt. Zum Prüfen wendet der Empfänger auf die Signatur mit Hilfe des öffentlichen Schlüssels des Senders die Umkehrfunktion an und vergleicht diese mit der zusätzlich übermittelten unverschlüsselten Nachricht . Wenn beide übereinstimmen, ist die Signatur gültig und der Empfänger kann 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. Aufgrund der Homomorphieeigenschaft von RSA ist dieses Signaturverfahren jedoch ungeeignet. Liegen zwei Signaturen , vor, so kann ein Angreifer daraus durch Multiplizieren die Signatur der Nachricht berechnen. Sogar aus nur einer Signatur kann ein Angreifer beliebig viele Nachrichten-Signatur-Paare erzeugen: ist ein solches Paar für beliebige .

Dieses Problem kann umgangen werden, indem nicht die Nachricht selbst signiert wird. Stattdessen wird mit einer zusätzlich zum Signaturverfahren spezifizierten kollisionsresistenten Hashfunktion der Hash-Wert der Nachricht berechnet. Dieser wird mit dem privaten Schlüssel signiert, um die eigentliche Signatur zu erhalten. Der Empfänger kann die so erhaltene Signatur mit dem öffentlichen Schlüssel verifizieren und erhält dabei einen Wert . Diesen vergleicht er mit dem von ihm selbst gebildeten Hashwert der ihm vorliegenden Nachricht . Wenn beide Werte übereinstimmen, kann mit hoher Wahrscheinlichkeit davon ausgegangen werden, dass die Nachricht fehlerfrei übertragen wurde und nicht gefälscht ist. Auch diese Modifikation erfüllt allerdings nicht die modernen Sicherheitsanforderungen, daher werden Verfahren wie RSA-PSS verwendet, um mit RSA zu signieren.

Vorlage:Siehe auch

RSA mit dem Chinesischen Restsatz

Mit Hilfe des Chinesischen Restsatzes können Nachrichten effizienter entschlüsselt oder signiert werden. Weil der Modul sehr groß ist, sind auch die im Rechner verwendeten Bitdarstellungen der Zahlen sehr lang. Der Chinesische Restsatz erlaubt es, die Berechnungen statt in einer Gruppe der Größe gleichzeitig in den zwei kleineren Gruppen der Größe und auszuführen und das Ergebnis danach wieder zusammenzusetzen. Da hier die Zahlen wesentlich kleiner sind, ist diese Berechnung insgesamt schneller. Diese Variante wird nach der englischen Bezeichnung des Chinesischen Restsatzes CRT (Chinese remainder theorem) auch CRT-RSA genannt.

Der private Schlüssel besteht dann im Gegensatz zu dem, was im Rest dieses Artikels angenommen wird, aus folgenden Komponenten:

  • , der RSA-Modul,
  • , der Entschlüsselungsexponent,
  • , die erste Primzahl,
  • , die zweite Primzahl (ungleich p),
  • , häufig dmp1 genannt,
  • , häufig dmq1 genannt und
  • , häufig iqmp genannt.

Eine Nachricht wird dann wie folgt signiert:

Aus der letzten Gleichung sieht man sofort, dass und . Die Signatur stimmt also sowohl als auch mit überein, daher ist nach dem Chinesischen Restsatz . (Bemerkung: Die Identität sieht man so: Modulo p gilt . Die letzte Identität folgt aus dem kleinen fermatschen Satz. Analog erhält man .)

RSA ist kein Primzahltest

Wenn Primzahlen sind, funktioniert das RSA-Verfahren. Umgekehrt kann aber aus dem funktionierenden RSA-Verfahren nicht geschlossen werden, dass der Modul das Produkt zweier Primzahlen und ist, denn mit Carmichael-Zahlen funktioniert das Verfahren auch.