AEAD, verinin hem gizliliğini hem de bütünlüğünü tek bir şifreleme işleminde sağlayan yapıdır. Eski TLS sürümlerinde önce MAC hesaplanıp sonra şifreleme yapılırken, AEAD bu iki adımı birleştirir ve bu sayede padding oracle gibi saldırı sınıflarının önü kapanır.
AEAD nasıl çalışır?
Bir AEAD algoritması dört girdi alır: anahtar, nonce (her mesaj için benzersiz değer), düz metin ve isteğe bağlı "ek doğrulanan veri" (AAD). Çıktı, şifreli metin ile bir kimlik doğrulama etiketidir (tag). Alıcı etiketi doğrulayamazsa veriyi hiç çözmeden reddeder.
- Gizlilik: Şifreli metin anahtarsız okunamaz.
- Bütünlük ve kaynak doğrulama: Tek bir bitin değişmesi etiketi geçersiz kılar.
- AAD: Başlık gibi şifrelenmesi gerekmeyen ama değiştirilmemesi gereken alanları kapsar; TLS kayıt başlığı bu amaçla kullanılır.
TLS'te kullanılan AEAD şifreleri
TLS 1.3 yalnızca AEAD şifrelerine izin verir. Yaygın olanlar şunlardır:
- AES-128-GCM ve AES-256-GCM
- ChaCha20-Poly1305 (AES donanım desteği olmayan cihazlarda avantajlı)
- AES-CCM (daha çok gömülü/IoT ortamlarında)
TLS 1.2'de de ECDHE-RSA-AES128-GCM-SHA256 gibi GCM tabanlı paketler AEAD kullanır; CBC tabanlı paketler kullanmaz.
Sunucunuzun AEAD kullandığını doğrulama
openssl s_client -connect example.com:443 -tls1_3 < /dev/null 2>/dev/null | grep -i "cipher"
openssl ciphers -v 'AESGCM:CHACHA20' | head
Çıktıda TLS_AES_256_GCM_SHA384 veya TLS_CHACHA20_POLY1305_SHA256 görüyorsanız AEAD etkindir.
Dikkat edilecekler
- Aynı anahtarla nonce tekrarı AEAD güvenliğini ciddi biçimde zedeler; bunu TLS kütüphanesi yönetir, uygulama kodunda elle şifreleme yapıyorsanız nonce üretimine özen gösterin.
- Yapılandırmada CBC paketlerini kapatıp GCM/ChaCha20 paketlerini öne alın.
Sitenizin hangi paketleri sunduğunu SSL denetleme aracıyla görebilir, güncel TLS desteğiyle uyumlu SSL sertifikalarına göz atabilirsiniz. Özetle AEAD, modern TLS'in şifreleme katmanının zorunlu temelidir.