TLS-Sitzungsschlüssel
Problem
Tausende Benutzer verbinden sich mit dem gleichen Server.
Sie können alle das gleiche Serverzertifikat und den gleichen öffentlichen Schlüssel sehen.
Jede Verbindung benötigt ihre eigenen geheimen Verschlüsselungsschlüssel.
Lösung — Sitzungsschlüssel pro Verbindung
In einem typischen modernen TLS-Handshake haben Schlüssel zwei Jobs:
Identität: Der Server signiert den Handshake mit seinem langfristigen privaten Schlüssel; der Client überprüft die Signatur mit dem öffentlichen Schlüssel des Zertifikats.
Schlüsselaustausch: Beide Seiten erzeugen neue temporäre Schlüsselpaare und tauschen ihre öffentlichen Schlüssel aus.
Privater Client-Schlüssel + Öffentlicher Server-Schlüssel → gemeinsames Geheimnis Privater Server-Schlüssel + Öffentlicher Client-Schlüssel → dasselbe gemeinsame Geheimnis
Hier sind alle vier Schlüssel temporär. Aus dem gemeinsamen Geheimnis und den Handshake-Daten leiten beide Seiten übereinstimmende symmetrische Verkehrsschlüssel ab: einen je Richtung, mit dem der Sender verschlüsselt und der Empfänger entschlüsselt.
Verbindung 1 ↔ Server → Schlüssel A Verbindung 2 ↔ Server → Schlüssel B Verbindung 3 ↔ Server → Schlüssel C
Diese Verbindungen können alle aus dem gleichen Browser stammen. Mehrere Anfragen können sich eine Verbindung und ihre Schlüssel teilen.
Die Verbindung dauert nur so lange, wie alle Teilnehmer sie offen halten. TLS selbst legt keine universelle Verbindungsdauer fest.
Kerngedanke: Das Zertifikat kann öffentlich geteilt werden; Verkehrsschlüssel sind verbindungsspezifische Geheimnisse.