PMG/Kurs 11/moderne Verfahren
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Pascal</language>
== Das RSA-Verfahren ==
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 '''<font color="darkred">Einwegfunktionen</font>''' gesprochen, die in einer Richtung einfach anzuwenden, in anderer Richtung (Umkehrung) gar nicht oder extrem schwierig funktionieren.
<br><br>
<ul><font color="darkred">Primzahlen</font> 41 und 211: '''Produkt''' <u>einfach</u> zu bestimmen: 8651</ul>
<ul>Aus dem Produkt 8651 sind die Primzahlen durch '''Faktorisieren''' <u>schwer</u> zu ermitteln! Dies wird umso schwieriger, je größer die zu faktorisierende Zahl ist!
<br><br>
<br>'''Das Grundprinzip'''<br>
<li>man wähle <u>zwei möglichst große Primzahlen</u> <math>p</math> und <math>q</math> ''<font size="1">Wissenswertes zu Primzahlen unter [http://www.primzahlen.de/] </font>''</li>
<li>Verschlüsseln mit '''öffentlichem''' Schlüssel <math>(e, N)</math>, wobei <math>N = p * q</math> und e eine beliebige Zahl ist aber <u>teilerfremd</u> zu <math>(p - 1)*(q - 1)</math></li>
<li>Entschlüsseln mit '''privatem''' Schlüssel <math>d</math>, den man aus <math>d*e = 1 mod ((p - 1)*(q - 1))</math> erhält</li>
<br>
'''<font color="green">Es gelten also die Formeln:
<ul>für das Verschlüsseln der Nachricht M zum chiffrierten Text C: <math>C = M^e(mod N)</math> </ul>
<ul>sowie für das Dechiffrieren von C in die Ausgangsnachricht M: <math>M = C^d(mod N)</math> </ul></font>'''
<br><br>
<font color="red">Ein Beispiel:</font>
Bob will an Alice eine Nachricht schicken.
Alice hat einen öffentlichen Schlüssel wie folgt gewählt:
Die Primzahlen seien <math>p</math>=17 und <math>q</math>=11.
Damit ist <math>N</math>=187, für <math>e</math> wird 7 gewählt. Dieser Schlüssel wird ''veröffentlicht''.
<br>
Es soll die Nachricht ''XMAS'' gesendet werden. Dazu müssen die Buchstaben in ASCII-Code umgewandelt werden.<br>
<br>Betrachten wir zunächst das ''X'', so wird diese in ASCII durch <math>1011000</math> dargestellt. Dies entspricht der Dezimalzahl 88, damit sei die (Teil-)Nachricht <math>M=88</math>.
<br>
''<font size="1">Ascii-Listen finden sich z.B. unter [http://www.torsten-horn.de/techdocs/ascii.htm] oder [http://www.asciitable.com/] </font>''
<br>
<br>
Für die Verschlüsselung ergibt sich nun <math>C = 88^7(mod 187)</math>
Dies ist 11 (nachprüfen!), damit schickt Bob die geheime Nachricht <math>C=11</math> an Alice.
<br><br>
Nur wer die passenden Primzahlen kennt, mit denen der öffentliche Schlüssel erzeugt wurde, kann die Botschaft entschlüsseln. Das ist allein Alice. <br>Ihr privater Schlüssel folgt aus<br>
<math>d*e = 1 mod ((p - 1)*(q - 1))</math><br>
<math>d*7 = 1 mod (16*10)</math><br>
<math>d*7 = 1 mod (160))</math><br>
<math>d = 23</math>, weil <math>23*7 = 161</math>(!?)
<br><br>
Nun braucht nur noch die Nachricht entschlüsselt werden:
<math>M = C^d(mod N)</math><br>
<math>M = 11^2^3(mod 187)</math><br>
<math>M = 88 =</math> ''X''.
'''<font color="darkgreen">Aufgabe:</font>'''<br>
Verschlüsseln Sie den Rest der Nachricht ''XMAS'' und geben Sie Ihre Lösung in der Box unter writeln('' 'hier' '') ein.<br>
Betätigen Sie den ''speichern & ausführen'' Schaltfläche!
<run id="4f2d2750549d5">
writeln('')
</run>