Farklı türde bir paket
RFC 8446'da tanımlanan TLS 1.3, bir şifre paketinin neyi adlandırdığını değiştirdi. TLS 1.2'de bir paket, anahtar değişimini, kimlik doğrulamayı, şifreyi ve MAC'i bir araya getiriyordu. TLS 1.3'te bir paket yalnızca iki şeyi adlandırır: şifresini ve anahtar türetme işlevinin kullandığı özet işlevini.
TLS_AES_128_GCM_SHA256
| |
| +-- handshake hash (HKDF): SHA-256
+------------- AEAD cipher: AES-128-GCM
Adda anahtar değişimi ve kimlik doğrulama yoktur, çünkü TLS 1.3 bunları ayrıca müzakere eder. En büyük değişiklik budur ve bu yüzden bir TLS 1.3 paketi, bir TLS 1.2 paketinin yanında bu kadar kısa görünür.
Anahtar değişimi nereye gitti
TLS 1.3'te anahtar değişimi kendi uzantısı key_share tarafından taşınır ve sunulan gruplar supported_groups içinde listelenir. Kimlik doğrulama signature_algorithms aracılığıyla müzakere edilir. Bunu paketten çıkarmanın gerçek bir avantajı vardır: bir avuç şifre paketi, herhangi bir desteklenen grup ve herhangi bir imza algoritmasıyla serbestçe birleşir, TLS 1.2'ye yüzlerce kayıtlı paket veren birleşimsel patlama yerine.
Ayrıca iki iyi varsayılanı içine işler. Her TLS 1.3 anahtar değişimi geçicidir, bu yüzden ileri gizlilik isteğe bağlı değil zorunludur. Ve ileri gizliliği kaybetmenin klasik yolu olan statik anahtar taşıması tamamen kaldırıldı, RSA yalnızca kimlik doğrulama için bir imza algoritması olarak hayatta kalır.
Beş paket
Temel belirtim beş paket tanımlar ve uygulamada çoğunlukla ilk üçünü görürsünüz:
0x1301 TLS_AES_128_GCM_SHA256 (mandatory to implement)
0x1302 TLS_AES_256_GCM_SHA384
0x1303 TLS_CHACHA20_POLY1305_SHA256
0x1304 TLS_AES_128_CCM_SHA256
0x1305 TLS_AES_128_CCM_8_SHA256
Beşi de AEAD'dir, TLS 1.3 başka bir şeye izin vermez. TLS_AES_128_GCM_SHA256 uygulanması zorunludur, bu da onu güvenli ortak payda yapar. ChaCha20-Poly1305, hızlandırması olmayan donanımda alışılmış seçimdir. İki paketi kısıtlı ortamlara yöneliktir ve CCM_8, daha kısa bir kimlik doğrulama etiketini daha az ek yükle takas eder, bu yüzden bir TLS 1.3 paketi olmasına rağmen onu önerilen olarak işaretlemez.
Aynı kayıt, değiştirilemez
TLS 1.3, önceki sürümlerle aynı IANA şifre paketi kaydını ve aynı iki baytlık kod alanını yeniden kullanır, ancak iki tanım değiştirilebilir değildir. Bir TLS 1.3 paket değeri TLS 1.2 ile kullanılamaz ve bir TLS 1.2 paket değeri TLS 1.3 ile kullanılamaz. Kod noktaları rastlantısal olarak aralığın daha önce kullanılmayan bir bölümünde (0x13xx) yer alır, bu da onları görsel olarak ayrı tutar.
Bu yüzden bir çözücü, bir paketin hangi dünyaya ait olduğunu bilmek zorundadır. 0x13xx aralığında WITH belirteci olmayan bir ad, anahtar değişimi başka yerde müzakere edilen bir TLS 1.3 paketidir, WITH belirteci olan bir ad ise anahtar değişimi açıkça yazılmış, TLS 1.2 ve öncesi için bir pakettir.
Sürüm düşürme koruması
Daha eski paketler daha eski karşı taraflar için hâlâ var olduğundan, TLS 1.3 bir saldırganın sürüm düşürmeyi zorlamasına karşı koruma ekler. TLS 1.3'ü destekleyen ama sonunda daha eski bir sürümü müzakere eden bir sunucu, server random değerinin son sekiz baytına sabit bir nöbetçi değer yazar. Gerçek bir TLS 1.3 istemcisi o nöbetçiyi denetler ve 1.3 olması gereken bir bağlantıda görünürse iptal eder, bu da sessiz bir sürüm düşürmeyi başarısız bir el sıkışmaya çevirir. Şifre paketi listesi küçüldü, ama etrafındaki protokol daha savunmacı hâle geldi.
Tüm bunları gerçek bir bağlantıda görmek için The Illustrated TLS 1.3 Connection gerçek bir TLS 1.3 el sıkışmasının her baytını kayıt kayıt ve alan alan açıklar.