Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
faecher:informatik:oberstufe:kryptographie:rsamathe:start [31.03.2022 17:18] – [Modulo-Wurzelziehen] sbel | faecher:informatik:oberstufe:kryptographie:rsamathe:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Mathematik des RSA Verfahrens ====== | ||
- | |||
- | ===== Das RSA Verfahren ===== | ||
- | |||
- | Das asymmetrische [[wpde> | ||
- | |||
- | Benannt ist es nach seinen Entwicklern [[wpde> | ||
- | |||
- | Um die Funktionsweise des RSA-Verfahrens und später des Diffie-Hellman Schlüseltauschs verstehen zu können, benötigt man etwas Mathematik. | ||
- | |||
- | ===== Modulo-Rechnen ===== | ||
- | |||
- | Sicherlich kennst du bereits die Module Operation: Sie liefert den Rest bei einer ganzzahligen Division zweier ganzer Zahlen zurück: | ||
- | |||
- | < | ||
- | 7 mod 6 = 1 | ||
- | 121 mod 2 = 1 | ||
- | 15 mod 4 = 3 | ||
- | </ | ||
- | |||
- | Mit diesem Wissen kann man das Modulo-Rechnen einführen: Modulo-Rechnen ist das Rechnen mit ganzen Zahlen von 0 bis zu einer größten Zahl n. Zahlen, die größer oder gleich n sind, gibt es beim Modulo-Rechnen nicht. | ||
- | |||
- | Wenn man beim Modulo-rechnen " | ||
- | |||
- | Die Stundenanzeige einer Digitaluhr kann man als Modulo-24-Zähler betrachten. Eine solche Anzeige zählt die Stunden von 0 bis 23 und fängt anschließend wieder bei 0 an. | ||
- | |||
- | Von nun an bezeichnet '' | ||
- | |||
- | |||
- | FIXME Zahlenkreis als Veransachaulichung | ||
- | |||
- | ==== Modulo-Addition und -Subtraktion ==== | ||
- | |||
- | Modulo-Addition und die Modulo-Subtraktion, | ||
- | |||
- | Ist bei einer Subtraktion das **Ergebnis kleiner null**, dann **zählt man n** zum Ergebnis hinzu. | ||
- | |||
- | Als Ergebnis erhält man also stets eine Zahl zwischen '' | ||
- | |||
- | Damit man Modulo-Rechenarten vom " | ||
- | |||
- | **Beispiele: | ||
- | |||
- | < | ||
- | 3+5=1 (mod 7) | ||
- | 2+2=4 (mod 13) | ||
- | 3-6=6 (mod 9) | ||
- | 3+6=0 (mod 9) | ||
- | </ | ||
- | |||
- | ---- | ||
- | {{: | ||
- | === (A1) === | ||
- | |||
- | Berechne die folgenden Modulo-Additionen/ | ||
- | |||
- | < | ||
- | 7+4 = __ (mod 10) | ||
- | 7+4 = __ (mod 6) | ||
- | 9+11 = __ (mod 5) | ||
- | 7-9 = __ (mod 7) | ||
- | 124-87 = __ (mod 16) | ||
- | </ | ||
- | ==== Modulo-Multiplikation und -Division ==== | ||
- | |||
- | Das Ergebnis einer Modulo Multiplikation erhält man am einfachsten, | ||
- | |||
- | < | ||
- | 5·6 = 2 (mod 7) weil 5·6=30, 30 = 4·7 Rest 2 | ||
- | </ | ||
- | |||
- | Man kann sich das Vorgehen auch folgendermaßen veranschaulichen: | ||
- | |||
- | < | ||
- | 4·5 = 6 (mod 7) | ||
- | 4·5 = 20-7-7 = 6 (mod 7) | ||
- | </ | ||
- | |||
- | ---- | ||
- | {{: | ||
- | === (A2) === | ||
- | |||
- | Berechne die folgenden Modulo-Multiplikationen | ||
- | |||
- | < | ||
- | 7*4 = __ (mod 10) | ||
- | 7*4 = __ (mod 6) | ||
- | 9*11 = __ (mod 5) | ||
- | 7*9 = __ (mod 7) | ||
- | 3*(4+8) = __ (mod 16) | ||
- | </ | ||
- | |||
- | |||
- | Um eine **Modulo-Division** zu erhalten, muss man sich überlegen, ob es zu jeder Zahl '' | ||
- | |||
- | a·b=1 (mod n) | ||
- | | ||
- | Dann ist '' | ||
- | |||
- | < | ||
- | 10/5 = 2 | ||
- | - das Invserse Element von 5 ist 1/5, weil 5·1/5 = 1 | ||
- | - die Division kann man damit auch als Multiplikation schreiben: | ||
- | 10·1/5 = 2 | ||
- | </ | ||
- | |||
- | Beim Modulo-Rechnen ist das allerdings etwas komplizierter, | ||
- | |||
- | <WRAP center round tip 90%> | ||
- | Beim Modulo-Rechnen besitzt eine Zahl '' | ||
- | </ | ||
- | |||
- | |||
- | **Beispiele: | ||
- | |||
- | * 5< | ||
- | * 4< | ||
- | * 7< | ||
- | |||
- | Man kann relativ schnell herausfinden, | ||
- | |||
- | ---- | ||
- | {{: | ||
- | === (A3) === | ||
- | |||
- | Berechne die folgenden inversen Elemente, in der linken Spalte das Inverse '' | ||
- | |||
- | * Mit welcher Zahl b muss man 4 malnehmen, damit '' | ||
- | * Mit welcher Zahl b muss man 1 malnehmen, damit '' | ||
- | |||
- | ^mod 15 ^^ mod 13 ^^ | ||
- | ^ a ^ a< | ||
- | |------------------------------------------------|||| | ||
- | | 0 | | 0 | | | ||
- | | 1 | | 1 | | | ||
- | | 2 | | 2 | | | ||
- | | 3 | | 3 | | | ||
- | | 4 | | 4 | | | ||
- | | 5 | | 5 | | | ||
- | | 6 | | 6 | | | ||
- | | 7 | | 7 | | | ||
- | | 8 | | 8 | | | ||
- | | 9 | | 9 | | | ||
- | | 10 | |10 | | | ||
- | | 11 | | 11| | | ||
- | | 12 | | 12| | | ||
- | | 13 | | 13| | | ||
- | | 14 | | 14| | | ||
- | |||
- | Was fällt dir auf? Woran könnte das liegen? | ||
- | |||
- | ==== Modulo-Exponentiation ==== | ||
- | |||
- | Potenzen sind eine Abkürzung für mehrmaliges Multiplizieren - das funktioniert natürlich auch beim Modulo-Rechnen in gewohnter Weise: | ||
- | |||
- | < | ||
- | 3^4 = 3 · 3 · 3 · 3 (mod 7) | ||
- | = 2 · 3 · 3 (mod 7) | ||
- | = 6 · 3 (mod 7) | ||
- | = 4 (mod 7) | ||
- | </ | ||
- | |||
- | Man kann das auf bewährte Weise abkürzen, indem man zunächst die Potenz berechnet und anschließend den ganzzahligen Rest bei der Division bestimmt: $3^4=81$, $81\; mod\; 7 = 4$, also ist $3^4 = 4\; (mod\; 7)$. | ||
- | |||
- | ==== Diskreter Logarithmus ==== | ||
- | |||
- | Eine Umkehrung des Potentzierens ist der Logarithmus. Beim Modulo-Rechnen stellt man sich die folgende Frage (a, b und n sind gegeben): | ||
- | |||
- | Für welche Zahl $x$ gilt $a^x=b\; | ||
- | |||
- | Man sucht also die Hochzahl der Potenz. Diese Zahl existiert nicht immer und ist mitunter nicht einfach zu bestimmen. | ||
- | |||
- | ==== Modulo-Wurzelziehen ==== | ||
- | Beim Modulo-Wurzelziehen wird zu gegebenem a, b und n eine Zahl x gesucht, für die gilt: | ||
- | |||
- | $x^a=b\; (mod\; n)$. | ||
- | |||
- | $x$ heißt dann die a-te Wurzel von $b \;(mod\; n)$. | ||
- | |||
- | Um die Frage zu beantworten, | ||
- | |||
- | Zum Beispiel ist | ||
- | |||
- | * φ(3)=2, da 1 und 2 teilerfremd zu 3 sind. | ||
- | * φ(6)=2, da 1 und 5 teilerfremd zu 6 sind. | ||
- | * φ(7)=6, da 1, 2, 3, 4, 5 und 6 teilerfremd zu 7 sind. | ||
- | |||
- | <WRAP center round tip 90%> | ||
- | Wenn **n eine Primzahl** ist, ist φ(n)=n-1\\ | ||
- | Wenn **n das Produkt zweier Primzahlen** p und q **ist**, ist φ(n) = φ(p·q) = (p-1)·(q-1) | ||
- | </ | ||
- | |||
- | |||
- | ++++ Mathematische Details | | ||
- | |||
- | Es gilt der folgende | ||
- | |||
- | **Satz:** Sind a und n natürliche Zahlen (a<n), dann gilt: $a^{1 (mod\; φ (n))} = a (mod\; n)$. | ||
- | |||
- | Mit anderen Worten: $a^b=a (mod\; n)$ gilt dann, wenn $b-1$ ein Vielfaches von φ(n) ist. | ||
- | |||
- | Beispiel: | ||
- | |||
- | * $3^3=3 (mod\;6)$, da $3=1 (mod\; (φ(6))$ | ||
- | * Hier ist: $a=3$, $b=3$, $n=6$, $b-1=2$ und $φ(6) = 2$. $b-1=2$ ist ein Vielfaches $φ(6) = 2$ | ||
- | |||
- | Aus diesem Satz folgt (wenn wir beide Seiten der Gleichung mit einer Zahl i potenzieren) ein weiterer | ||
- | |||
- | **Satz:** Sind $a$, $i$ und $n$ natürliche Zahlen ($a<n$), dann gilt: $a^{i (mod\; φ(n))} = a^{i} (mod\; n)$. | ||
- | |||
- | Nun kann man die die a-te Modulo-Wurzel einer Zahl berechnen. Gegeben sind a, b und n, gesucht ist die Zahl x für die gilt | ||
- | |||
- | $x^a=b\; | ||
- | |||
- | Wenn a und φ(n) teilerfremd sind, kann man mit dem euklidischen Algorithmus die Zahl $c=a^{-1} (mod\; φ(n))$ berechnen. Mit dieser Zahl potenziert man beide Seiten der Gleichung von oben und erhält: | ||
- | |||
- | $(x^a)^{c(mod\; | ||
- | |||
- | Durch die Anwendung des zweiten Satzes von obenkönnen wir die rechte Seite vereinfachen: | ||
- | |||
- | $(x^a)^{c(mod\; | ||
- | |||
- | Da $a·c = 1 (mod φ(n))$, erhalten wir auf der linken Seite: | ||
- | |||
- | $x^{1(mod \; | ||
- | |||
- | Also ist x nach dem ersten Satz von oben: | ||
- | |||
- | x=b^c (mod\; n) | ||
- | ++++ | ||
- | |||
- | Unter Beachtung einiger mathematischer Sätze kann man die die a-te Modulo-Wurzel einer Zahl folgendermaßen berechnen: Gegeben sind a, b und n, gesucht ist die Zahl x für die gilt | ||
- | |||
- | $x^a=b\; | ||
- | |||
- | <WRAP center round tip 90%> | ||
- | Wenn man φ(n) kennt und a und φ(n) teilerfremd sind gilt $x=b^c\; | ||
- | </ | ||