Ablauf des TLS-Handshakes
Das TLS-Handshake-Protocol verwendet Pakete des TLS-Record-Protocol. Der Zweck des Handshakes besteht darin, dass ein Client mit einem Server ein möglichst sicheres Verfahren der Kommunikation absprechen will. Die prominentetste Anwendung ist hier HTTPS, also die verschlüsselte Übertragung von Web-Inhalten, beispielsweise für das Online-Banking.Im Zuge des TLS-Handshakes tauschen Client und Server sich darüber aus, welche Verschlüsselungsverfahren sie beherrschen und suchen das sicherste davon aus.
Client | Server |
---|---|
Phase 1 | |
Client Hello
| Server Hello
|
Phase 2 | Certificate Der Server sendet sein-Zertifikat. Auf dieser Basis ist bereits eine assymetrische Verschlüsselung möglich |
Server Key Exchange (optional)
Für den Schlüsselaustausch wird der öffentliche Diffie-Hellman-Schlüssel versandt. |
Server Hello Done |
Client prüft das Server-Zertifikat. Ist es durch eine X509-Zertifizierungsstelle (CA) autorisiert? | |
Client Key Exchange (optional) | |
Phase 3 | |
Server und Client erstellen mit dem Diffie-Hellmann-Schlüsseltausch ein gemeinsames Geheimnis in Form einer Zufallszahl (PreMasterKey). | |
Phase 4 | |
Client errechnet den Master-Key | Server errechnet den Master Key |
Der Master-Key bildet die Grundlage für die im weiteren erfolgende symmetrische Verschlüsselung.
In den meisten Fällen besitzt nur der Server ein Zertifikat. Sollte auch der Client ein Zertifikat besitzen, sendet er dieses dem Server nach Erhalt des Server-Zertifikats. In dem Fall kann der PreMasterKey auf der Basis dieser Zertifikate ausgetauscht werden.
Die Nachrichten-Integrität und -Authentizität wird durch Message Authentication Code gewährleistet. Dazu wird eine Hash-Funktion auf die Nachricht angewendet und das Ergebnis durch den gemeinsamen Schlüssel verschlüsselt.
Cipher Suite
Eine Cipher Suite stellt eine Zusammenstellung von kryptografischen Verfahren dar. Da die Verfahren sich im Laufe der Zeit ändern oder ablösen, können Client und Server auf der Basis ihrer Fähigkeiten die bestmöglichen Varianten ermitteln. Die Verfahren benennen:
- Handshake-Verfahren zum Schlüsselaustausch wie RSA, ECDH (Diffie-Hellmann-Schlüsseltausch)
- Authentifizierung wie RSA, DSA
- Verschlüsselung wie AES, RC4
- Hash-Funktion wie SHA, MD5
Nach Ermittlung der optimalen Lösung wird die Cipher-Suite in einem String zusammengestellt, der durch das Protokoll eingeleitet wird.
TLS_DHE_RSA_WITH_DES_CBC_SHA
Diffie-Hellman-Schlüsselaustausch
Das Diffie-Hellman-Verfahren dient zum Austausch von Schlüsseln über eine unsichere Leitung.Wie man es schafft, ein Geheimnis über eine abgehörte Leitung zu senden, beschreibt eine Analogie mit Farben
Farb-Handshake
Das folgende Verfahren beruht auf der Erkenntnis, dass es leicht ist, Farben miteinander zu vermischen, aber deutlich schwerer ist, aus einer gemischten Farbe deren Bestandteile zu ermitteln.
- Beide Teilnehmer verwenden eine gemeinsame Farbe, die bekannt sein darf, beispielsweise gelb.
- Jeder Teilnehmer hat eine eigene, geheime Farbe, die er nun zu der gemeinsamen Farbe hinzumischt.
- Die Mischung wird ausgetauscht.
- Nun mischt jeder seine geheime Farbe in die erhaltene Mischung des anderen.
- Auf diese Weise haben Sie nun die gleiche Farbe, die sie als geheimen Schlüssel verwenden können.
Diffie-Hellmann-Handshake
Client | Server |
---|---|
Erzeugt Client-Zufallszahl und sendet sie an den Server | |
Empfängt Client-Zufallszahl | |
Erzeugt Server-Zufallszahl | |
Sendet Server-Zufallszahl und sein öffentliches Zertifikat | |
Empfängt Server-Zufallszahl und öffentliches Server-Zertifikat | |
Server-DH-Parameter | |
Signatur vom Schlüssel-Server | |
Sendet Server-DH-Parameter und Signatur vom Schlüssel-Server | |
Empfängt Server-DH-Parameter und Signatur vom Schlüssel-Server | |
Sendet Client DH-Parameter an den Server |
Beide ermitteln unabhängig voneinander aus Server DH-Parameter und Client DH-Parameter das identischen Premaster Geheimnis.
Beide ermitteln unabhängig voneinander aus der Client-Zufallszahl, der Server-Zufallszahl und dem Premaster Geheimnis den identischen Session-Key.