TLS 1.3 od środka – jak naprawdę działa nowoczesne szyfrowanie HTTPS
TLS 1.3 (Transport Layer Security 1.3) to obecny standard zabezpieczania połączeń internetowych. Chroni komunikację HTTPS, API, usługi chmurowe, VPN oraz wiele innych protokołów.
Najważniejsze cele TLS 1.3:
- poufność (Confidentiality),
- integralność (Integrity),
- uwierzytelnienie (Authentication),
- Forward Secrecy,
- szybszy handshake.
Gdzie spotykamy TLS 1.3?
Praktycznie wszędzie:
HTTPS
HTTP/3
API REST
gRPC
SMTP STARTTLS
IMAPS
POP3S
MQTT
Schemat:
Browser
|
TLS 1.3
|
Web Server
Architektura TLS 1.3
Cały protokół można podzielić na kilka etapów:
ClientHello
|
v
ServerHello
|
v
Key Exchange (X25519)
|
v
HKDF
|
v
Handshake Encryption
|
v
Certificate Verification
|
v
Application Traffic Keys
|
v
Encrypted HTTPS
Jak wygląda cały handshake?
Client Server
ClientHello ---------------------------->
ServerHello
Certificate
CertificateVerify
Finished <-----------
Finished ------------------------------->
=========== Encrypted Application Data ============
Po zakończeniu handshake cała dalsza komunikacja jest już szyfrowana.
Krok 1 – ClientHello
Przeglądarka rozpoczyna połączenie.
Przykładowe informacje wysyłane do serwera:
Supported TLS Version
Cipher Suites
Supported Groups
Signature Algorithms
Random
Key Share (X25519)
Schemat:
ClientHello
TLS 1.3
AES-GCM
ChaCha20-Poly1305
X25519 Public Key
Najważniejsza zmiana względem TLS 1.2:
Klient od razu wysyła swój publiczny klucz X25519.
Supported Cipher Suites
TLS 1.3 znacznie uprościł listę szyfrów.
Najczęściej spotykane:
TLS_AES_128_GCM_SHA256
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
Nie znajdziemy już:
RC4
3DES
CBC Mode
MD5
SHA-1
Zostały całkowicie usunięte z TLS 1.3.
Krok 2 – ServerHello
Serwer odpowiada:
TLS Version
Selected Cipher
Random
X25519 Public Key
Schemat:
Client Server
Public Key A ------------->
Public Key B
<-------------
Obie strony mają już wszystko, czego potrzebują do wyliczenia wspólnego sekretu.
X25519 – wymiana klucza
Klient oblicza:
Private_A
+
Public_B
↓
Shared Secret
Serwer:
Private_B
+
Public_A
↓
Shared Secret
Obie strony uzyskują identyczny sekret.
Schemat:
Client Server
Private A Private B
Public A Public B
\ /
\ /
Shared Secret
To właśnie mechanizm ECDH oparty na X25519.
Forward Secrecy
Jedna z największych zalet TLS 1.3.
Każde połączenie używa nowych efemerycznych kluczy:
Session 1
Key A1
Session 2
Key A2
Session 3
Key A3
Jeżeli za kilka lat wycieknie certyfikat serwera:
Server Certificate
↓
Private Key Leak
wcześniejsze sesje nadal pozostaną bezpieczne, ponieważ korzystały z jednorazowych kluczy wymiany.
HKDF – tworzenie kluczy
Shared Secret nie służy bezpośrednio do szyfrowania.
Najpierw trafia do:
Shared Secret
↓
HKDF
↓
Traffic Secrets
Następnie powstają kolejne klucze.
Drzewo kluczy
TLS 1.3 tworzy wiele kluczy:
Shared Secret
|
HKDF
|
+-----+------+--------+
|
Handshake Secret
|
Application Secret
|
Traffic Keys
Każdy z nich ma inne zastosowanie.
Handshake Encryption
To ogromna zmiana względem TLS 1.2.
Po wygenerowaniu pierwszych kluczy:
Handshake Keys
↓
Encrypt Handshake
Oznacza to, że dalsze elementy handshake są już chronione.
Certyfikat
Serwer przesyła certyfikat.
Server
|
Certificate
|
Public Key
Klient sprawdza:
- podpis CA,
- datę ważności,
- nazwę domeny,
- łańcuch certyfikatów.
CertificateVerify
Serwer musi udowodnić, że naprawdę posiada odpowiadający certyfikatowi klucz prywatny.
Schemat:
Handshake Hash
↓
Server Private Key
↓
Digital Signature
Klient:
Signature
+
Server Public Key
↓
VALID
Najczęściej wykorzystywane są podpisy:
RSA-PSS
ECDSA
Ed25519 (jeżeli obsługiwane)
Finished
To ostatni etap handshake.
Obie strony wysyłają wiadomość:
Finished
która potwierdza:
- poprawność wymiany kluczy,
- integralność handshake,
- gotowość do szyfrowania danych aplikacyjnych.
Application Traffic Keys
Po zakończeniu handshake powstają właściwe klucze sesyjne.
Traffic Secret
↓
Application Keys
↓
HTTPS
Od tej chwili wszystkie dane są szyfrowane.

