🔑Schlüsselaustausch
Das Kernproblem: Client und Server brauchen einen gemeinsamen symmetrischen Schlüssel – aber jede Nachricht zwischen ihnen kann mitgelesen werden. Die Lösung von Diffie und Hellman (1976) ist bis heute das Herz von TLS.
🎨1. Die Idee mit Farben
Schritt 1: Alice und Bob einigen sich öffentlich auf eine gemeinsame Grundfarbe (Gelb). Eve hört mit – egal.
Die Analogie trägt, weil sich Farben leicht mischen, aber kaum „entmischen“ lassen. In der Mathematik entspricht Mischen dem Potenziereng^a mod p – leicht zu rechnen, schwer umzukehren (diskreter Logarithmus).
🧮2. Diffie-Hellman mit echten Zahlen
g^x mod p. Wähle eigene Werte oder eine Voreinstellung und gehe Schritt für Schritt durch – alles wird mit BigInt exakt gerechnet.📈3. ECDHE mit X25519 – echt im Browser
Punkt 9 ist der Basispunkt von Curve25519 (u-Koordinate 9). Die Rechnung läuft mit @noble/curves vollständig in deinem Browser; die Testvektoren sind in tests/crypto.test.ts geprüft.
⏳4. RSA-Schlüsseltransport vs. ECDHE: Forward Secrecy
Der Client würfelt das Pre-Master-Secret und schickt es mit dem öffentlichen RSA-Schlüssel des Servers verschlüsselt (ClientKeyExchange). Lehrbuch-RSA mit winzigen Zahlen: p = 61, q = 53, n = 3233, e = 17, d = 2753.
Hinweis: Echtes TLS 1.2 nutzt 2048-Bit-RSA mit PKCS#1-v1.5-Padding (anfällig für Bleichenbacher-/ROBOT-Angriffe). TLS 1.3 hat den RSA-Schlüsseltransport ganz gestrichen.
Beide Seiten erzeugen pro Verbindung ein frisches X25519-Schlüsselpaar und vergessen es nach dem Handshake. Der langlebige Serverschlüssel (im Zertifikat) wird nur zum Signieren benutzt (CertificateVerify) – er verschlüsselt nichts.
Klicke links auf „gestohlen“ und vergleiche.
psk_dhe_ke); der reine PSK-Modus psk_ke hat keine Forward Secrecy.⚛️5. Post-Quanten: hybrid X25519 + ML-KEM
Größe des key_share (Byte)
0x001Dgemeinsames Geheimnis: 32 Byte0x0017gemeinsames Geheimnis: 32 Byte0x11ECgemeinsames Geheimnis: 64 ByteClient-Anteil = ML-KEM-768-Kapselschlüssel (1184 Byte) + X25519 (32 Byte); Server-Anteil = ML-KEM-Chiffrat (1088 Byte) + X25519 (32 Byte). Das Geheimnis ist die Verkettung beider Einzelgeheimnisse (ML-KEM zuerst) und geht als (EC)DHE-Eingang in denselben HKDF-Schlüsselplan. Der ClientHello wird dadurch größer als ein typisches TCP-Segment.
📚 Quelle: RFC 10024 (August 2026, Standards Track) · secp256r1: unkomprimierter Punkt 1 + 2 × 32 Byte (RFC 8446 §4.2.8.2)
Warum schon jetzt? „Harvest now, decrypt later“
Ein großer Quantencomputer könnte mit dem Shor-Algorithmus diskrete Logarithmen auch auf elliptischen Kurven lösen – X25519 allein wäre dann gebrochen. Wer heute Verkehr mitschneidet, könnte ihn später entschlüsseln. Deshalb wird der Schlüsselaustausch hybrid gemacht: sicher, solange eines der beiden Verfahren hält.
- 📜 Standard: X25519MLKEM768 ist seit August 2026 als RFC 10024 veröffentlicht (Codepoint 0x11EC).
- 🌐 Chrome bietet seit Version 131 (Ende 2024) standardmäßig X25519MLKEM768 an (vorher Kyber, 0x6399).
- 🔧 OpenSSL 3.5 (April 2025) bietet standardmäßig die Keyshares X25519MLKEM768 und X25519 an.
- ✍️ Zertifikate/Signaturen sind noch klassisch (ECDSA/RSA) – Post-Quanten-Signaturen (ML-DSA) sind größer und werden noch erprobt. Für Signaturen eilt es weniger: sie müssen nur zum Zeitpunkt des Handshakes halten.
📚 Quelle: Google Security Blog, 13.09.2024 · OpenSSL 3.5 NEWS.md · Stand: September 2026