Kryptologie/Verschlüsselungsalgorithmus des RSA-Verschlüsselungsverfahrens

Aus testwiki
Zur Navigation springen Zur Suche springen


Einleitung

Nachdem wir den privaten und öffentlichen Schlüssel generiert und den öffentlichen Schlüssel veröffentlich haben, können nun Nachrichten an uns gesendet und diese von uns entschlüsselt werden. Zunächst muss eine solche Nachricht jedoch mit unserem öffentlichen Schlüssel verschlüsselt werden[1]. In diesem Abschnitt beschäftigen wir uns daher mit dem Verschlüsselungsalgorithmus des RSA-Verschlüsselungsverfahrens und zeigen, wie man mit dem RSA-Verfahren Nachrichten, nur für uns lesbar, verschlüsseln kann.

Anforderungen an den Klartext

Bevor wir den Verschlüsselungsalgorithmus anwenden können, muss der Klartext m in einem numerischen Alphabet vorliegen. Dies können wir, wenn nicht bereits der Fall, durch die Kodierung des Klartextes in ein numerisches Alphabet realisieren.

Darüber hinaus muss m/N ein Standardrepräsentant von /N sein. Andernfalls würden Informationen bei der Verschlüsselung und Entschlüsselung verloren gehen (siehe Lernaufgabe Verschlüsselung und Lernaufgabe Entschlüsselung). Wir können jedoch einen Klartext, der kein Standardrepräsentant von /N ist, in kleiner Blöcke mit fester Reihenfolge aufteilen, sodass jeder dieser Blöcke Standardrepräsentant von /N ist[2].

Man muss also manchen Fällen bis zu zwei Schritte ausführen, bevor man den Klartext verschlüsseln kann:

  1. Übertragung des Klartextes in ein numerisches Alphabet
    • Transformiere den zu verschlüsselnden Klartext mM (Menge der möglichen Klartexte) in das gewünschten numerisches Alphabet mittels Zeichenkodierung
  2. Aufteilung des Klartextes in l Blöcke
    • Die Blöcke werden in diesem Kurs mit voneinander getrennt dargestellt und es gilt m=m1m2ml
      • Es handelt sich bei dem Zeichen in diesem Fall nicht um den mathematischen Operator des Minuszeichens[3] der Subtraktion
    • Die Blöcke müssen kleiner N sein, da der Block sonst kein Standardrepräsentant der Restklasse /N ist und bei der Anwendung des Entschlüsselungsalgorithmus nur Standardrepräsentanten ausgegeben werden können. So würde also anstelle des ursprünglichen Klartextes ein vermeintlicher Klartext entschlüsselt werden
    • Aus dem selben Grund darf kein Block mit 0 beginnen. Es würde nämlich zu einer Leserasterverschiebung kommen, sodass die Information "0" verloren gehen würde, da 0301=301 für den Ver- und Entschlüsselungsalgorithmus

Verschlüsselungsalgorithmus

Nun beschreiben wir den eigentlichen Verschlüsselungsalgorithmus. Der Algorithmus besteht aus einem einzigen Schritt:

  1. Berechnung des Geheimtextes c/N aus m/N
    • cmemodN[4][5]
      • In der Praxis muss jeder Block eines Klartextes m>N einzeln verschlüsselt werden und es gilt für alle i{1,2,,l} cimiemodN[2].

Achtung: Die Blöcke des erzeugten Geheimtextes dürfen nicht aneinander gefügt werden, ohne diese wieder fehlerfrei trennen zu können. Andernfalls kommt es wahrscheinlich zu falschen Blöcken bei der Entschlüsselung[2].

Beispiel

Tabelle 1: Zuordnung der Zeichenkodierung (Ausschnitt aus der ASCII-Tabelle[6])
Zeichen

aus Σ2

Zugeordnetes

Zeichen aus Σ1

Zeichen

aus Σ2

Zugeordnetes

Zeichen aus Σ1

0 NUL (Leerzeichen[7]) 77 M
46 . 78 N
65 A 79 O
66 B 80 P
67 C 81 Q
68 D 82 R
69 E 83 S
70 F 84 T
71 G 85 U
72 H 86 V
73 I 87 W
74 J 88 X
75 K 89 Y
76 L 90 Z

Wir wollen den Klartext HALLO WELT. mit dem öffentlichen Schlüssel (23,143) des Empfängers verschlüsseln. Da wir auch die Entschlüsselung in einer späteren Lerneinheit zeigen wollen, sind wir nicht nur Sender, sondern auch Empfänger in diesem Beispiel.

  1. Mathematisierung des Klartextes m/143
    1. Übertragung des Klartextes in ein numerisches Alphabet
      • Wir definieren zu unserem Klartext HALLO WELT. das zugehörige Alphabet Σ1={NUL,.}{A,B,,Z}
      • Als numerisches Alphabet wählen wir einen Ausschnitt aus ASCII-Zeichenkodierung und definieren das dazugehörige Alphabet Σ2={0,46}{65,66,,90}
      • Wir definieren unseren Zeichenkodierung f:Σ1Σ2 so, dass die Zeichen von Σ1 wie in Tabelle 1 beschrieben auf Σ2 abbilden (siehe Tabelle 1)
        • Wir erhalten den transformierten Klartext m=726576767908769768446, da f(H)=72, f(A)=65, etc.
    2. Aufteilung des Klartextes in l Blöcke
      • Jeder Block muss kleiner N=143 sein und wir erhalten somit 11 Blöcke
        • m=m1m2m11=726576767908769768446
  2. Verschlüsselungsalgorithmus
    1. Berechnung des Geheimtextes cC
      • Wir setzen den Verschlüsselungsexponenten e=23 und den RSA-Modul N=143 des öffentlichen Schlüssels aus der Aufgabe zum Schlüsselerzeugungsalgorithmus in den Verschlüsselungsalgorithmus cmemodN ein
      • Jeder Block wird einzeln mit dem Verschlüsselungsalgorithmus E verschlüsselt
        • c17223106mod143, c2652365mod143, c3762332mod143, , c11462341mod143
        • Man erhält die verschlüsselten Blöcke 106,65,32,32,2,129,120,49,32,24,41 und den Geheimtext c=106653232212912049322441.

