Diffie-Hellman Schlüsselaustausch

  • Diskreter Logarithmus im unendlichen Zahlenraum macht es schwierig eine Rückrechnung anzustellen

Vorgehen

  1. (Öffentlich) werden zwei Zahlen g und p bestimmt und ausgetauscht
    • p ist mindestens eine 2048bit-Primzahl
    • g
  2. Es werden private Schlüssel x und y erstellt.
    • Diese Schlüssel bleiben geheim und sind nur dem Ersteller bekannt
  3. Mit Hilfe von p und g wird jetzt ein öffentlicher Schlüssel von x (respektive y auf der Gegenseite) erstellt
    • Bob: g^x mod p = X | Alice: g^y mod p = Y
  4. Dieser öffentliche Schlüssel X und Y kann jetzt ausgetauscht werden (unverschlüsselt)
  5. Berechnung des gemeinsamen Schlüssels
    • Der gemeinsame Schlüssel wird dann zur symmetrischen Verschlüsselung genutzt.
    • Bob: Y^x mod p | Alice: X^y mod p
    • Beide bekommen dadurch den selben Schlüssel

Aktuell fehlt bei diesem Stand die Authentifizierung, denn es könnte ein MITM Angriff durchgeführt werden, ohne das Bob oder Alice davon weiß.

Ablauf eigenes erklärt

  1. Beide Parteien besitzen bereits private Schlüssel oder erstellen on-the-fly einen privaten Sitzungsschlüssel.
  2. Sie sprechen miteinander welche p und g sie für den öffentlichen Sitzungsschlüssel nutzen möchten.
  3. Beide Parteien erstellen mit Hilfe von den privaten Sitzungsschlüssel und zuvor ausgemachtem p und g einen öffentlichen Sitzungsschlüssel
  4. Dieser öffentliche Sitzungsschlüsse wird signiert und von öffentlicher Stelle (PKI) zertifiziert um MITM Angriffe zu unterbinden.
  5. Öffentlicher Sitzungsschlüssel wird ausgetauscht und symmetrischer Schlüssel abgeleitet.

Lösung MITM - Zertifikate

  • In der Praxis wird der öffentliche Schlüssel an den DNS Namen des Servers gebunden und dann von einer Vertrauenswürdigen Stelle (den beide Vertrauen) signiert - das ergibt dann ein Zertifikat.
    • Lets Encrypt macht das bspw. durch den Besitzer der Domäne den wir dann vorgeben zu sein.
      • Wir möchten ein Zertifikat für die Domäne timogremler.de haben was von Lets Encrypt signiert ist
      • Ich hinterlege ein Secret in meinem DNS damit Lets Encrypt sicherstellen kann das ich wirklich Besitzer der Domäne bin und nicht Hans Müller
      • Somit wurde ich als Besitzer der Domain authentifiziert und Lets Encrypt stellt mit ein Zertifikat aus
  • Wenn die erstellten öffentlichen Schlüssel ausgetauscht werden, werden sie vorher mit einem privaten Schlüssel signiert, wo der öffentliche Schlüssel von einer CA signiert wurde. So können die Gegenparteien sicherstellen, dass der öffentliche Schlüssel wirklich von dem jeweils anderen kommt

References