Das RSA-Verfahren

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Ron Rivest, Adi Shamir, Leonard Adleman, 2003

Das RSA-Verfahren ist ein asymmetrische Verschlüsselungsverfahren, d.h. der zu übermittelnde Text wird mit einem öffentlichen Schlüssel verschlüsselt und mit einem privaten (also "geheimen") Schlüssel entschlüsselt.
Es wurde 1977 von Ronald L. Rivest, Adi Shamir und Leonard Adleman am MIT in Boston entwickelt und galt damals als das erste asymmetrische Verschlüsselungsverfahren.
Man nutzt dazu die Tatsache, dass es praktisch unmöglich ist, eine Primfaktorzerlegung sehr großer Zahlen (ca. 200 Stellen und mehr) in einem vertretbaren (Zeit-)Aufwand vorzunehmen.

RSA-Algorithmus

  1. Lege zwei (große) Primzahlen $p$ und $q$ fest mit $p \neq q$.
    Bilde das Produkt $N = p \cdot q$.
    Suche eine weitere Zahl $e$, für die gilt:
    • $e$ ist Primzahl und größer als p und q oder
    • $e$ ist teilerfremd zu $(p-1) \cdot (q-1)$.
    Die Zahlen $e$ und $N$ bilden den öffentlichen Schlüssel.
  2. Ermittle den privaten Schlüssel $d$ mit:
    • $d \le (p-1) \cdot (q-1)$ und
    • $(d \cdot e) \bmod [(p-1) \cdot (q-1)] = 1$
  3. Ein Klartext-Zeichen mit dem Code $c$ wird mit
    $c^e \bmod N = m$

    zu $m$ verschlüsselt.

  4. Der verschlüsselte Code $m$ wird mit
    $m^d \bmod N = c$

    zum Code $c$ des Klartext-Zeichens entschlüsselt.

Implementation

Wir definieren wieder das zulässige Alphabet, bestehend aus Groß- und Kleinbuchstaben sowie Ziffern. Die Sonderzeichen werden diesmal in die Verschlüsselung einbezogen. Weiterhin sollen uns einige nützliche Prozeduren bei der Umsetzung des RSA-Algorithmus unterstützen:

Eine geringe Erweiterung der Prozedur pos-char soll die späteren Implementationen erleichtern:

Nun können wir öffentliche und private Schlüssel bilden und diese auf ihre Korrektheit überprüfen:

 

Quelltext überprüfen:

Zum Ver- bzw. Entschlüsseln müssen wir nun die entsprechenden Prozeduren implementieren.
Dazu bietet sich die sehr effiziente Prozedur potmod mit der folgenden Syntax an:

(potmod <x> <y> <n>) ; ...  xy mod n

 

Quelltext überprüfen:

 

Quelltext überprüfen:

Wir ver- und entschlüsseln nun eine Zeichenkette:

Welche Auswirkungen haben Änderungen des privaten Schlüssels?
Wir wollen $d$ ausgeben, um anschließend damit zu experimentieren:

Zusammenfassung

  • Mit der Idee der asymmetrischen Verschlüsselung entfällt beim RSA-Verfahren der unsichere Schlüsselaustausch.
  • Die Verschlüsselung einzelner Zeichen entspricht einer monoalphabetischen Verschlüsselung und wäre durch Häufigkeitsanalysen sehr schnell zu "knacken". In der Praxis wird man deshalb die Codes mehrerer Zeichen vor der RSA-Verschlüsselung zusammenfassen.
    Beispiel:
    "Informatik" --> unverschlüsselte Codeliste: (9 40 32 41 44 39 27 46 35 37)
                 --> modifizierte Codeliste    : (940 3241 4439 2746 3537)
    
  • Der RSA-Algorithmus gilt als sehr sicher, wenn große Primzahlen verwendet werden. Es gibt aber nach wie vor intensive Bemühungen, das Produkt sehr großer Primzahlen wieder effizient zu faktorisieren (vgl. Primfaktorzerlegung).
  • Das RSA-Verfahren wird heute in der Regel mit symmetrischen Verschlüsselungsverfahren kombiniert. Dabei wird ein Schlüssel für eine symmetrische Verschlüsselung generiert, der dann per RSA-Algorithmus verschlüsselt und zusammen mit der Nachricht übertragen wird.

Zurück zu ausgewählten Algorithmen der Kryptologie.

Persönliche Werkzeuge