EKryptologieSchlüsselaustausch

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:

  1. Überlegen Sie sich als Einzelperson einen geheimen Schlüssel. Jede Person hat also einen Schlüssel, den nur sie kennt.
  2. Vereinbaren Sie ein Startwort über den offenen Kanal. Dieses Startwort kennt also die ganze Welt!
  3. Verschlüsseln Sie einzeln für sich das Startwort mit Ihrem privaten Schlüssel.
  4. Schicken Sie Ihrer Partnerin oder Ihrem Partner Ihren Ciphertext. Die ganze Welt hört mit und sieht diesen Ciphertext!
  5. Verschlüsseln Sie nun den erhaltenen Ciphertext, den Sie erhalten haben, mit Ihrem privaten Schlüssel.
  6. 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. svg alt tag

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 kk zu finden, wenn man die Basis gg, den Modulo pp und das Ergebnis KK kennt: svg alt tag In anderen Worten, selbst wenn man gg, pp und KK kennt, ist es schwierig, kk herauszufinden. Das DLP ist schwierig, weil es keine effizienten Algorithmen gibt, um den Exponenten kk zu berechnen, wenn gg, pp und KK bekannt sind. Man kann nicht einfach herleiten, wie oft kk die Zahl um die Uhr von modp\mod p gedreht hat.

svg alt tag

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 k=3k = 3 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.

svg alt tag

Bedingungen für p und g

Damit diese Einbahnstrasse sicher ist, sollte man p und g wie folgt wählen.

  • Die Primzahl pp sollte gross sein, um die Sicherheit des Verfahrens zu gewährleisten. Eine typische Grösse für pp ist mindestens 2048 Bits. Das heisst: 220482^{2048}. 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.

220482^{2048} als Zahl ausgeschrieben

32317006071311007300714876688669951960444102669715484032130345427524655138867890893197201411522913463688717960921898019494119559150490921095088152386448283120630877367300996091750197750389652106796057638384067568276792218642619756161838094338476170470581645852036305042887575891541065808607552399123930385521914333389668342420684974786564569494856176035326322058077805659331026192708460314150258592864177116725943603718461857357598351152301645904403697613233287231227125684710820209725157101726931323469678542580656697935045997268352998638215525166389437335543602135433229604645318478604952148193555853611059596230656

Die Zahlt hat 617 Stellen.

  • Die Basis gg muss kleiner als pp sein.
  • gg sollte ein sogenannter “Generator” für pp sein. Das bedeutet, dass die Potenzen gkmodpg^k\mod{p} alle möglichen Reste (die zyklische Gruppe Zp\mathbb{Z}_p^*) durchlaufen sollten.

Zusatz: Wann ist gg ein Generator modp\mod{p}?

gg ist ein Generator modp\mod{p}, wenn gg eine “primitive Wurzel” modp\mod{p} ist. Das bedeutet: Die kleinstmögliche Potenz kk, für die gkmodp1g^k\mod{p} \equiv 1, muss p1p-1 sein. Wieso? Weil das garantiert, dass alle Potenzen bis dahin modp\mod{p} unterschiedliche Resultate erzeugen.

Zum Beweis überlegen Sie das kontrafaktisch: Stellen Sie sich vor, es gäbe zwei deckungsgleiche Potenzen gigjmodpg^i \equiv g^j \mod{p} im Bereich 0i<j<p10 \leq i < j < p-1. Daraus würde folgen, dass gji1modpg^{j-i} \equiv 1 \mod{p}, also dass es eine Potenz kk gäbe, die gkmodp1g^k\mod{p} \equiv 1 erfüllt, aber kleiner als p1p-1 ist.

  • In unseren Beispielen verwenden wir oft die Zahlen g=2g=2 oder g=5g=5, 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.

svg alt tag

Schritte des Diffie-Hellman-Key-Exchanges

  1. Vereinbarung der öffentlichen Parameter:

    • Eine Primzahl pp und eine Basis gg werden öffentlich bekannt gegeben.
    • Diese Parameter werden von beiden Parteien verwendet.
  2. Erstellung der privaten Schlüssel:

    • Jede Partei wählt einen privaten Schlüssel aa (für Alice) und bb (für Bob).
    • Diese privaten Schlüssel bleiben geheim.
  3. Berechnung der öffentlichen Schlüssel:

    • Alice berechnet A=gamodpA = g^a \mod p.
    • Bob berechnet B=gbmodpB = g^b \mod p.
  4. Austausch der öffentlichen Schlüssel:

    • Alice sendet AA an Bob.
    • Bob sendet BB an Alice.
  5. Berechnung des gemeinsamen geheimen Schlüssels:

    • Alice berechnet Kba=BamodpK_{ba} = B^a \mod p
    • Bob berechnet Kab=AbmodpK_{ab} = A^b \mod p
    • Beide berechnen den gleichen Schlüssel, da Kab=KbaK_{ab} =K_{ba}
  6. Schlussfolgerung und Fragestellung:

    • Zusammengefasst heisst das: (gamodp)bmodp=(gbmodp)amodp(g^a \mod p)^b \mod p = (g^b \mod p)^a \mod p.

Beispiel mit dem Rechner

Power Mod Calculator

gk mod n = K
53 mod 23 = 10

Beispiel in Python

Loading...
Run

Wieso funktioniert das?

Wir haben gesehen, dass (gamodp)bmodp=(gbmodp)amodp(g^a \mod p)^b \mod p = (g^b \mod p)^a \mod p.

Intuitiv erinnert Sie das vielleicht an das Potenzgesetz: (ga)b=(gb)a=gab(g^a)^b = (g^b)^a = g^{ab}. 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 mod7\mod{7} 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?

svg alt tag

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.

22=42^2 = 4

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. 2+17=92+1*7=9, oder 2+27=162+2*7=16. Wir müssen also beweisen, wieso generell (2+p)24(2+p)^2 \equiv 4 sein wird.

Klammern wir dazu aus und formen um:

(2+p)2=22+2p+p2=22+p(2+p)(2+p)^2 = 2^2 + 2p + p^2 = 2^2 + p(2 + p)

Damit sieht man: Das Ergebnis wird immer 222^2 plus ein Vielfaches von pp bleiben und damit immer “kongruent” mit 222^2 bleiben (also modp\mod{p} das Gleiche ergeben).

Mit anderen Worten: Der Modulo bricht das Potenzgesetz nicht. Das Potenzgesetz “überlebt” den Modulo.