Sil dediğinde gerçekten siliniyor mu? Yedekler ne olacak?
Bir satırı silmek kolay. Zor olan, o satırın altı aylık yedeklerde, çoğaltma günlüklerinde ve arşivlerde bıraktığı kopyalar. Anahtarı yok etmek, veriyi kovalamaktan daha kesin bir cevap.
This post is in Turkish.
Kullanıcı "hesabımı sil" dediğinde ne oluyor?
Naif cevap: satırları siliyoruz. Ama bir kaydı üretimde silmek, o kaydın var olduğu tek yeri temizlemek anlamına gelmiyor. Kopyası gecelik yedekte duruyor. Kopyası çoğaltma günlüğünde duruyor. Kopyası bir arşiv anlık görüntüsünde duruyor. Belki kopyası bir arama indeksinde de duruyor.
Sperare gibi bir üründe bu soru akademik değil. İnsanların pasaportunu, banka dökümünü, göçmenlik dosyasını taşıyorsun ve silme talebi gerçek bir yükümlülük.
Yedekleri kovalamak neden çalışmıyor
İlk akla gelen çözüm, silme talebini bütün kopyalara yaymak. Yedekleri açıp o kaydı çıkarmak, indeksleri temizlemek, günlükleri budamak.
Bu birkaç sebeple işlemiyor. Yedek genellikle değişmez olarak tasarlanıyor — zaten güvenilir olmasının sebebi bu. Değiştirilebilir bir yedek, kurtarma anında güvenemeyeceğin bir yedek. Ayrıca yedekten seçici veri çıkarmak, her silme talebinde geçmişe dönük bir operasyon yürütmek demek; ölçeklenmiyor ve hata yapmaya çok açık.
Bir de şu var: yaptığını kanıtlayamıyorsun. "Bütün kopyalardan sildik" iddiasını doğrulamanın pratik bir yolu yok.
Anahtar yoksa veri yok
Kripto-parçalama farklı bir yerden yaklaşıyor. Veriyi kovalamak yerine, veriyi okunabilir kılan anahtarı yok ediyorsun.
Kurgu şöyle: her kullanıcının hassas verisi, o kullanıcıya özel bir anahtarla şifreli duruyor. Anahtar veriyle aynı yerde değil, ayrı bir kasada. Silme talebi geldiğinde satırları da siliyorsun ama asıl işlem anahtarın yok edilmesi.
O andan itibaren yedekte duran kopya bir bayt yığını. Çoğaltma günlüğündeki kopya bir bayt yığını. Arşivdeki kopya da öyle. Hiçbirini kovalamana gerek kalmıyor, çünkü hiçbiri okunabilir değil.
Silmenin kanıtı, verinin bulunamaması değil. Onu açacak anahtarın var olmaması.
Bu her problemi çözmüyor
Dürüst olmak için sınırlarını da söyleyeyim.
Anahtar yönetimi tek hata noktası. Anahtarları kaybedersen, silmek istemediğin veriyi de kaybediyorsun. Yani kasanın kendisi, veritabanından daha dikkatli işletilmesi gereken bir sistem.
Her şey şifrelenemiyor. Bir alanı sorgulamak, sıralamak veya üzerinde birleştirme yapmak istiyorsan, o alan okunabilir olmak zorunda. Yani şifrelenen şey hassas içerik oluyor; ilişkiler ve kimlikler açık kalıyor.
Meta veri kalıyor. Kullanıcının mesaj içeriği okunamıyor ama o kullanıcının var olduğu, ne zaman kaydolduğu, kiminle konuştuğu bilgisi ilişkisel tarafta durabiliyor. Bunu da silmek istiyorsan ayrı bir iş.
Bugünün şifresi yarının şifresi değil. Bu, kripto-çeviklik yazısında konuştuğumuz şeyle birleşiyor: yok edilen anahtar bugünün algoritmasıyla korunuyorsa, o algoritmanın ömrü silmenin de ömrü.
Silmek ile anonimleştirmek
Son bir ayrım. Her veri silinemiyor — bazıları yasal olarak saklanmak zorunda. Bir ödeme kaydı, bir fatura, bir denetim izi.
Burada doğru hamle silmek değil, kimliği koparmak. İşlem kaydı duruyor ama artık bir kişiye bağlanamıyor. Kripto-parçalama bunu doğal olarak sağlıyor: kişisel alanlar okunamaz hâle gelirken, tutarlar ve tarihler ilişkisel tarafta kalıyor.
Yani mimari kararın kendisi, "neyi silmeliyim, neyi saklamalıyım" sorusunu iki farklı depoya ayırmaya zorluyor. Bu ayrımı silme talebi geldiğinde değil, şemayı yazarken yapman gerekiyor — sonradan eklemek, bütün geçmiş veriyi yeniden şifrelemek demek.