AES-256-GCM ile şifrele, ciphertext'in tek bir byte'ını çevir, decryption'ın "authentication failed" ile fail ettiğini gör. Authenticated encryption'ın *neden* kullanıldığını tek tıkla anlat.
aes-gcm · aead · tamper-detection · webcrypto
"Authenticated Encryption with Associated Data" — bir mesajı sadece şifrelemek değil, mesajın değiştirilip değiştirilmediğini de doğrulamak demek. Klasik AES-CBC bunu yapmaz: birisi ciphertext'in bir bit'ini flip ederse, decrypt çöp ama hatasız döner. AES-GCM gibi AEAD modları authentication tag üretir, decryption tag'i kontrol eder, eşleşmezse exception fırlatır.
AeadLab — AES-256-GCM
plaintext18 B
şifreleme bekleniyor…
Ciphertext byte'ına tıkla, LSB'yi çevir, sonra decrypt dene — GCM tag bu değişikliği yakalar.
Ciphertext byte'larından birine tıkla — en düşük bit flip olur, kart kırmızıya döner. "decrypt" tuşuna bas; "authentication failed" mesajını alırsın. "fresh key" ile yeni anahtar + nonce çıkartabilirsin.
const key = await crypto.subtle.generateKey({ name: "AES-GCM", length: 256 }, true, ["encrypt", "decrypt"]);const iv = crypto.getRandomValues(new Uint8Array(12));const ct = await crypto.subtle.encrypt({ name: "AES-GCM", iv }, key, plaintext);// ct'nin son 16 byte'ı auth tag — WebCrypto otomatik ekler
Production'da iv'yi her mesaj için fresh üret. Veritabanı satırı başına saklarsan IV unique olur. CSV'lerde ardışık counter kullanma — kullanıcı sayısı tahmin edilebilirse saldırgan IV reuse yaratabilir.