AES-GCM lub ChaCha20-Poly1305
TLS 1.3 używa wyłącznie nowoczesnych konstrukcji AEAD.
Najczęściej:
AES-128-GCM
AES-256-GCM
ChaCha20-Poly1305
Schemat:
Plaintext
↓
AEAD
↓
Ciphertext
+
Authentication Tag
Rekord TLS
Każda wiadomość wygląda uproszczono tak:
TLS Record
Header
Nonce
Ciphertext
Authentication Tag
Jeżeli tag jest błędny:
INVALID TAG
↓
Connection Error
Dane nie są odszyfrowywane.
Rekeying
Podczas długich połączeń TLS może odświeżać materiał kluczowy.
Traffic Secret 1
↓
Traffic Secret 2
↓
Traffic Secret 3
Zmniejsza to skutki ewentualnego wycieku pojedynczego klucza sesyjnego.
TLS 1.3 a HTTP/3
HTTP/3 wykorzystuje protokół QUIC, który ma TLS 1.3 wbudowany.
HTTP/3
↓
QUIC
↓
TLS 1.3
↓
UDP
Nie istnieje HTTP/3 bez TLS 1.3.
TLS 1.3 a PQC
Obecnie handshake wygląda zwykle tak:
X25519
↓
Shared Secret
↓
HKDF
↓
AES-GCM
W przyszłości może wyglądać następująco:
X25519
+
ML-KEM
↓
Hybrid Secret
↓
HKDF
↓
AES-256-GCM
Takie podejście pozwala zachować kompatybilność z obecnymi systemami, a jednocześnie przygotować się na zagrożenia związane z komputerami kwantowymi.
Pełny przepływ TLS 1.3
TLS 1.3
ClientHello
|
v
ServerHello
|
v
X25519 Key Exchange
|
v
Shared Secret
|
v
HKDF
|
v
Handshake Keys
|
v
Certificate
|
v
CertificateVerify
|
v
Finished
|
v
Application Traffic Keys
|
v
AES-GCM / ChaCha20-Poly1305
|
v
Encrypted HTTPS Traffic
Jak łączy się to z poprzednimi tematami?
MODERN CRYPTOGRAPHY
Identity
|
Ed25519 / ECDSA
|
Certificate Verify
|
v
TLS Handshake
|
X25519 (ECDH)
|
Shared Secret
|
HKDF
|
+--------------+--------------+
| |
AES-GCM ChaCha20-Poly1305
| |
+--------------+--------------+
|
HTTPS / HTTP3 / APIs
Najważniejsze elementy TLS 1.3
X25519
→ uzgadnia wspólny sekret
HKDF
→ wyprowadza bezpieczne klucze sesyjne
AES-GCM / ChaCha20-Poly1305
→ szyfrują i uwierzytelniają dane
Certificate + CertificateVerify
→ potwierdzają tożsamość serwera
Finished
→ kończy handshake i potwierdza jego integralność
TLS 1.3 jest obecnie jednym z najlepiej zaprojektowanych protokołów bezpieczeństwa. Łączy nowoczesną wymianę kluczy (X25519), silne funkcje wyprowadzania kluczy (HKDF), wydajne szyfrowanie AEAD (AES-GCM lub ChaCha20-Poly1305) oraz uwierzytelnianie certyfikatami, zapewniając szybkie, bezpieczne i odporne na wiele klas ataków połączenia internetowe.






