TLS Protokoll
Teil 1: Thematischer Überblick
Was ist TLS?
TLS (Transport Layer Security) ist ein Sicherheitsprotokoll, das zwischen Application Layer und Transport Layer arbeitet. Es kombiniert verschiedene kryptographische Verfahren, um drei zentrale Sicherheitsziele zu erreichen:
- Vertraulichkeit
- Niemand kann mitlesen
- Authentizität
- Es wird mit dem richtigen Partner kommuniziert
- Integrität
- Daten wurden nicht manipuliert
Architektur
TLS im Netzwerk-Stack
┌─────────────────────────┐
│ Application Layer │ HTTP, SMTP, etc.
└─────────────────────────┘
┌─────────────────────────┐
│ TLS Layer │ Sicherheitsschicht
└─────────────────────────┘
┌─────────────────────────┐
│ Transport Layer (TCP) │
└─────────────────────────┘TLS Nachrichtentypen
Handshake
- Verbindungsaufbau und Schlüsselaustausch
- Enthält: Zertifikate, ServerKeyExchange, ClientKeyExchange
- Wird am Ende signiert für Integrität
Alert
- Fehlermeldungen und Warnungen während der Verbindung
Change Cipher Spec (CCS)
- Signalisiert: “Ab jetzt läuft alles verschlüsselt”
Application Data
- Die eigentlichen Nutzdaten (z.B. HTTP-Requests)
Record Layer
Der Record Layer ist vergleichbar mit einem Briefumschlag:
- Nimmt verschiedene Nachrichtentypen entgegen
- Verpackt sie in standardisierte Records
- Verschlüsselt die Daten
- Versendet sie über TCP
╔═════════════════════════════════════════╗
║ Application Layer ║
║ HTTP ║
╚═════════════════════════════════════════╝
│
↓
╔═════════════════════════════════════════╗
║ TLS Layer ║
║ ┌──────────┬───────┬──────┬──────┐ ║
║ │Handshake │ Alert │ CCS │ App │ ║
║ └──────────┴───────┴──────┴──────┘ ║
║ ─────────────────────────────────────── ║
║ Record Layer ║
║ (Verpackung & Verschlüsselung) ║
╚═════════════════════════════════════════╝
│
↓
╔═════════════════════════════════════════╗
║ Transport Layer ║
║ TCP ║
╚═════════════════════════════════════════╝Authentifizierung
Zwei Arten der Server-Authentifizierung
Implizite Authentifizierung (RSA Key Exchange)
- Client verschlüsselt Pre-Master-Secret mit Server’s Public Key
- Nur der echte Server kann mit seinem Private Key entschlüsseln
- Wenn die Verbindung funktioniert → Server muss authentisch sein
- ⚠️ Veraltet, kein Perfect Forward Secrecy
Explizite Authentifizierung (ECDHE + RSA)
- Server signiert seine DH-Parameter mit seinem privaten RSA-Schlüssel
- Client verifiziert die Signatur mit dem Public Key aus dem Zertifikat
- Klare Trennung zwischen Verschlüsselung und Authentifizierung
- ✅ Modern, mit Perfect Forward Secrecy
Warum ECDHE alleine nicht reicht
Problem:
- ECDHE ermöglicht effizienten Schlüsselaustausch
- Aber: Jeder könnte DH-Parameter senden (Man-in-the-Middle!)
- Keine Garantie, dass die Parameter vom echten Server kommen
RSA Signatur schließt die Lücke:
- Server signiert seine ECDHE-Parameter mit privatem Schlüssel
- Nur der echte Zertifikatsinhaber kann diese Signatur erstellen
- Client verifiziert gegen vertrauenswürdiges Zertifikat
Ergebnis: Effizienter Schlüsselaustausch + vertrauenswürdige Identitätwürdiges Zertifikat
Authentizität garantiert
Client-Authentifizierung (optional)
Für sensible Anwendungen (Online-Banking, VPN):
- Server fordert Client-Zertifikat an
- Client sendet Zertifikat und signiert Handshake-Verlauf
- Beide Seiten sind authentifiziert
Verschlüsselung
Zwei-Phasen-Prinzip
Warum nicht durchgehend asymmetrisch?
- Asymmetrische Verschlüsselung (RSA, ECDHE) ist langsam
- Symmetrische Verschlüsselung (AES) ist schnell
Lösung:
- Phase 1 (Handshake): Asymmetrisch - sicherer Schlüsselaustausch
- Phase 2 (Daten): Symmetrisch - schnelle Verschlüsselung großer Datenmengen
Cipher Suites
Eine Cipher Suite ist das “Verschlüsselungspaket” für eine TLS-Verbindung.
Aufbau: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS - Protokoll
- ECDHE - Schlüsselaustausch (Ephemeral Diffie-Hellman)
- RSA - Authentifizierung (Server signiert)
- AES_256_GCM - Verschlüsselung (256-Bit AES im GCM-Modus)
- SHA384 - MAC-Algorithmus für Integrität
Betriebsmodi
CBC (Cipher Block Chaining) - Veraltet
- ❌ Anfällig für Padding Oracle Angriffe
- ❌ Separater MAC-Schritt nötig
GCM (Galois/Counter Mode) - Modern
- ✅ AEAD - kombiniert Verschlüsselung + MAC
- ✅ Schneller und sicherer
- ✅ Parallele Verarbeitung möglich
Integrität
HMAC (Hash-based Message Authentication Code)
HMAC stellt sicher, dass Daten nicht manipuliert wurden und vom echten Partner kommen.
Berechnung:
HMAC = Hash(Secret-Key + Nachricht + Sequence-Number)Ablauf:
- Sender berechnet HMAC über verschlüsselte Nachricht
- Sender sendet: Verschlüsselte Nachricht + HMAC
- Empfänger berechnet eigenen HMAC
- Vergleich: HMAC == HMAC’ ?
- ✅ Gleich → Integrität bestätigt
- ❌ Unterschiedlich → Manipulation erkannt
Schutz vor Replay-Angriffen
Das Problem:
- Angreifer zeichnet Nachricht auf (z.B. “Überweise 100€”)
- Sendet sie später erneut → zweite Überweisung!
Die Lösung: Sequence Numbers
- Client und Server zählen alle Records mit
- Sequence Numbers werden implizit geführt (nicht übertragen)
- Bei HMAC-Berechnung wird Sequence Number einbezogen
- Wiederholte Nachrichten haben falschen HMAC
Perfect Forward Secrecy (PFS)
Das Problem ohne PFS
Szenario mit RSA Key Exchange:
- Heute: Angreifer zeichnet verschlüsselten Traffic auf
- 2028: Server wird gehackt, Private Key gestohlen
- Resultat: Angreifer entschlüsselt alle aufgezeichneten Sessions
Warum?
- Pre-Master-Secret wurde mit Server’s Public Key verschlüsselt
- Mit gestohlenem Private Key: Pre-Master-Secret entschlüsselbar
- Daraus: Alle Session Keys ableitbar
- Gesamter Traffic wird nachträglich lesbar
Die Lösung: Ephemeral Keys
ECDHE (Ephemeral Diffie-Hellman):
- Für jede Session werden neue, temporäre DH-Schlüssel generiert
- Diese Schlüssel werden nach der Session verworfen
- Pre-Master-Secret wird niemals verschlüsselt übertragen
- Beide Seiten berechnen es unabhängig aus DH-Parametern
Nach Kompromittierung:
- ✅ Alte Sessions bleiben sicher (Schlüssel existieren nicht mehr)
- ❌ Zukünftige Sessions gefährdet (Angreifer kann sich als Server ausgeben)
Welche Verfahren bieten PFS?
| Verfahren | PFS | Empfehlung |
|---|---|---|
| ECDHE | ✅ Ja | Verwenden |
| DHE | ✅ Ja | Verwenden |
| RSA Key Exchange | ❌ Nein | Vermeiden |
| Static (EC)DH | ❌ Nein | Vermeiden |
Teil 2: Der TLS-Handshake
Überblick
Der Handshake läuft in zwei Phasen ab:
Phase 1: Handshake (unverschlüsselt)
- Verbindungsaufbau
- Authentifizierung
- Schlüsselaustausch
- Session Key Ableitung
Phase 2: Datenübertragung (verschlüsselt)
- Verschlüsselte Kommunikation mit AES
- Integritätsschutz mit HMAC
RSA Handshake (veraltet)
Ablauf
Client Server
| |
|------- ClientHello ---------------->|
| (Cipher Suites) |
| |
|<------ ServerHello ------------------|
| (Gewählte Cipher Suite) |
| |
|<------ Certificate ------------------|
| (Server's Public Key) |
| |
|<------ ServerHelloDone --------------|
| |
|------- ClientKeyExchange ----------->|
| (Encrypted Pre-Master-Secret) |
| |
|------- ChangeCipherSpec ------------>|
|------- Finished -------------------->|
| (Verschlüsselt) |
| |
|<------ ChangeCipherSpec -------------|
|<------ Finished ---------------------|
| (Verschlüsselt) |
| |
|====== Application Data =============>|
|<===== Application Data ==============|Detaillierter Ablauf
1. ClientHello
- Client sendet unterstützte TLS-Versionen
- Client sendet Liste unterstützter Cipher Suites
- Client sendet Zufallszahl (Client Random)
2. ServerHello
- Server wählt TLS-Version
- Server wählt Cipher Suite (z.B.
TLS_RSA_WITH_AES_128_CBC_SHA) - Server sendet Zufallszahl (Server Random)
3. Certificate
- Server sendet sein Zertifikat
- Enthält Server’s öffentlichen RSA-Schlüssel
- Client verifiziert Zertifikat gegen vertrauenswürdige CAs
4. ClientKeyExchange
- Client generiert Pre-Master-Secret (zufällige 48 Bytes)
- Client verschlüsselt Pre-Master-Secret mit Server’s Public Key
- Nur Server kann mit seinem Private Key entschlüsseln
- → Implizite Authentifizierung: Wenn’s funktioniert, ist der Server echt
5. Session Key Ableitung
- Beide Seiten berechnen:
Master-Secret = PRF(Pre-Master-Secret, Client Random, Server Random)- Aus Master-Secret werden abgeleitet:
- Client Encryption Key
- Server Encryption Key
- Client MAC Key
- Server MAC Key
6. ChangeCipherSpec + Finished
- Beide Seiten signalisieren: “Ab jetzt verschlüsselt”
- Finished-Nachricht ist verschlüsselt und authentifiziert
- Bestätigt, dass beide funktionsfähige Schlüssel haben
Nachteile des RSA Handshakes
❌ Kein Perfect Forward Secrecy
Pre-Master-Secret wird verschlüsselt übertragen
Bei späterer Kompromittierung: Alle Sessions entschlüsselbar
❌ Server nicht explizit authentifiziert
Nur implizit durch erfolgreiche Entschlüsselung
Keine separate Signatur
❌ Langsam
RSA-Operationen sind rechenintensiv
ECDHE Handshake (modern)
Ablauf
Client Server
| |
|------- ClientHello ---------------->|
| (Cipher Suites, Client Random)|
| |
|<------ ServerHello ------------------|
| (Cipher Suite, Server Random) |
| |
|<------ Certificate ------------------|
| (Server's RSA Public Key) |
| |
|<------ ServerKeyExchange ------------|
| (ECDHE Params + RSA Signature)|
| |
|<------ ServerHelloDone --------------|
| |
|------- ClientKeyExchange ----------->|
| (Client's ECDHE Params) |
| |
|------- ChangeCipherSpec ------------>|
|------- Finished -------------------->|
| |
|<------ ChangeCipherSpec -------------|
|<------ Finished ---------------------|
| |
|====== Application Data =============>|
|<===== Application Data ==============|Detaillierter Ablauf
1. ClientHello
- Client sendet unterstützte TLS-Versionen
- Client sendet Cipher Suites (z.B.
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) - Client sendet Client Random
2. ServerHello
- Server wählt ECDHE-basierte Cipher Suite
- Server sendet Server Random
3. Certificate
- Server sendet Zertifikat mit RSA Public Key
- Dieser Key wird nicht für Verschlüsselung genutzt
- Nur für Signatur zur Authentifizierung
4. ServerKeyExchange (der Unterschied!)
- Server generiert temporäre ECDH-Schlüsselpaar
- Server sendet:
- ECDHE Public Key (temporär)
- Elliptic Curve Parameter
- RSA-Signatur über diese Parameter
- Client verifiziert Signatur mit Server’s RSA Public Key
- → Explizite Authentifizierung: Server beweist Besitz des Private Keys
5. ClientKeyExchange
- Client generiert eigenes temporäres ECDH-Schlüsselpaar
- Client sendet eigenen ECDHE Public Key
- Keine Verschlüsselung des Pre-Master-Secrets!
6. Pre-Master-Secret Berechnung
- Beide Seiten berechnen unabhängig voneinander:
Pre-Master-Secret = ECDH(Client Private, Server Public)Pre-Master-Secret = ECDH(Server Private, Client Public)- Beide Ergebnisse sind identisch (Diffie-Hellman Magie!)
- Pre-Master-Secret wurde niemals übertragen
7. Session Key Ableitung
- Wie bei RSA: Ableitung aus Pre-Master-Secret + Randoms
- Client und Server haben separate Keys
- Temporäre ECDH-Keys werden verworfen
8. ChangeCipherSpec + Finished
- Verschlüsselte Bestätigung
- Handshake abgeschlossen
Vorteile des ECDHE Handshakes
✅ Perfect Forward Secrecy
Temporäre Keys pro Session
Alte Sessions bleiben sicher bei Kompromittierung
✅ Explizite Authentifizierung
Server signiert DH-Parameter
Klare Trennung: Verschlüsselung vs. Authentifizierung
✅ Effizienter
Elliptic Curves sind schneller als RSA
Kleinere Schlüssel bei gleicher Sicherheit
Vergleich: RSA vs. ECDHE
| Aspekt | RSA Key Exchange | ECDHE |
|---|---|---|
| Schlüsselaustausch | Pre-Master-Secret verschlüsselt übertragen | Pre-Master-Secret gemeinsam berechnet |
| Authentifizierung | Implizit (durch Entschlüsselung) | Explizit (durch Signatur) |
| Perfect Forward Secrecy | ❌ Nein | ✅ Ja |
| Geschwindigkeit | Langsamer (RSA-Operationen) | Schneller (EC-Operationen) |
| Schlüsselpersistenz | Statischer Server-Schlüssel | Temporäre Session-Schlüssel |
| Kompromittierung | Alle Sessions entschlüsselbar | Nur zukünftige Sessions gefährdet |
| Status | ⚠️ Veraltet | ✅ Modern, empfohlen |
Phase 2: Verschlüsselte Datenübertragung
Nach erfolgreichem Handshake:
1. Verschlüsselung
- Daten werden mit AES verschlüsselt
- Symmetrischer Schlüssel aus Session Keys
2. HMAC Berechnung
HMAC = Hash(MAC-Key + Encrypted-Data + Sequence-Number)3. Versand
- Record Layer verpackt: Encrypted Data + HMAC
- Versand über TCP
4. Empfang
- HMAC-Prüfung → Integrität verifiziert
- Entschlüsselung → Daten lesbar
Praktische Sicherheitstipps
Protokollversion
Verwenden:
- TLS 1.3 (schnellster Handshake, nur sichere Cipher Suites)
- TLS 1.2 (weit verbreitet, solide)
Vermeiden:
- SSLv2, SSLv3 - POODLE, DROWN Schwachstellen
- TLS 1.0, TLS 1.1 - Deprecated
Cipher Suite Empfehlungen
Moderne Konfiguration:
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256Kriterien:
- Schlüsselaustausch: ECDHE (für PFS)
- Verschlüsselung: AES-GCM oder ChaCha20 (AEAD)
- Minimum: 128-Bit Verschlüsselung
- MAC: SHA256 oder höher
Nicht verwenden:
TLS_RSA_WITH_AES_128_CBC_SHA- Kein PFS, CBC anfällig, schwacher MAC
Zertifikatsverwaltung
- Regelmäßige Erneuerung (jährlich)
- Starke Private Keys (RSA 2048-Bit oder ECDSA 256-Bit)
- Vertrauenswürdige Certificate Authorities
- Certificate Transparency überwachen
Zusammenfassung
TLS schützt durch drei Kernmechanismen:
- Verschlüsselung - AES für Vertraulichkeit
- Authentifizierung - Zertifikate + Signaturen für Identität
- Integrität - HMAC + Sequence Numbers gegen Manipulation
Best Practice:
- Immer ECDHE-basierte Cipher Suites
- GCM-Modus für AEAD
- TLS 1.2 oder 1.3
- Regelmäßige Zertifikatserneuerung