Die RSA-Verschlüsselung ist eines der bekanntesten Verfahren der asymmetrischen Kryptographie. Sie wurde 1977 von Ron Rivest, Adi Shamir und Leonard Adleman entwickelt und bildet seitdem die Grundlage für sichere Datenübertragungen im Internet, etwa bei HTTPS, E‑Mail‑Sicherheit und digitalen Signaturen. In diesem Beitrag werden wir die Funktionsweise von RSA Schritt für Schritt erläutern – von der Schlüsselgenerierung über die Verschlüsselung bis hin zur Entschlüsselung und Signaturverifikation. Wir gehen dabei auf die mathematischen Grundlagen ein, zeigen typische Implementierungsdetails und diskutieren die Sicherheit des Verfahrens in der Praxis.
1. Mathematische Grundlagen
RSA basiert auf der Schwierigkeit, große Zahlen zu faktorisieren. Das Verfahren nutzt zwei Primzahlen (p) und (q), deren Produkt (n = p \times q) als Modulus dient. Der öffentliche Schlüssel besteht aus ((n, e)), wobei (e) eine kleine Primzahl (häufig 65537) ist, die als Exponent verwendet wird. Der private Schlüssel ist ((n, d)), wobei (d) das multiplikative Inverse von (e) modulo (\phi(n)) ist, wobei (\phi(n) = (p-1)(q-1)) die Eulersche Phi‑Funktion von (n) darstellt.

1.1 Primzahlenwahl
Die Wahl der Primzahlen (p) und (q) ist entscheidend. Sie müssen groß genug sein, um die Sicherheit zu gewährleisten, aber gleichzeitig dürfen sie nicht zu nahe beieinander liegen, da dies die Faktorisierung erleichtern könnte. Moderne Implementierungen nutzen Zufallszahlengeneratoren, die kryptografisch sicher sind, um Primzahlen zu erzeugen. Oft werden sogenannte „probable primes“ verwendet, die mit dem Miller–Rabin-Test auf Primzahlstatus geprüft werden.
1.2 Berechnung von (\phi(n))
Die Eulersche Phi‑Funktion (\phi(n)) gibt die Anzahl der positiven ganzen Zahlen kleiner als (n), die zu (n) teilerfremd sind. Für ein Produkt zweier Primzahlen ist (\phi(n) = (p-1)(q-1)). Diese Größe ist für die Berechnung des privaten Exponenten (d) unerlässlich, da (d) das multiplikative Inverse von (e) modulo (\phi(n)) ist.
2. Schlüsselgenerierung
Die Schlüsselgenerierung ist der erste Schritt im RSA-Prozess. Sie umfasst die Auswahl von (p) und (q), die Berechnung von (n) und (\phi(n)), die Wahl von (e) und die Berechnung von (d).

2.1 Auswahl von (p) und (q)
Die Primzahlen (p) und (q) werden üblicherweise als 1024‑ oder 2048‑Bit‑Zahlen gewählt. Sie sollten zufällig und unabhängig voneinander sein. Die Sicherheit hängt stark von der Größe dieser Zahlen ab; je größer, desto schwieriger ist die Faktorisierung.
2.2 Berechnung von (n) und (\phi(n))
Nach der Auswahl von (p) und (q) wird (n = p \times q) berechnet. Anschließend folgt die Berechnung von (\phi(n) = (p-1)(q-1)). Diese Werte werden im öffentlichen Schlüssel gespeichert, während (p) und (q) geheim bleiben.
2.3 Wahl des Exponenten (e)
Der Exponent (e) wird häufig auf 65537 gesetzt, weil er eine kleine Primzahl ist, die die Berechnungen beschleunigt, und gleichzeitig die Sicherheit gewährleistet. Es ist jedoch wichtig, dass (e) teilerfremd zu (\phi(n)) ist.
2.4 Berechnung des privaten Exponenten (d)
Der private Exponent (d) ist das multiplikative Inverse von (e) modulo (\phi(n)). Das bedeutet, dass (d \times e \equiv 1 \pmod{\phi(n)}). Die Berechnung erfolgt üblicherweise mit dem erweiterten euklidischen Algorithmus.
3. Verschlüsselung
Sobald die Schlüsselpaare erstellt sind, kann RSA zur Verschlüsselung von Daten verwendet werden. Der Prozess nutzt die mathematische Operation der modularen Exponentiation.

3.1 Modulare Exponentiation
Die Verschlüsselung eines Klartextes (m) (als Zahl zwischen 0 und (n-1)) erfolgt durch die Berechnung: [ c = m^e \mod n ] Hierbei ist (c) der Chiffretext. Die Modulo‑Operation sorgt dafür, dass das Ergebnis immer kleiner als (n) bleibt, während die Exponentiation die Daten verschlüsselt.
3.2 Padding-Mechanismen
Reine RSA‑Verschlüsselung ist anfällig für verschiedene Angriffe, wenn der Klartext nicht gepolstert wird. Deshalb wird in der Praxis immer ein Padding‑Schema wie OAEP (Optimal Asymmetric Encryption Padding) verwendet. OAEP fügt dem Klartext zufällige Daten hinzu, bevor die exponentielle Operation ausgeführt wird, und verhindert so Kryptoanalyse‑Angriffe.
3.3 Praktische Umsetzung
In modernen Programmiersprachen wird RSA häufig über Bibliotheken wie OpenSSL, Bouncy Castle oder PyCryptodome implementiert. Diese Bibliotheken kapseln die mathematischen Operationen und stellen sicher, dass Padding korrekt angewendet wird. Ein typischer Code‑Schnipsel in Python könnte so aussehen:
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from Crypto.Random import get_random_bytes
key = RSA.generate(2048)
cipher = PKCS1_OAEP.new(key.publickey())
plaintext = b'Geheime Nachricht'
ciphertext = cipher.encrypt(plaintext)
4. Entschlüsselung
Die Entschlüsselung nutzt den privaten Schlüssel, um den Chiffretext zurück in Klartext zu konvertieren.

