· kaynak dev.to (home feed)
AES-CBC modern web uygulamalarında neden başarısız oluyor ve AES-GCM bunu kimlik doğrulamalı şifrelemeyle nasıl çözüyor
Bir dev.to rehberi, AES-CBC'nin padding oracle'ları ve bit-flipping saldırılarının web payload'larını nasıl riske attığını ve Web Crypto üzerinden AES-GCM'nin neden daha güvenli bir varsayılan olduğunu anlatıyor.

dev.com'un rakibi dev.to'da yayımlanan teknik rehber, web kod tabanlarında hâlâ yaygın olan kriptografik hatalardan birini ele alıyor: saldırganın şifreli metne müdahale edebildiği durumlarda AES'i Cipher Block Chaining (CBC) modunda kullanmak. Yazıya göre 256 bitlik bir anahtar, çalışma modu bütünlük koruması sunmadığında pek bir şey ifade etmiyor; rehber hem saldırı mekaniklerini hem de AES-GCM alternatifini ortaya koyuyor.
CBC modu gerçekte ne yapar
AES, NIST FIPS 197 ile standartlaştırılmış, 128, 192 veya 256 bitlik bir anahtar kullanarak sabit 16 baytlık blokları şifreleyen bir blok şifredir. Gerçek payload'lar nadiren tam 16 baytın katı olduğu için bir çalışma modunun bu boşluğu doldurması gerekir. CBC modunda her düz metin bloğu, şifrelenmeden önce bir önceki şifreli metin bloğuyla XOR'lanır ve mesajın son bloğunu doldurmak için—neredeyse her zaman—PKCS#7 ile padding uygulanır. Rehberdeki karşılaştırma tablosu ödünleşimi özetliyor: CBC yalnızca gizlilik sağlar, şifre çözme paralel değil sıralı yapılır ve padding oracle ile bit-flipping içeren iyi belgelenmiş bir güvenlik açığı profili taşır.
Padding oracle saldırısı
dev.to yazısının inceldiği ilk başarısızlık modu, POODLE'ın arkasındaki ve ilk olarak Vaudenay tarafından tanımlanan saldırı sınıfı olan padding oracle'dır. Bir sunucu CBC modundaki bir mesajın şifresini çözerken, PKCS#7 padding'inin düzgün biçimlenip biçimlenmediğini kontrol etmek için sondaki baytlara bakar. Geçersiz padding bir hata üretir (örneğin HTTP 400 veya 500), buna karşılık geçerli padding ve ardından gelen anlamsız içerik HTTP 401 gibi uygulama düzeyinde bir hata üretir. Gözlemlenebilir bu fark oracle'dır. Rehbere göre şifreli bir cookie veya session token'ı yakalayan bir saldırgan, önceki bir şifreli metin bloğundaki tek tek baytları değiştirebilir, 256 olası değerin tamamını deneyebilir ve sunucunun farklı yanıtlarını kullanarak düz metni gizli anahtarı hiç elde etmeden birer bayt olarak kurtarabilir.
Anahtar olmadan bit-flipping
İkinci başarısızlık modu daha basittir. CBC şifre çözme her şifreli metin bloğunu bir önceki blokla XOR'ladığından, C(i-1) şifreli metin bloğundaki bir biti çevirmek, çözülen P(i) düz metin bloğundaki karşılık gelen biti de çevirir. Komşu düz metin bloğu gürültüye dönüşür, ancak hedeflenen blok öngörülebilir biçimde değişir. Rehberdeki örnek: bir bloğun "role=user;" içerdiğini bilen bir saldırgan, önceki şifreli metin bloğunda özenle seçilmiş bit çevirmeleriyle çözülen çıktıyı "role=root;" olarak yeniden yazabilir. Tek başına gizlilik, şifreli metni okumak yerine değiştirmeyi tercih eden bir saldırgana karşı hiçbir şey yapmaz.
AES-GCM bunu nasıl farklı yapar
AES-GCM, Counter Mode şifrelemesini GF(2^128) Galois cisimi üzerinde polinomsal bir hash olan GHASH ile eşleştirerek tek bir primitive içinde associated data içeren kimlik doğrulamalı şifreleme (AEAD) üretir. Şifreleme bir stream cipher gibi çalışır: 96 bitlik bir IV ya da nonce, 32 bitlik bir sayaçla birleştirilerek keystream blokları üretilir ve bunlar düz metinle XOR'lanır. Hiç padding eklenmez ve son blok tam mesaj uzunluğuna göre kırpılır. Paralel olarak, sıfırlardan oluşan bir blok şifrelenerek bir hash alt anahtarı türetilir ve GHASH, şifreli metin üzerinde—şifrelenmemiş başlıklar veya yönlendirme metaverisi gibi herhangi bir associated data ile birlikte—değerlendirilir; sonuç daha sonra 128 bitlik bir kimlik doğrulama etiketine dönüştürülür. Etiket, kurcalama denetimidir: rehber bunu, şifreli metindeki veya associated data'daki tek bir değiştirilmiş biti bile yakalayan mekanizma olarak çerçeveler.
Tuzak: nonce yeniden kullanımı
GCM'nin garantileri IV yeniden kullanıldığında çöker. Yazıdaki karşılaştırma tablosu sonucu açıkça ortaya koyuyor—IV yeniden kullanımı hem anahtar gizliliğini hem de kimlik doğrulamayı bozar—bu yüzden rehber nonce çakışmalarını bir uygulama detayı değil kritik bir tuzak olarak ele alıyor.
Neden önemli
dev.to rehberi, TLS 1.3, NIST SP 800-38D ve Web Cryptography Working Group'u CBC'nin sistematik olarak terk edildiğinin kanıtı olarak gösteriyor; ancak bu mod hâlâ eski üretim sistemlerinde ve kopyala-yapıştır tutorial'larda görünüyor ve çoğu zaman tarayıcıdaki session token'ları, OPFS veya IndexedDB depolamasını ve REST API payload'larını koruyor. Geliştiriciler için pratik çıkarım, mod seçiminin anahtar uzunluğu kadar önemli olduğudur; standart Web Crypto API ise daha güvenli yolu sıfır bağımlılıklı hale getiriyor: her mesaj için benzersiz bir nonce ile AES-GCM kullanın, associated data'yı doğrulayın ve kimliği doğrulanmamış her şifreli metni güvenilmeyen girdi olarak değerlendirin.
- #cryptography
- #aes-gcm
- #aes-cbc
- #web-crypto
- #security
- #web-development