Diffie-Hellman-Schlüsselaustausch
Symmetrische Verschlüsselungsverfahren bieten vor allem im Bezug auf die Geschwindigkeit einen großen Vorteil. Ein zentrales Problem ist dabei aber die große Anzahl von Schlüsseln und deren sicherer Austausch zwischen den Kommunkationspartnern.
Die zentrale Frage ist: Kann man einen Schlüssel über ein unsicheres Medium
austauschen?
Die Wissenschaflter Whitfield Diffie und Martin Hellman haben 1976 festgestellt: Ja, man kann.
Der Algorithmus in Farbe
Die Mathematik hinter dem Algorithmus ist leider nicht ganz einfach zu verstehen. Dafür gibt es aber eine schöne Analogie mit Farben, die man zum Verständnis nutzen kann.
Der Ablauf:
- Alice und Bob einigen sich auf eine gemeinsame (öffentliche) Farbe.
- Jeder wählt sich zudem eine geheime weitere Farbe.
- Alice und Bob mischen sich aus ihrer geheimen und der öffentlichen Farbe eine weitere Farbe.
Die gemeinsame Farbe am Ende des Prozesses besteht also aus drei gemischten Farben. Und Eve in der Mitte?
Sie hat nur die öffentliche Farbe und zwei gemischte Farben. Und wie du vielleicht aus dem Kunstunterricht
weißt, ist es ziemlich schwierig, aus einer Mischfarbe zu erkennen, welche Ausgangsfarben genau darin stecken.
Du kannst das hier einmal selbst nachspielen:
Der Algorithmus mit Zahlen
Das mathematische Verfahren beruht auf dem sog. "modularen Potenzieren", das du
vielleicht noch im Kapitel zum RSA-Verfahren kennenlernen wirst. Auch wenn der
mathematische Hintergrund nicht so einfach zu verstehen ist, kannst du das Verfahren aber
sicherlich einmal hier nachvollziehen. Die wesentlichen Schritte sind (ganz analog zu den Farben oben) die Folgenden:
(Zur Erinnerung: Modulo (mod) ist eine Funktion, die den Rest einer Division berechnet.)
- Alice und Bob einigen sich auf zwei öffentliche Zahlen: Eine (in der Wirklichkeit sehr große) Primzahl p und eine (kleinere) Zahl g.
- Beide wählen sich jeweils eine zufällige Zahl (Alice: x und Bob: y).
- Aus der öffentlichen und ihrer geheimen Zahl berechnen beide jeweils eine neue Zahl
Alice: a = gx mod p
Bob: b = gy mod p - Diese Zahlen werden wieder ausgetauscht und damit können dann beide den gemeinsamen Schlüssel berechnen:
Alice: schlüssel = bx mod p
Bob: schlüssel = ay mod p
Du kannst das hier einmal ausprobieren:
Gemeinsame Zahlen (Öffentlicher Schlüssel) | |
---|---|
p (Primzahl): | |
g (< p): | |
Alice x (zufällig) |
|
Bob y (zufällig): |
|
Berechnete öffentliche Werte: | |
Alice | a = gx mod p = gx mod p = #Wert |
Bob | b = gy mod p = gy mod p = #Wert |
Berechnete Schlüsselwerte: | |
Alice | schlüssel = bx mod p = bx mod p = #Wert |
Bob | schlüssel = ay mod p = ay mod p = #Wert |