RSA (Rivest–Shamir–Adleman) ist ein asymmetrisches kryptographisches Verfahren, das sowohl zum Verschlüsseln als auch zum digitalen Signieren verwendet werden kann.[1] 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.
Quelle: Wikipedia-Autoren. (2002, 3. Juni). RSA-Kryptosystem. https://de.wikipedia.org/wiki/RSA-Kryptosystem
Kennenlernen des Grundprinzips
Das RSA-Verfahren bedient sich des Prinzips der Modularen Potenzierung.
Aufgabe:
Lesen Sie die Erklärungen zum modularen Potenzieren und lösen Sie die zugehörigen Aufgaben auf der Lehrbuchseite:
https://inf-schule.de/kryptologie/rsa/modpotenz/station_modularepotenz
Übernehmen Sie die Abbildung zur Veranschaulichung des Grundprinzips in Ihre Aufzeichnungen.
Implementierung des RSA-Algorithmus
Aufgabe:
Implementieren Sie das RSA-Verfahren in Python.
Schlüsselgenerierung
- wähle 2 Primzahlen p und q
- berechne
- n = p * q
- phi(n) = (p – 1) * (q – 1)
- wähle e mit
- 1 < e < phi(n) und
- ggT(e, phi(n)) = 1
- bestimme d mit
- d * e mod phi(n) = 1
- löse mit erw. Euklidischen Algorithmus für d und k: d * e + k * phi(n) = 1
Kodierung/Dekodierung
- in der Realität sind p und q sehr groß
- Schlüssel:
- öffentlicher Schlüssel: (e, n)
- privater Schlüssel: (d, n)
- Verschlüsselung:
- g_char = k_char^e mod n
- Entschlüsselung:
- k_char = g_char^d mod n
- Legende:
- g_char := Geheimtext-Zeichen
- k_char := Klartext-Zeichen
Berechnung des Multiplikativen Inversen der Zahl e modulo n
Ausblick
Die oben durchgeführte Implementierung ist stark vereinfacht. Für einen tieferen Einblick in die Welt des RSA-Kryptosystems können Sie hier nachlesen und ausprobieren:
https://inf-schule.de/kryptologie/rsa/modpotenz/station_kryptosystem