MOC - Kryptographie 1
Einführung und klassische Chiffrierverfahren
Grundidee der Kryptographie
- Eine Nachricht auf der Seite des Senders transformieren.
- Die transformierte Nachricht verschicken
- Die transformiterte Nachricht auf der Seite des Empfängers entschlüsseln.
- Wichtig ist, dass ein Angreifer die transformierte Nachricht nicht entschlüsseln kann
Elemente die zur Verschlüsselung notwendig sind
Verfahren
-
Padding
Kapitel 3 - Grundeigenschaften der Ringe und
Integritätsring Modulo Euklidischer Ring Teilbarkeit Primzahl Fundamentalsatz der Arithmetik
Naives Faktorisierungsverfahren
Wir definieren die gemeinsamen Teiler von und als die Menge an Zahlen , die sowohl als auch teilen. Wir sehen daraus sofort, dass die gemeinsamen Teiler von und alle Teiler von sind und mit nur , da man eben nur mit und teilen kann. Wenn eine Primfaktorzerlegung leicht zu berechnen ist, dann lassen sich auch schnell alle gemeinsamen Teiler bestimmen indem man alle möglichen Zerlegungen mit Exponenten macht, die kleiner gleich der Exponenten aus der ursprünglichen Zerlegung sind.
Mit dem Größter Gemeinsamer Teiler könenn wir auch feststellen ob zwei Zahlen Teilerfremd sind.
Genauso lassen sich gemeinsame Vielfache und das Kleinstes Gemeinsames Vielfaches definieren.
Der euklidische Algorithmus kann den ggT bestimmen ohne explizit eine Primfaktorzerlegung berechnen zu müssen. Wir verwenden die Fibonacci-Zahlen um zu zeigen wie die Laufzeit des Algorithmus ist.
Wir wissen, dass die Gleichung mit dem erweitertem euklidischen Algorithmus lösbar ist. Wir wollen diese Aussage nun verallgemeinern indem wir zeigen wie wir Lösungen für die Gleichung finden können.
Wenn und gilt, dann sind die Lösungen der oben genannten Gleichung:
Diese können in Python zum Beispiel mit dem EEA wie folgt berechnet werden:
a, b, c = 12345, 987, 9
ggt, u, v = eea(a, b)
if c % ggt == 0:
for m in range(0, 10):
x = c / ggt * u + b / ggt * m
y = c / ggt * v - a / ggt * m
print(f"{a} * {x} + {b} * {y} = {c}", end="\t -> ")
print(a * x + b * y == c)```
[[Kongruenz]] ist ein hilfreiches Konzept in der Zahlentheorie.
[[Modulo Invertierbarkeit]]
[[Eulersche Funktion]]
Wir wollen nun die [[Modulo Invertierbarkeit]] verallgemeinern, indem wir Lösungen für die Gleichung
$$ax\equiv b \bmod m$$
suchen. Dabei entspricht die Version mit $b=1$ der normalen Invertierbarkeit.
Gilt
$$ggT(a,m)|b$$
, dann ist die Gleichung lösbar und
$$x_0=\frac{b}{ggT(a,m)}u$$
erfüllt die Gleichung.
Gilt zudem
$$ax_0\equiv b \bmod m$$
, dann gilt außerdem
$$ggT(a,m)|b$$
und es gibt
$$ggT(a,m) \bmod m$$
verschiedene Lösungen der Form
$$x_0+i \frac{m}{\operatorname{ggT}(a, m)} \quad \text { für } \quad i=0, \ldots, \operatorname{ggT}(a, m)-1.$$
Eine beispielhafte Implementierung in [[Python]]
```python
a = 6
b = 4
m = 10
ggt, u, v = eea(a, m)
if b % ggt == 0:
x0 = b / ggt * u
if a*x0 % m == b % m:
for i in range(0, ggt):
print((x0 + i * m / ggt) % m)
Der Chinesische Restsatz kann verwendet werden um ein Kongruenzgleichungssystem zu lösen.
Algorithmus zur Berechnung der abgerundeten Wurzel
Kapitel 4 - Primzahltests
Wir wollen in diesem Kapitel zwei Grundprobleme lösen:
- Überprüfe ob eine große Zahl eine Primzahl ist
- Konstruiere eine Primzahl einer bestimmten Größenordnung (mit bestimmten Eigenschaften)
Wir wollen also zum Beispiel eine Primzahl der Gestalt konstruieren.
Wir verwenden die Eulersche Funktion um die Zahlen in einem Intervall zu bestimmen, die keine kleinen Teiler haben. Damit können wir große Zahlen bestimmen, die so gut wie keine kleinen Teiler haben und somit wahrscheinlich Primzahlen sind. Das heißt uns fehlt jetzt nur noch die Möglichkeit zu bestimmen ob diese Zahlen wirklich alles prim sind.
Für eine Primzahl und ganze Zahlen gilt:
Wir nutzen dieses Lemma um den Kleinen Satz von Fermat zu beweisen. Dieser lässt sich auch aus dem Satz von Euler herleiten.
Mit dem Satz von Euler können wir außedem folgende Folgerung zeigen. Wenn , dann gilt Durch und faches potenzieren von verschwindet also die eulersche Funktion.
Wir wissen jetzt also
und können damit ausschließen, dass eine Primzahl ist, wenn wir ein finden, sodass Um diese Überlegung als Primzahltest auszunutzen müssen wir die Potenz sehr schnell berechnen können. Wir nutzen die binäre Darstellung des Exponenten aus und kommen somit auf die Square-And-Multiply-Methode zum Potenzieren.
Mit dem Fermat-Test lassen sich Primzahlen und Pseudoprimzahlen bestimmen beziehungsweise testen.
Spezialfall: Carmichael-Zahl mit Korselt-Kriterium.
Dieser ungünstige Spezialfall führt uns auf den Miller-Rabin-Primzahltest.
Exkurs: Sieb des Erathosthenes
Kapitel 5 - Public-Key-Verschlüsselung - RSA
RSA ist ein Verschlüsselungsverfahren bei dem der Schlüsselaustausch sehr sicher ist, da ein Public Key von jedem gesehen werden darf, während der Private Key bei einem selbst bleibt.
Angriffe auf RSA
Der RSA-Exponent ist Teil des Public Key. Wird ein zu kleiner Exponent, von mehreren Personen gleichzeitig verwendet kann man bei Kentniss des Public Key und des Chiffretext diesen mit dem Chinesischen Restsatz entschlüsseln.
Bei drei Personen mit wird der Klartext zum Beispiel so verschlüsselt Man berechnet mit dem chinesischen Restsatz
Und erhält die Ausgangsfolge mit
Algorithmus zur Berechnung der abgerundeten k-ten Wurzel
Exkurs: Kettenbrüche
Kettenbruch Kettenbruchentwicklung
Approximation irrationaler Zahlen
Kapitel 6 - Die Pollardsche rho-Methode zur Faktorisierung
Kapitel 7 - Kryptographische Anwendung diskreter Logarithmen
Wir definieren die Ordnung.
Exkurs zur Funktion
Schlüsselaustausch nach Diffie-Hellmann
ElGamal-Verschlüsselung Massey-Omura-Verschlüsselung
Kapitel 8 - Kryptographische Hashfunktionen
Ein Beispiel einer Hash-Funktion ist SHA-1. Eine typische Attacke auf Hash-Funktionen ist die Geburtstagsattacke, welche die Eigenschaft ausnutzt, dass Hash-Funktionen nie komplett injektiv sind. Message Authentication Codes sind spezielle Hashfunktionen mit denen man die Authentizität einer Nachricht überprüfen kann.
Kapitel 9 - Digitale Signaturen
Eigenschaften, die eine Signatur haben sollte:
- authentisch
- fälschungssicher
- nicht wiederverwendbar
- Das Dokument ist unveränderbar nach Unterzeichnung
- Die Unterschrift kann nicht zurückgenommen werden
Allgemeine Verfahren:
- Public-Key-Verschlüsselung
- Public-Key-Verschlüsselung mit Hash-Funktion
- Digitale Signatur mit Verschlüsselung
Explizite Algorithmen: