Der RSA-Algorithmus
1. Einleitung
1976 forderten Whitfield Diffie und Martin Hellman eine neue Art der Verschlüsselungsalgorithmen, sogenannte asymmetrische Chiffrieralgorithmen oder auch public-key-Algorithmen genannt. Bei diesen Verfahren sollte es unmöglich sein mit Kenntnis des Chiffrierschlüssels den Dechiffrierschlüssel zu ermitteln. Die bisherigen symmetrischen Algorithmen hatten zwei wesentliche Nachteile:
1. Schlüsselmanagementproblem:
2. Symmetrie zwischen Chiffrier- und Dechiffrierverfahren:
2. Was ist RSA, was leistet RSA?
Daraufhin entwickelten Ronald Rivest, Adi Shamir und Leonard Adleman 1977 das nach ihnen benannte public-key-Kryptosystem, den RSA-Algorithmus. Er erfüllt die von Diffie und Hellman geforderten Spezifikationen:
Dazu ein Beispiel:
Jeder Teilnehmer hat zwei Schlüssel: den Chiffrierschlüssel c und den Dechiffrierschlüssel d. d hält er geheim und c schreibt er in ein "Telefonbuch" - eine Datei, die für jeden zugänglich ist und alle Chiffrierschlüssel cn enthält. Möchte nun ein Teilnehmer A eine Nachricht an einen Teilnehmer B versenden, sucht er im Telefonbuch nach dem öffentlichen Schlüssel von B (cB) und verschlüsselt damit seine Nachricht. Nur B kann dann mit seinem geheimen Dechiffrierschlüssel (dB) diese wieder entschlüsseln.
Kommt ein neuer Teilnehmer hinzu, wird nur ein neuer Schlüssel in das Telefonbuch eingetragen. Alle anderen Teilnehmer können sofort mit diesem kommunizieren, da ein Schlüsseltausch wie bei symmetrischen Verfahren nicht erforderlich ist. Es wird lediglich das Telefonbuch aktualisiert.
3. Wie funktioniert RSA?
3.1 Grundlagen
3.1.1 Satz von Euler[vgl. (2)]
Zur Erklärung definieren wir zunächst folgende Funktion:
Dementsprechend ist j (n) die Anzahl aller Zahlen (kleiner gleich n), deren größter gemeinsamer Teiler (ggT) mit n gleich 1 ist.
Beispiele:
Daraus folgt aus der Definition für eine Primzahl - alle Zahlen von 1 bis (p-1) sind teilerfremd zu p: j
(p) = p-1.
Hieraus ergibt sich für das Produkt zweier Primzahlen p und q die Beziehung:
Der Euklidsche Algorithmus liefert den grö
ßten gemeinsamen Teiler (ggT) zweier natürlicher Zahlen. Er wird
beim RSA - Algorithmus zur Berechnung des Codier- und Decodierschlüssels
benötigt.
Algorithmus:
Man erhält den ggT zweier natürlicher Zahlen a und b, indem man solange den Rest der Ganzzahlendivision ermittelt, bis der Rest 0 ist. x und y sind Puffervariablen und enthalten zu Anfang die Werte von a und b. Ist der Rest gleich 0, dann ist y der ggT. Solange der Rest ungleich 0 ist, wird x der Wert von y zugewiesen und y erhält den Wert von r.
Zuerst legt man zwei Primzahlen p und q fest, die für eine sichere Verschlüsselung circa in der Größenordnung 10200 liegen. "Außerdem sollten sich die Stellenzahlen von p und q in der Dezimaldarstellung deutlich unterscheiden, da sich sonst beide Zahlen nur wenig von unterscheiden und durch gezielte Suchalgorithmen (z.B. mit dem Verfahren der Differenz der Quadrate) relativ leicht auffindbar wären." [aus (1), Seite 102]
Als nächstes bestimmt man das Produkt n der beiden Primzahlen und bildet j (n), nach dem Satz von Euler mit .
Nun errechnet man schließlich die eigentlichen Schlüssel c (für Codier – Schlüssel) und d (für Decodier – Schlüssel) durch die Formel:
Hierzu wählt man den Schlüssel c so, daß c teilerfremd zu j (n) und daß der ggT(c-1, p-1) und der ggT(c-1, q-1) möglichst klein sind. Um zu erreichen, daß c teilerfremd zu j (n) ist, kann man entweder für c eine Primzahl wählen, die größer als j (n) ist, oder man bestimmt zufällig eine Zahl c kleiner als j (n), für die gilt: ggT(c, j (n)) = 1 (nachzuprüfen mit dem Euklidschen Algorithmus).
Daraus ergibt sich dann der Decodier – Schlüssel d zu:
Da sich bei der Ganzzahlendivision für das Produkt von c und d durch j (n) ein Rest von 1 ergibt, kann man das Produkt von c und d auch als eins plus ein ganzzahliges, positives Vielfaches von j (n) schreiben:
Nun werden n und der Codier – Schlüssel c veröffentlicht bzw. ins "Telefonbuch" eingetragen, d hält der Benutzer geheim und p und q werden vergessen. Es ist fast unmöglich, aus n j
(n) zu ermitteln ohne Kenntnis von p und q. Somit ist eine hohe Sicherheit der Verschlüsselung gewährleistet.
Bei der Findung von n, c und d ist zu beachten:
(1 + ggT(c-1,p-1)) (1 + ggT(c-1,q-1))
Da nur Zahlen verschlüsselt werden können, wird der zu verschlüsselnde Text t über den ASCII (American Standard Code for Information Interchange) – Code in eine Zahlenfolge konvertiert. Zur Realisierung mittels PC werden diese Zahlen wiederum in einen Binärcode umgewandelt. Dieser wird dann in Blöcken der Reihe nach verschlüsselt (beim ASCII – Code sind die Blöcke zum Beispiel 512 Bit groß).
Die Verschlüsselung funktioniert dann folgendermaßen:
Der Geheimtext g ist der Rest der Ganzzahlendivision aus dem ursprünglichen Text t potenziert mit dem Codier – Schlüssel c des Adressaten und n.
3.4 Entschlüsselung
Die Entschlüsselung erfolgt dementsprechend einfach:
Der ursprüngliche Text t ist der Rest der Ganzzahlendivision aus dem Geheimtext g potenziert mit seinem persönlichen geheimen Decodier – Schlüssel d und n.
Dadurch, daß nur der Adressat über den richtigen Decodier – Schlüssel verfügen kann, ist die Sicherheit der Verschlüsselung gewährleistet.
Weiterhin besteht die Möglichkeit, eine elektronische Unterschrift mit dem RSA-Algorithmus zu realisieren. Hierbei wird das Prinzip der Chiffrierung und Dechiffrierung umgekehrt. Man unterscheidet zwischen
- universelle Unterschrift
Es kann zwar jeder andere diese Nachricht mit dem öffentlichen Chiffrierschlüssel dechiffrieren, es ist jedoch auch nicht die Absicht, die "Unterschrift" geheimzuhalten, vielmehr soll die Authentizität des Absenders gewähleistet sein.
- nicht universelle Unterschrift
3.6 Erläuterndes Beispiel [vgl. (2)]
Herr A und Frau B wollen Nachrichten austauschen.
c und d werden berechnet aus der Formel:
Wir wählen c als 17, daraus ergibt sich d zu 157.
Der öffentliche Schlüssel von Herrn A wird also folgendermaßen ins Telefonbuch eingetragen: "A: cA={17; 2773}". Herr A behält seinen geheimen Schlüssel dA = 157.
c und d werden berechnet aus der Formel:
Wir wählen c als 17, daraus ergibt sich d zu 1013.
Der öffentliche Schlüssel von Frau B wird also folgendermaßen ins Telefonbuch eingetragen: "B: cB={17; 5893}". Frau B behält ihren geheimen Schlüssel dB = 1013.
00 |
F |
06 |
L |
12 |
R |
18 |
X |
24 |
|
A |
01 |
G |
07 |
M |
13 |
S |
19 |
Y |
25 |
B |
02 |
H |
08 |
N |
14 |
T |
20 |
Z |
26 |
C |
03 |
I |
09 |
O |
15 |
U |
21 |
||
D |
04 |
J |
10 |
P |
16 |
V |
22 |
||
E |
05 |
K |
11 |
Q |
17 |
W |
23 |
"10 21 08 21 00 05 19 00 11 12 01 16 16 20".
Nun wird zum Chiffrieren die Botschaft in Blöcke á 4 Ziffern unterteilt, bei denen die Einzelzahlen kleiner als n sind.
"5527 3838 4143 4336 2087 4079 5780".
t = gd MOD n bzw. hier: t = g1013 MOD 5893 (Formel siehe 3.4). Als entschlüsselten Text bekommt Sie:
"1021 0821 0005 1900 1112 0116 1620".
Teilt Sie diesen Text in zweistellige Zahlen und übersetzt sie dann mit der Buchstabenverschlüsselung (siehe oben), so erhält sie die Nachricht:
"juhu es klappt".
4. Vor- und Nachteile
Vorteile:
Nachteile:
Diese Sicherheit ist jedoch nur praktisch und nicht theoretisch. Wird ein Algorithmus gefunden, der es ermöglicht, schnell aus n p und q zu folgern, ist der gesamte RSA-Algorithmus geknackt.
5. Anwendungsgebiete des RSA - Algorithmus
1) Netzwerke:
Viele Clients wie zum Beispiel das Novell - System
benutzen zur Sicherung ihrer Passwörter den RSA - Algorithmus, da er auf Grund
seiner Sicherheit perfekt für diese Anwendung geeignet ist. Die Verwendung von RSA
ist sogar eine Art Qualitätsmerkmal für die Sicherheit einer Netzwerkssoftware
wie man an dem Bildschirmfoto sieht:
2)Pretty Good Privacy (PGP):
Pretty Good Privacy ist das wohl bekannteste Verschlüsselungsprogramm für den PC. Es
verschlüsselt alles von "normalen" Dateien bis zu E-Mails. Auch dieses Programm
benutzt den RSA - Algorithmus und ist so sicher, daß es zeitweise verboten war,
das Programm von Amerika nach Europa zu exportieren, da es unter das militärische
Gesetz zur Spionageabwehr fiel.
3) Chipkarten:
Heute gibt es schon spezielle RSA - Chipkarten, die zum Beispiel PIN - Nummern mit
dem RSA - Algorithmus verschlüsseln.
6. Beispielprogramm "RSA-Algorithmus"
Um Ihnen dieses theoretische Wissen auch praktisch zu veranschaulichen, haben wir uns die Mühe gemacht, ein kleines Beispielprogramm in Turbo Pascal 6.0 zu entwickeln. Hier steht es Ihnen zum Download bereit: RSA.exe (ca. 25 kB)
Das Programm bietet Ihnen die Möglichkeit, an drei fiktive Personen eine kurze Nachricht mit maximal 80 Zeichen verschlüsselt zu "verschicken" (bzw. in eine Datei zu schreiben). Aus dieser Datei kann man die Nachricht natürlich wieder aufrufen und mit dem richtigen Schlüssel decodieren.
Beim Programmieren ergaben sich mehrere Probleme, da die erforderlichen Rechenanforderungen von Turbo Pascal nicht in diesem Maße erfüllt werden können. Hierdurch mußten wir das Programm sehr stark eingrenzen, das heißt die Sicherheit ist nur minimal, da wir durch die Potenzierung und anschließende Modulo-Berechnung nur Primzahlen <20 verwenden konnten.
Auch wird die Nachricht trotz richtigem Decodierschlüssel teilweise "falsch" entschlüsselt, da die Fixpunkte durch die kleinen verwendeten Zahlen recht häufig als Verschlüsselung entstehen, und dann beim Decodieren nicht richtig umgewandelt werden.
An dem Programm kann man sehen, daß man die Nachricht zwar mit allen Schlüsseln decodieren kann, daß aber nur mit dem richtigen Schlüssel eine sinnvolle Nachricht entsteht. Somit ist die Funktionsweise und Sicherheit des RSA - Algorithmus hier in diesem kleinen Beispielprogramm schon sehr gut zu erkennen.
7. Biographien der Entwickler
Leonard Adleman:
Ronald L. Rivest:
Adi Shamir:
8. Literaturverzeichnis
(1) Niederdrenk – Felgner:
(2) Binder, Martin:
weitere Informationen zum RSA - Algorithmus: