Sobes.tech
Senior

Wie erfolgt die Verschlüsselung der Informationen im Diffie-Hellman-Algorithmus?

sobes.tech KI

Antwort von AI

Die Verschlüsselung an sich ist keine direkte Funktion des Diffie-Hellman-Algorithmus. Sein Hauptziel ist der sichere Austausch kryptografischer Schlüssel über einen offenen Kanal. Danach kann dieser gemeinsame geheime Schlüssel für symmetrische Datenverschlüsselung verwendet werden.

Der Schlüssel-Austausch-Prozess sieht folgendermaßen aus:

  1. Auswahl öffentlicher Parameter: Zwei Parteien (Alice und Bob) einigen sich auf eine große Primzahl p und eine Basisezahl g (Generator der zyklischen Gruppe Zₚ*). g muss eine primitive Wurzel modulo p sein.
  2. Generierung geheimer Zahlen: Jede Partei generiert ihre eigene geheime Zufallszahl. Alice wählt a, Bob wählt b. a und b bleiben geheim.
  3. Berechnung öffentlicher Schlüssel:
    • Alice berechnet A = g^a mod p.
    • Bob berechnet B = g^b mod p.
    • A und B sind öffentliche Schlüssel und können sicher über einen offenen Kanal gesendet werden.
  4. Berechnung des gemeinsamen geheimen Schlüssels:
    • Alice erhält B von Bob und berechnet den gemeinsamen geheimen Schlüssel S = B^a mod p.
    • Bob erhält A von Alice und berechnet den gleichen Schlüssel S = A^b mod p.

Mathematisch gilt (g^b mod p)^a mod p = g^(b*a) mod p und (g^a mod p)^b mod p = g^(a*b) mod p. Da a*b = b*a sind, berechnen beide Seiten den gleichen Wert S, der ihr gemeinsamer geheimer Schlüssel wird.

# Beispiel in Python
import random

# 1. Auswahl öffentlicher Parameter (in der Praxis viel größere Zahlen)
p = 23
g = 5

print(f"Öffentliche Parameter: p = {p}, g = {g}")

# 2. Generierung geheimer Zahlen
a = random.randint(2, p - 2) # Geheime Zahl von Alice
b = random.randint(2, p - 2) # Geheime Zahl von Bob

print(f"Geheime Zahl von Alice: {a}")
print(f"Geheime Zahl von Bob: {b}")

# 3. Berechnung öffentlicher Schlüssel
A = pow(g, a, p) # Öffentlicher Schlüssel von Alice: g^a mod p
B = pow(g, b, p) # Öffentlicher Schlüssel von Bob: g^b mod p

print(f"Öffentlicher Schlüssel von Alice: {A}")
print(f"Öffentlicher Schlüssel von Bob: {B}")

# 4. Berechnung des gemeinsamen geheimen Schlüssels
# Alice berechnet: B^a mod p
shared_key_alice = pow(B, a, p)

# Bob berechnet: A^b mod p
shared_key_bob = pow(A, b, p)

print(f"Gemeinsamer geheimer Schlüssel (Alice): {shared_key_alice}")
print(f"Gemeinsamer geheimer Schlüssel (Bob): {shared_key_bob}")

# Überprüfung: die Schlüssel sollten übereinstimmen
print(f"Schlüssel stimmen überein? {shared_key_alice == shared_key_bob}")

Nach erfolgreichem Schlüsselaustausch können beide Parteien den Wert S als Schlüssel für symmetrische Verschlüsselungsalgorithmen (z.B. AES, DES) verwenden, um Nachrichten später zu verschlüsseln und zu entschlüsseln. Diffie-Hellman führt keine Datenverschlüsselung durch. Es löst das Problem des sicheren Austauschs von Schlüsseln für die nachfolgende symmetrische Verschlüsselung.