4.1 Mathematische Umkehrung
Die Entschlüsselung erfolgt durch: [ m = c^d \mod n ] Da (d) das Inverse von (e) modulo (\phi(n)) ist, kehrt diese Operation die Verschlüsselung exakt um. Der Chiffretext (c) wird also wieder in den ursprünglichen Klartext (m) zurückverwandelt.
4.2 Padding‑Entfernung
Nach der modularen Exponentiation muss das Padding entfernt werden. Das Padding‑Schema (z. B. OAEP) wird verwendet, um die ursprüngliche Nachricht zu extrahieren. Wenn das Padding nicht korrekt entfernt wird, führt dies zu Fehlern oder unleserlichen Daten.
4.3 Sicherheit der Entschlüsselung
Da der private Schlüssel geheim gehalten wird, ist die Entschlüsselung für Außenstehende praktisch unmöglich. Die Sicherheit beruht auf der Annahme, dass die Faktorisierung von (n) nicht praktikabel ist. Moderne Hardware‑Beschleuniger können die exponentielle Berechnung beschleunigen, ohne die Sicherheit zu beeinträchtigen.
5. Digitale Signaturen mit RSA
RSA wird nicht nur zur Verschlüsselung verwendet, sondern auch zur Erstellung digitaler Signaturen. Dabei wird ein Hash‑Wert des Dokuments mit dem privaten Schlüssel signiert, sodass jeder mit dem öffentlichen Schlüssel die Echtheit prüfen kann.

5.1 Signaturprozess
- Hash‑Berechnung: Der zu signierende Text wird mit einem kryptografischen Hash‑Algorithmus (z. B. SHA‑256) gehasht.
- Signatur: Der Hash wird mit dem privaten Schlüssel signiert: [ s = h^d \mod n ] wobei (h) der Hashwert ist.
- Verifikation: Der Empfänger berechnet (h‘ = s^e \mod n) und vergleicht ihn mit dem Hash des empfangenen Textes. Stimmen die Werte überein, ist die Signatur gültig.
5.2 Anwendungsfälle
RSA‑Signaturen werden in SSL/TLS‑ bíndungen, Code‑Signing, E‑Mail‑Sicherheit (PGP) und in vielen Zertifikatsinfrastrukturen eingesetzt. Sie gewährleisten nicht nur die Vertraulichkeit, sondern auch die Integrität und Authentizität von Daten.
6. Praktische Anwendungen und Sicherheit
RSA ist in vielen Bereichen des Internets unverzichtbar. Dennoch gibt es wichtige Aspekte, die bei der Implementierung beachtet werden müssen.
6.1 HTTPS und TLS
In HTTPS wird RSA häufig zur Schlüsselvereinbarung verwendet, wobei der eigentliche Datenverkehr mit symmetrischen Algorithmen (z. B. AES) verschlüsselt wird. RSA sorgt dafür, dass die Schlüssel sicher ausgetauscht werden können.
6.2 E‑Mail‑Sicherheit
Protokolle wie S/MIME nutzen RSA zur Verschlüsselung von E‑Mails. Der öffentliche Schlüssel wird in Zertifikaten gespeichert, die von Zertifizierungsstellen (CAs) ausgestellt werden.
6.3 Sicherheitshinweise
- Schlüssellänge: Für 128‑Bit‑Sicherheit wird mindestens ein 2048‑Bit‑Modulus empfohlen.
- Padding: OAEP oder PSS (Probabilistic Signature Scheme) sind Pflicht, um Kryptoanalyse zu verhindern.
- Schlüsselverwaltung: Private Schlüssel sollten in Hardware‑Sicherheitsmodulen (HSM) oder sicheren Elementen gespeichert werden.
- Updates: RSA‑Implementierungen sollten regelmäßig auf Sicherheitsupdates geprüft werden, um bekannte Schwachstellen zu schließen.
Fazit
RSA bleibt eines der robustesten und am weitesten verbreiteten Verfahren der asymmetrischen Kryptographie. Durch die Kombination von Primzahlen, modularer Exponentiation und sorgfältigem Padding bietet es sowohl sichere Verschlüsselung als auch zuverlässige digitale Signaturen. Die Sicherheit hängt jedoch von der korrekten Implementierung und der Wahl geeigneter Parameter ab. Mit modernen Bibliotheken und Hardware‑Beschleunigung lässt sich RSA heute effizient und sicher einsetzen – sei es für die sichere Übertragung von Daten im Web, für die Authentifizierung von Software oder für die Verifikation von Dokumenten. Wenn Sie RSA in Ihren Projekten einsetzen wollen, achten Sie darauf, stets aktuelle Standards wie OAEP und PSS zu verwenden und Ihre Schlüssel in sicheren Elementen zu speichern. Auf diese Weise können Sie die Vorteile von RSA voll ausschöpfen und gleichzeitig die Integrität und Vertraulichkeit Ihrer Daten gewährleisten.
