Das RSA Verfahren

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Der 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 $m$ wird mit
    $m^e \bmod N = c$

    zu $c$ verschlüsselt.

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

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

Ron Rivest, Adi Shamir, Leonard Adleman, 2003

Das RSA-Verfahren 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.
Es nutzt die Tatsache, dass es praktisch unmöglich ist, eine Primfaktorenzerlegung sehr großer Zahlen (ca. 200 Stellen und mehr) in einem vertretbaren (Zeit-)Aufwand vorzunehmen.


Bei diesem Verfahren gibt es öffentliche und geheime Schlüssel.

Die Sicherheit dieses Verfahrens beruht darauf, dass die Mathematik bisher noch keine Formel gefunden hat, mit der Primzahlen einfach und schnell berechnet werden können. Nach wie vor stehen hier nur Probiermethoden zur Verfügung. Aufgrund der großen Anzahl der Zahlenwerte führt dieses Probieren bei langen Schlüsselwerten nicht mehr in vernünftiger Zeit zum Ergebnis.

In diesem Zusammenhang wird von sogenannten Einwegfunktionen gesprochen, die in einer Richtung einfach anzuwenden, in anderer Richtung (Umkehrung) gar nicht oder extrem schwierig funktionieren.

    Primzahlen 41 und 211: Produkt einfach zu bestimmen: 8651
    Aus dem Produkt 8651 sind die Primzahlen durch Faktorisieren schwer zu ermitteln! Dies wird umso schwieriger, je größer die zu faktorisierende Zahl ist!

    Das Grundprinzip

  • man wähle zwei möglichst große Primzahlen $p$ und $q$
  • Verschlüsseln mit öffentlichem Schlüssel $(e, N)$, wobei $N = p * q$ und $e$ eine beliebige Zahl ist aber teilerfremd zu $(p - 1)*(q - 1)$
  • Entschlüsseln mit privatem Schlüssel $d$, den man aus $(d*e)mod((p - 1)*(q - 1)) = 1$ erhält

  • Es gelten also die Formeln:

      für das Verschlüsseln der Nachricht M zum chiffrierten Text C: $C = M^e(mod N)$
      sowie für das Dechiffrieren von C in die Ausgangsnachricht M: $M = C^d(mod N)$



    Ein Beispiel:

    Bob will an Alice eine Nachricht schicken. Alice hat einen öffentlichen Schlüssel wie folgt gewählt: Die Primzahlen seien $p$=17 und $q$=11. Damit ist $N$=187, für $e$ wird 7 gewählt. Dieser Schlüssel wird veröffentlicht.
    Es soll die Nachricht XMAS gesendet werden. Dazu müssen die Buchstaben in ASCII-Code umgewandelt werden.

    Betrachten wir zunächst das X, so wird diese in ASCII durch $1011000$ dargestellt. Dies entspricht der Dezimalzahl 88, damit sei die (Teil-)Nachricht $M=88$.
    Ascii-Listen finden sich z.B. unter [1] oder [2]

    Für die Verschlüsselung ergibt sich nun $C = 88^7(mod 187)$ Dies ist 11 (nachprüfen!), damit schickt Bob die geheime Nachricht $C=11$ an Alice.

    Nur wer die passenden Primzahlen kennt, mit denen der öffentliche Schlüssel erzeugt wurde, kann die Botschaft entschlüsseln. Das ist allein Alice.
    Ihr privater Schlüssel folgt aus
    $(d*e) mod ((p - 1)*(q - 1)) = 1$
    $(d*7) mod (16*10) = 1$
    $(d*7) mod (160))= 1$
    $d = 23$, weil $23*7 = 161$(!?)

    mod (160) heißt: Der Rest bei Divison mit 160 soll 1 sein, also 1, 161, 321, 481, ... Durch "Probieren" erhält man also 161:7=23; 1281 funktioniert auch wieder mit d=183)



    Nun braucht nur noch die Nachricht entschlüsselt werden: $M = C^d(mod N)$
    $M = 11^{23}(mod 187)$
    $M = 88 =$ X.


    Aufgabe:

    Verschlüsseln Sie den Rest der Nachricht XMAS und geben Sie Ihre Lösung in der Box in " " ein.
    Betätigen Sie den speichern & ausführen Schaltfläche!
    Also: angemeldet sein!
    

    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 mehrere 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, Produkte großer Primzahlen effizient zu faktorisieren.
    • 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.
Persönliche Werkzeuge