TLS Schlüsselaustausch und Sitzungsschlüssel 1.3: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 4: | Zeile 4: | ||
* bei TLS 1.3 praktisch nur noch TLS 1.3 | * bei TLS 1.3 praktisch nur noch TLS 1.3 | ||
* keine klassische Versionsverhandlung mehr wie bei TLS 1.2 | * keine klassische Versionsverhandlung mehr wie bei TLS 1.2 | ||
| + | |||
;Supported Groups | ;Supported Groups | ||
* Liste unterstützter (EC)DHE-Gruppen | * Liste unterstützter (EC)DHE-Gruppen | ||
| Zeile 9: | Zeile 10: | ||
* Gruppen definieren alle kryptographischen Parameter fest | * Gruppen definieren alle kryptographischen Parameter fest | ||
* keine Aushandlung von p oder g | * keine Aushandlung von p oder g | ||
| + | |||
;Key Share | ;Key Share | ||
* enthält den ephemeren DH/ECDH-Public-Key des Clients | * enthält den ephemeren DH/ECDH-Public-Key des Clients | ||
* Private Key verbleibt ausschließlich beim Client | * Private Key verbleibt ausschließlich beim Client | ||
| − | * Grundlage für die Berechnung des Shared Secret | + | * Grundlage für die spätere Berechnung des Shared Secret |
* ermöglicht den 1-RTT-Handshake | * ermöglicht den 1-RTT-Handshake | ||
| + | |||
;Client Random | ;Client Random | ||
* 32 Byte Zufallswert | * 32 Byte Zufallswert | ||
* fließt in die Schlüsselableitung ein | * fließt in die Schlüsselableitung ein | ||
* erhöht die Entropie des Handshakes | * erhöht die Entropie des Handshakes | ||
| + | |||
;(weitere Extensions, z. B. SNI, ALPN) | ;(weitere Extensions, z. B. SNI, ALPN) | ||
* SNI: gibt den gewünschten Ziel-Hostnamen an | * SNI: gibt den gewünschten Ziel-Hostnamen an | ||
| Zeile 23: | Zeile 27: | ||
* Extensions sind funktional, nicht kryptographisch zwingend | * Extensions sind funktional, nicht kryptographisch zwingend | ||
* werden im ClientHello unverschlüsselt übertragen | * werden im ClientHello unverschlüsselt übertragen | ||
| + | |||
| + | |||
==Server Hello== | ==Server Hello== | ||
;Selected Version | ;Selected Version | ||
| Zeile 28: | Zeile 34: | ||
* in diesem Fall TLS 1.3 | * in diesem Fall TLS 1.3 | ||
* keine weitere Versionsverhandlung mehr | * keine weitere Versionsverhandlung mehr | ||
| + | |||
;Key Share | ;Key Share | ||
* enthält den ephemeren DH/ECDH-Public-Key des Servers | * enthält den ephemeren DH/ECDH-Public-Key des Servers | ||
| Zeile 33: | Zeile 40: | ||
* ermöglicht beiden Seiten die Berechnung des Shared Secret | * ermöglicht beiden Seiten die Berechnung des Shared Secret | ||
* Private Key verbleibt ausschließlich beim Server | * Private Key verbleibt ausschließlich beim Server | ||
| + | |||
;Server Random | ;Server Random | ||
* 32 Byte Zufallswert des Servers | * 32 Byte Zufallswert des Servers | ||
* fließt in die Schlüsselableitung ein | * fließt in die Schlüsselableitung ein | ||
* ergänzt den Client Random zur Entropieerzeugung | * ergänzt den Client Random zur Entropieerzeugung | ||
| + | |||
| + | |||
==Handshake Secret== | ==Handshake Secret== | ||
| − | ; | + | ;Shared Secret |
| − | * | + | * wird nach Empfang des ServerHello lokal berechnet |
| − | * basiert auf | + | * basiert auf ephemerem (EC)DH |
* beide Seiten nutzen: | * beide Seiten nutzen: | ||
** eigenen Private Key | ** eigenen Private Key | ||
** fremden Public Key | ** fremden Public Key | ||
* Ergebnis ist auf beiden Seiten identisch | * Ergebnis ist auf beiden Seiten identisch | ||
| − | ;aus | + | * wird niemals übertragen |
| − | * | + | |
| − | * | + | ;Handshake Secret |
| − | * | + | * wird aus dem Shared Secret per HKDF abgeleitet |
| + | * stellt einen internen kryptographischen Zustand dar | ||
| + | * dient als Basis für die Handshake-Verschlüsselung | ||
| + | |||
| + | ;Handshake Traffic Keys | ||
| + | * werden aus dem Handshake Secret abgeleitet | ||
| + | * werden niemals übertragen | ||
| + | * ab der nächsten TLS-Nachricht aktiv | ||
| + | |||
;Verschlüsselung aktiv ab jetzt | ;Verschlüsselung aktiv ab jetzt | ||
| − | * | + | * alle folgenden Handshake-Nachrichten sind verschlüsselt |
| − | + | * geschützt mit den Handshake Traffic Keys | |
| + | |||
| + | |||
==Server Handshake Nachrichten (TLS 1.3)== | ==Server Handshake Nachrichten (TLS 1.3)== | ||
;EncryptedExtensions | ;EncryptedExtensions | ||
| Zeile 59: | Zeile 79: | ||
* z. B. ALPN, weitere verbindungsrelevante Parameter | * z. B. ALPN, weitere verbindungsrelevante Parameter | ||
* enthält keine Zertifikate und keine Signaturen | * enthält keine Zertifikate und keine Signaturen | ||
| + | |||
;Certificate | ;Certificate | ||
* Übertragung der Server-Zertifikatskette | * Übertragung der Server-Zertifikatskette | ||
| Zeile 67: | Zeile 88: | ||
** die Signatur der ausstellenden CA | ** die Signatur der ausstellenden CA | ||
* Client nutzt das Zertifikat zur Authentizitätsprüfung | * Client nutzt das Zertifikat zur Authentizitätsprüfung | ||
| + | |||
;CertificateVerify | ;CertificateVerify | ||
* Server signiert den bisherigen Handshake-Transcript | * Server signiert den bisherigen Handshake-Transcript | ||
| Zeile 73: | Zeile 95: | ||
* beweist die Kontrolle über den Private Key | * beweist die Kontrolle über den Private Key | ||
* schützt vor Man-in-the-Middle-Angriffen | * schützt vor Man-in-the-Middle-Angriffen | ||
| + | |||
;Finished | ;Finished | ||
* verschlüsselte Prüfsumme über den gesamten bisherigen Handshake | * verschlüsselte Prüfsumme über den gesamten bisherigen Handshake | ||
| Zeile 78: | Zeile 101: | ||
* bestätigt die Integrität aller vorherigen Handshake-Nachrichten | * bestätigt die Integrität aller vorherigen Handshake-Nachrichten | ||
* Abschluss der Server-Seite des TLS-1.3-Handshakes | * Abschluss der Server-Seite des TLS-1.3-Handshakes | ||
| + | |||
| + | |||
==Client prüft Server== | ==Client prüft Server== | ||
;Zertifikatsprüfung | ;Zertifikatsprüfung | ||
| Zeile 85: | Zeile 110: | ||
* Gültigkeitszeitraum und Zertifikatsattribute werden geprüft | * Gültigkeitszeitraum und Zertifikatsattribute werden geprüft | ||
* Ergebnis: der öffentliche Schlüssel des Servers ist vertrauenswürdig | * Ergebnis: der öffentliche Schlüssel des Servers ist vertrauenswürdig | ||
| + | |||
;CertificateVerify Prüfung | ;CertificateVerify Prüfung | ||
* Client verifiziert die CertificateVerify-Signatur | * Client verifiziert die CertificateVerify-Signatur | ||
| Zeile 91: | Zeile 117: | ||
* stellt sicher, dass der Server den zugehörigen Private Key besitzt | * stellt sicher, dass der Server den zugehörigen Private Key besitzt | ||
* Ergebnis: der Server kontrolliert den privaten Schlüssel zum Zertifikat | * Ergebnis: der Server kontrolliert den privaten Schlüssel zum Zertifikat | ||
| + | |||
| + | |||
==Client Finished== | ==Client Finished== | ||
;Finished | ;Finished | ||
| Zeile 98: | Zeile 126: | ||
* bestätigt die Integrität des gesamten Handshakes | * bestätigt die Integrität des gesamten Handshakes | ||
* signalisiert dem Server den erfolgreichen Abschluss | * signalisiert dem Server den erfolgreichen Abschluss | ||
| + | |||
| + | |||
| + | ==Application Traffic Keys== | ||
| + | ;Application Traffic Keys | ||
| + | * werden nach erfolgreichem Client Finished aktiviert | ||
| + | * werden aus den Application Traffic Secrets abgeleitet | ||
| + | * entsprechen dem umgangssprachlichen Sitzungsschlüssel | ||
| + | * existieren ausschließlich lokal auf Client und Server | ||
| + | |||
| + | |||
==TLS 1.3 Verbindung erfolgreich== | ==TLS 1.3 Verbindung erfolgreich== | ||
* 1-RTT-Handshake abgeschlossen | * 1-RTT-Handshake abgeschlossen | ||
| Zeile 103: | Zeile 141: | ||
* Application Traffic Keys sind aktiv | * Application Traffic Keys sind aktiv | ||
* geschützte Anwendungsdaten können übertragen werden | * geschützte Anwendungsdaten können übertragen werden | ||
| + | |||
{{#drawio:tls-1.3}} | {{#drawio:tls-1.3}} | ||
Version vom 22. Januar 2026, 17:10 Uhr
Client Hello
- Supported Versions
- gibt an, welche TLS-Versionen der Client unterstützt
- bei TLS 1.3 praktisch nur noch TLS 1.3
- keine klassische Versionsverhandlung mehr wie bei TLS 1.2
- Supported Groups
- Liste unterstützter (EC)DHE-Gruppen
- z. B. x25519, secp256r1
- Gruppen definieren alle kryptographischen Parameter fest
- keine Aushandlung von p oder g
- Key Share
- enthält den ephemeren DH/ECDH-Public-Key des Clients
- Private Key verbleibt ausschließlich beim Client
- Grundlage für die spätere Berechnung des Shared Secret
- ermöglicht den 1-RTT-Handshake
- Client Random
- 32 Byte Zufallswert
- fließt in die Schlüsselableitung ein
- erhöht die Entropie des Handshakes
- (weitere Extensions, z. B. SNI, ALPN)
- SNI: gibt den gewünschten Ziel-Hostnamen an
- ALPN: verhandelt das Anwendungsprotokoll (z. B. HTTP/2)
- Extensions sind funktional, nicht kryptographisch zwingend
- werden im ClientHello unverschlüsselt übertragen
Server Hello
- Selected Version
- Server bestätigt die zu verwendende TLS-Version
- in diesem Fall TLS 1.3
- keine weitere Versionsverhandlung mehr
- Key Share
- enthält den ephemeren DH/ECDH-Public-Key des Servers
- gleiche Gruppe wie vom Client ausgewählt
- ermöglicht beiden Seiten die Berechnung des Shared Secret
- Private Key verbleibt ausschließlich beim Server
- Server Random
- 32 Byte Zufallswert des Servers
- fließt in die Schlüsselableitung ein
- ergänzt den Client Random zur Entropieerzeugung
Handshake Secret
- Shared Secret
- wird nach Empfang des ServerHello lokal berechnet
- basiert auf ephemerem (EC)DH
- beide Seiten nutzen:
- eigenen Private Key
- fremden Public Key
- Ergebnis ist auf beiden Seiten identisch
- wird niemals übertragen
- Handshake Secret
- wird aus dem Shared Secret per HKDF abgeleitet
- stellt einen internen kryptographischen Zustand dar
- dient als Basis für die Handshake-Verschlüsselung
- Handshake Traffic Keys
- werden aus dem Handshake Secret abgeleitet
- werden niemals übertragen
- ab der nächsten TLS-Nachricht aktiv
- Verschlüsselung aktiv ab jetzt
- alle folgenden Handshake-Nachrichten sind verschlüsselt
- geschützt mit den Handshake Traffic Keys
Server Handshake Nachrichten (TLS 1.3)
- EncryptedExtensions
- erste verschlüsselte TLS-Nachricht des Servers
- wird mit den Handshake Traffic Keys verschlüsselt
- enthält die vom Server akzeptierten Extensions
- z. B. ALPN, weitere verbindungsrelevante Parameter
- enthält keine Zertifikate und keine Signaturen
- Certificate
- Übertragung der Server-Zertifikatskette
- vollständig verschlüsselt
- Zertifikat enthält:
- den öffentlichen Schlüssel des Servers
- Identitätsinformationen
- die Signatur der ausstellenden CA
- Client nutzt das Zertifikat zur Authentizitätsprüfung
- CertificateVerify
- Server signiert den bisherigen Handshake-Transcript
- Signatur erfolgt mit dem privaten Schlüssel des Servers
- der zugehörige öffentliche Schlüssel befindet sich im Zertifikat
- beweist die Kontrolle über den Private Key
- schützt vor Man-in-the-Middle-Angriffen
- Finished
- verschlüsselte Prüfsumme über den gesamten bisherigen Handshake
- berechnet mit dem Handshake Traffic Key
- bestätigt die Integrität aller vorherigen Handshake-Nachrichten
- Abschluss der Server-Seite des TLS-1.3-Handshakes
Client prüft Server
- Zertifikatsprüfung
- Client prüft die Server-Zertifikatskette
- Signatur der Zertifikate wird mit dem Public Key der CA verifiziert
- Vertrauenskette endet bei einer bekannten Root-CA
- Gültigkeitszeitraum und Zertifikatsattribute werden geprüft
- Ergebnis: der öffentliche Schlüssel des Servers ist vertrauenswürdig
- CertificateVerify Prüfung
- Client verifiziert die CertificateVerify-Signatur
- verwendet den öffentlichen Schlüssel aus dem Server-Zertifikat
- überprüft die Signatur über den bisherigen Handshake-Transcript
- stellt sicher, dass der Server den zugehörigen Private Key besitzt
- Ergebnis: der Server kontrolliert den privaten Schlüssel zum Zertifikat
Client Finished
- Finished
- Client berechnet die Finished-Prüfsumme
- basiert auf dem bisherigen Handshake-Transcript
- wird mit dem Handshake Traffic Key verschlüsselt
- bestätigt die Integrität des gesamten Handshakes
- signalisiert dem Server den erfolgreichen Abschluss
Application Traffic Keys
- Application Traffic Keys
- werden nach erfolgreichem Client Finished aktiviert
- werden aus den Application Traffic Secrets abgeleitet
- entsprechen dem umgangssprachlichen Sitzungsschlüssel
- existieren ausschließlich lokal auf Client und Server
TLS 1.3 Verbindung erfolgreich
- 1-RTT-Handshake abgeschlossen
- Client und Server haben sich gegenseitig authentifiziert
- Application Traffic Keys sind aktiv
- geschützte Anwendungsdaten können übertragen werden
