Lernziele
- Sie haben mit unserem Vigenère-Cipher einen Schlüsseltausch umgesetzt und können ihn erklären.
- Die können das diskrete Logarithmusproblem beschreiben und was es zu einer Einbahnstrasse macht.
- Sie haben einen Diffie-Hellman-Schlüsselaustausch mit einfachen Zahlen absolviert und könne ihn erklären.
- (Die Herleitung, wieso das funktioniert, wird nicht abgefragt.)
Wir haben das Kerckhoffs-Prinzip kennengelernt: “Ein kryptografisches System sollte auch dann sicher sein, wenn alles darüber bekannt ist, ausser dem geheimen Schlüssel.” Da stellt sich natürlich die Frage: Wie tauschen wir die Schlüssel aus?
Experiment mit unserem Vigenère-Cipher
Testen Ihres Programms
Wir werden die Grundidee zuerst mit unserem Vigenère-Cipher demonstrieren. Testen Sie, ob Sie das Verfahren gleich implementiert haben. Verschlüsseln Sie dazu folgenden Satz mit dem Schlüssel MeinSchluessel
.
Wir treffen uns im Cybercafe, follow the white rabbit.
Sie sollten den gleichen Ciphertext wie Ihre Partnerin oder Ihr Partner erhalten. Wenn Sie den Cipher genau wie im Video implementiert haben, erhalten Sie Vfs ymejsby rrr js Xyfronlci, guqgoa qsp agfuk mafofe.
Demonstration
Jetzt nehmen wir an, Sie kommunizieren ausschliesslich über offene Kanäle. Alle anderen hören Ihre komplette Kommunikation mit! Wie könnten sich zwei Parteien trotzdem auf einen gemeinsamen geheimen Schlüssel einigen?
Befolgen Sie beide folgende Schritte:
- Überlegen Sie sich als Einzelperson einen geheimen Schlüssel. Jede Person hat also einen Schlüssel, den nur sie kennt.
- Vereinbaren Sie ein Startwort über den offenen Kanal. Dieses Startwort kennt also die ganze Welt!
- Verschlüsseln Sie einzeln für sich das Startwort mit Ihrem privaten Schlüssel.
- Schicken Sie Ihrer Partnerin oder Ihrem Partner Ihren Ciphertext. Die ganze Welt hört mit und sieht diesen Ciphertext!
- Verschlüsseln Sie nun den erhaltenen Ciphertext, den Sie erhalten haben, mit Ihrem privaten Schlüssel.
- Vergleichen Sie den Ciphertext, den Sie nun beide generiert haben. Sie sollten beide den gleichen Ciphertext erhalten! Das ist Ihr Schlüssel, den Sie nun beide für Ihre geheime Kommunikation verwenden können.
Besprechen und analysieren Sie!
- Wieso funktioniert das? Diskutieren und erklären Sie sich das.
- Was für Schwächen gibt es?
Lösung
Unser Vigènere-Cipher ist schwach: Mit den ausgetauschten Ciphertexten und dem Originaltext ist es ein Leichtes, die privaten Schlüssel von Alice und Bob herzuleiten. Man müsste bloss die Verschiebung der Buchstaben zählen.
Das Diskrete Logarithmusproblem (DLP)
Das Diskrete Logarithmusproblem (DLP) ist ein mathematisches Problem, das im Folgenden und in der Kryptographie generell eine zentrale Rolle spielt. Es besagt, dass es schwierig ist, den Exponenten zu finden, wenn man die Basis , den Modulo und das Ergebnis kennt:
In anderen Worten, selbst wenn man , und kennt, ist es schwierig, herauszufinden. Das DLP ist schwierig, weil es keine effizienten Algorithmen gibt, um den Exponenten zu berechnen, wenn , und bekannt sind. Man kann nicht einfach herleiten, wie oft die Zahl um die Uhr von gedreht hat.
Einfacher gesagt, ist das DLP wie eine Einbahnstrasse: Es ist sehr einfach, in eine Richtung zu kommen. Aber der Rückweg, also wieder herauszufinden, dass ist aufwändig schwer.
Eine Analogie, die sich anbietet, ist folgende:
- Aus Kaffeebohnen und Milch einen Cappuccino zu machen, ist relativ einfach (wenn man es kann… 🧐).
- Aus einem Cappuccino wieder Kaffeebohnen und Milch zu machen, ist für Menschen unmöglich.
Bedingungen für p
und g
Damit diese Einbahnstrasse sicher ist, sollte man p
und g
wie folgt wählen.
- Die Primzahl sollte gross sein, um die Sicherheit des Verfahrens zu gewährleisten. Eine typische Grösse für ist mindestens 2048 Bits. Das heisst: . Diese Zahlen sind extrem gross und werden in der Kryptographie verwendet, um sicherzustellen, dass es für Angreifer praktisch unmöglich ist, die Zahl zu erraten oder zu berechnen.
als Zahl ausgeschrieben
32317006071311007300714876688669951960444102669715484032130345427524655138867890893197201411522913463688717960921898019494119559150490921095088152386448283120630877367300996091750197750389652106796057638384067568276792218642619756161838094338476170470581645852036305042887575891541065808607552399123930385521914333389668342420684974786564569494856176035326322058077805659331026192708460314150258592864177116725943603718461857357598351152301645904403697613233287231227125684710820209725157101726931323469678542580656697935045997268352998638215525166389437335543602135433229604645318478604952148193555853611059596230656
Die Zahlt hat 617 Stellen.
- Die Basis muss kleiner als sein.
- sollte ein sogenannter “Generator” für sein. Das bedeutet, dass die Potenzen alle möglichen Reste (die zyklische Gruppe ) durchlaufen sollten.
Zusatz: Wann ist ein Generator ?
ist ein Generator , wenn eine “primitive Wurzel” ist. Das bedeutet: Die kleinstmögliche Potenz , für die , muss sein. Wieso? Weil das garantiert, dass alle Potenzen bis dahin unterschiedliche Resultate erzeugen.
Zum Beweis überlegen Sie das kontrafaktisch: Stellen Sie sich vor, es gäbe zwei deckungsgleiche Potenzen im Bereich . Daraus würde folgen, dass , also dass es eine Potenz gäbe, die erfüllt, aber kleiner als ist.
- In unseren Beispielen verwenden wir oft die Zahlen oder , da diese Werte einfach zu berechnen sind und in vielen Fällen als Generatoren funktionieren.
Diffie-Hellman-Key-Exchange
Martin Hellman (links) und Whitfield Diffie (rechts) im Jahr 1977. (Bild: Chuck Painter/Stanford News Service)
Der Diffie-Hellman-Key-Exchange wurde 1976 von Martin Hellman und Whitfield Diffie veröffentlicht und revolutionierte die Kryptografie. Das Verfahren nutzt die Einbahnstrasse des DLP für den Schlüsselaustausch.
Schritte des Diffie-Hellman-Key-Exchanges
-
Vereinbarung der öffentlichen Parameter:
- Eine Primzahl und eine Basis werden öffentlich bekannt gegeben.
- Diese Parameter werden von beiden Parteien verwendet.
-
Erstellung der privaten Schlüssel:
- Jede Partei wählt einen privaten Schlüssel (für Alice) und (für Bob).
- Diese privaten Schlüssel bleiben geheim.
-
Berechnung der öffentlichen Schlüssel:
- Alice berechnet .
- Bob berechnet .
-
Austausch der öffentlichen Schlüssel:
- Alice sendet an Bob.
- Bob sendet an Alice.
-
Berechnung des gemeinsamen geheimen Schlüssels:
- Alice berechnet
- Bob berechnet
- Beide berechnen den gleichen Schlüssel, da
-
Schlussfolgerung und Fragestellung:
- Zusammengefasst heisst das: .
Beispiel mit dem Rechner
Power Mod Calculator
Beispiel in Python
Wieso funktioniert das?
Wir haben gesehen, dass .
Intuitiv erinnert Sie das vielleicht an das Potenzgesetz: . Aber können wir uns sicher sein, dass das auch mit Modulo funktioniert?
Der Kern, wieso das funktioniert, ist eine Einsicht der modularen Arithmetik. Experimentieren Sie dazu zunächst selbst:
- Wählen Sie eine Zahl auf dieser Modulo-Uhr für und rechnen Sie die Zahl hoch 2. Markieren Sie die Zahl, die Sie erhalten haben.
- Wählen Sie eine zweite Zahl aus dem gleichen Sektor und rechnen Sie die Zahl ebenfalls hoch 2.
- Wählen Sie eine dritte Zahl aus dem gleichen Sektor und rechnen Sie die Zahl ebenfalls hoch 2.
Was fällt auf?
Lösung
Alle Ergebnisse liegen in ein und demselben Sektor!
Wenn Sie Zahlen aus demselben Ursprungssektor mit der gleichen Zahl potenzieren, werden auch die Ergebnisse immer in einem gemeinsamen Ergebnissektor liegen. Wieso?
Nehmen wir als Basis die Zahl 2 und potenzieren Sie mit 2.
Wenn wir nun eine Zahl aus demselben Ursprungssektor wie 2 anschauen, muss die gezwungenermassen um ein Vielfaches der Primzahl 7 grösser sein, z.B. , oder . Wir müssen also beweisen, wieso generell sein wird.
Klammern wir dazu aus und formen um:
Damit sieht man: Das Ergebnis wird immer plus ein Vielfaches von bleiben und damit immer “kongruent” mit bleiben (also das Gleiche ergeben).
Mit anderen Worten: Der Modulo bricht das Potenzgesetz nicht. Das Potenzgesetz “überlebt” den Modulo.