Lernaufgabe

Aufgabe 1

Berechnen Sie die Verschlüsselung der Klartexte m1=0301 und m2=301 mit dem öffentlichen Schlüsse aus dem Beispiel und ignorieren Sie dabei die Bedingung m/143. Begründen Sie, warum ein Klartext nicht mit 0 beginnen darf.

Lösung
Seien e=23 und N=143.


Zu m1=0301:

Wir ignorieren die Bedingung 0301/143 und verschlüsseln den Klartext:

c1=20030123mod143.


Zu m2=301:

Wir ignorieren die Bedingung 301/143 und verschlüsseln den Klartext:

c2=2030123mod143.


Die Verschlüsselung von m1 bzw. m2 liefert c1=20 bzw. c2=20.

Es gilt m1m2, aber c1=c2. Dies lässt darauf schließen, dass eine Information einer der beiden Klartexte verloren gegangen ist. Da bei Rechenoperationen in 0301=301, kann man annehmen, dass 0301=301 im Verschlüsselungsalgorithmus gilt.

Aufgabe 2

Berechnen Sie die Verschlüsselung des Klartextes "ASTERIX" aus dem Beispiel zum Caesar-Algorithmus oder einen eigenen Klartext mit dem RSA-Algorithmus und der Zeichenkodierung aus Tabelle 1. Sie können die Schlüsselpaare aus dem Beispiel verwenden oder die aus der Lernaufgabe zur Schlüsselerzeugung, falls Sie diese bearbeitet haben.

Lösung
Seien e=23 und N=143.

Wir transformieren den Klartext m=ASTERIX=65838469827388.

Wir erhalten folgende Blöcke kleiner 143:

m=m1m2m7=65838469827388.

Nun verschlüsseln wir die Blöcke einzeln mit dem Verschlüsselungsalgorithmus des RSA-Verschlüsselungsverfahren:

ci=mi23mod143 mit i{1,2,,7}

c1=656523mod143,

c2=738323mod143,

c3=248423mod143,

c4=496923mod143,

c5=1148223mod143,

c6=577323mod143,

und

c7=1218823mod143.

Der Geheimtext lautet also: c=c1c2c7=6573244911457121.

Lernempfehlung

Kursübersicht
Übergeordnete Lerneinheit
6: RSA-Kryptosystem
Vorherige Lerneinheit Aktuelle Lerneinheit Empfohlene Lerneinheit
7.1: Schlüsselerzeugung des RSA-Verschlüsselungsverfahrens 7.2: Verschlüsselungsalgorithmus des RSA-Verschlüsselungsverfahrens 7.3: Entschlüsselungsalgorithmus des RSA-Verschlüsselungsverfahrens

Literatur

  1. Rivest, R. L., Shamir, A., & Adleman, L. (1978). A method for obtaining digital signatures and public-key cryptosystems. Communications of the ACM, 21(2) (S. 120–126). S. 120.
  2. 2,0 2,1 2,2 Coutinho, S. C. (1999). The mathematics of ciphers: Number theory and RSA cryptography. A K Peters, S. 163.
  3. https://de.wikipedia.org/w/index.php?title=Spezial:Zitierhilfe&page=Minuszeichen&id=194589971
  4. Seite „RSA-Kryptosystem“. In: Wikipedia, Die freie Enzyklopädie. Bearbeitungsstand: 15. Dezember 2019, 19:39 UTC. URL: https://de.wikipedia.org/w/index.php?title=RSA-Kryptosystem&oldid=194933568 (Abgerufen: 10. Januar 2020, 10:40 UTC; Formulierung verändert)
  5. Rivest, R. L., Shamir, A., & Adleman, L. (1978). A method for obtaining digital signatures and public-key cryptosystems. Communications of the ACM, 21(2) (S. 120–126). S. 122.
  6. Seite „American Standard Code for Information Interchange“. In: Wikipedia, Die freie Enzyklopädie. Bearbeitungsstand: 23. Dezember 2019, 09:20 UTC. URL: https://de.wikipedia.org/w/index.php?title=American_Standard_Code_for_Information_Interchange&oldid=195157263 (Abgerufen: 9. Januar 2020, 11:59 UTC)
  7. Seite „Leerzeichen“. In: Wikipedia, Die freie Enzyklopädie. Bearbeitungsstand: 25. November 2019, 20:03 UTC. URL: https://de.wikipedia.org/w/index.php?title=Leerzeichen&oldid=194374775 (Abgerufen: 16. Februar 2020, 22:20 UTC)