Bir web sayfasına “şifreni saklamıyoruz” yazmanın maliyeti, oraya başka herhangi bir cümle yazmakla tıpatıp aynıdır: sıfır. Bu bir cümledir, bir garanti değil. Doğruyu söyleyen de aynı cümleyi yazar, söylemeyen de; ekranın senin tarafından ikisi birbirinin aynısı görünür.
Şifreni “analiz etmek” için isteyen her sitenin asıl sorunu bu. Hizmet kusursuz olsa bile —temiz kod, iyi niyet, dürüst insanlar— bunu bilmenin bir yolu yok. Sunucu kapalı bir kutu. Sahip olduğun en hassas veriyi oraya yolluyorsun ve karşı tarafta sana söz verilen şeyin olduğuna güveniyorsun.
Ve genelde gözden kaçan bir ayrıntı var: saklamama sözü, söz vereni aşan şeylere karşı da koruma sağlamaz. Dürüst bir sunucunun kimsenin bakmadığı logları, araya girmiş bir proxy’si, otomatik bir yedeği, yeni işe başlamış bir çalışanı ya da sadece kötü bir günü olabilir. Şifre çoktan senin makinenden çıktı. Sonrasında olan biten senin erişiminin dışında; çoğu zaman onunkinin de.
Hiçbir şeye inanmayı gerektirmeyen tek cevap
Çözüm daha iyi söz vermek değil. Veriye ihtiyaç duymamak.
Şifren tarayıcıdan hiç çıkmıyorsa, “onunla ne yapıyorlar?” sorusu anlamını yitirir. Ortada bir “onlar” yok. Şifreyi alan bir sunucu, içinde göründüğü loglar, onu barındıran bir yedek, okuyabilecek bir çalışan yok. Güven daha iyi yönetilmiyor: denklemden çıkarılıyor.
password.es tam olarak bunu yapıyor. Şifre kontrol aracı yazdığın şeyi kendi tarayıcında, kendi işlemcinle analiz ediyor. Tuşladığın metin hiçbir yere gitmiyor; çünkü gidecek bir yer yok.
Rastgelelik nereden geliyor
Üretecin mantığı da aynı. Rastgele bir şifre için rastgelelik gerekir ve bunu elde etmenin iki yolu vardır: sunucudan istemek ya da tarayıcıdan istemek. Sunucudan istemek saçma olurdu: şifreyi senden önce sunucu bilirdi.
Bu yüzden tarayıcıdan istiyoruz, crypto.getRandomValues() ile. Bu, web
platformunun kriptografik rastgelelik için standart API’si —tam olarak bunun
için var; iskambil karıştırmaya yarayan ve gerçekten meraklı birine karşı
dayanması gereken hiçbir işe yaramayan Math.random()’ın aksine—. Rastgeleliği
üreten, senin makinendeki tarayıcının kendisi. Biz işin içinde değiliz: sonuç
senin ekranında beliriyor ve orada kalıyor.
Bana inanmadan nasıl kontrol edersin
Buraya kadar yazılan her şey, şimdilik, siteyi yapan insanların kaleme aldığı bir metin. Yani tam da güvenme dediğim şeyin ta kendisi. O yüzden bana inanma. Bak.
Tarayıcının geliştirici araçlarını aç —F12 ya da Mac’te Cmd+Option+I—, Ağ
(Network) sekmesine geç, açık bırak ve şifre kontrol aracına gir. Sayfanın
yüklendiğini göreceksin. Şimdi listeyi temizle, şifre alanına tıkla ve yaz.
Göreceğin şey şu; ve burada satış diline değil, kesinliğe ihtiyaç var:
- Alana tıkladığında bir istek tetikleniyor. Bu senin şifren değil —daha
hiçbir şey yazmadın—: analizi yapan kütüphane, yani
zxcvbn-tr.min.jsadında bir dosya. İçinde karşılaştırma yapılan kelime listeleri, isimler, klavye desenleri ve bilinen şifreler var. Alana dokunduğun anda password.es’ten iniyor ki sen yazarken hazır olsun. Aynı alan adından geliyor, statik bir dosya ve bu sayfayı açan herkes için aynı —sitenin dile göre farklı sürümleri var, bu sayfa Türkçe olanı yüklüyor—. - Ondan sonra ne yazarsan yaz, liste kıpırdamıyor. Bir harf, yirmi harf, sil, baştan başla, upuzun bir metin yapıştır. Sıfır istek. Sayaç yerinden oynamıyor. Sözlük artık senin tarayıcında ve arama senin makinenin belleğinde yapılıyor.
Bütün mesele bu ayrımda. İsteğin şifreni taşımadığına güvenmek değil mesele: ortada istek yok. Bir şeyi yorumlamana ya da kodu anlamana gerek yok; yükselmeyen bir sayaca bakmak yeterli.
Eksiğiyle birlikte tam envanter
Madem argüman “kendin kontrol et”, kontrol edince bulacağın şeyi saklamak tuhaf kaçardı. password.es’in dürüst envanteri:
Analitik yok. Ne Google Analytics, ne göze batmayan bir alternatif, ne bir piksel. Bir tane vardı, bütün sayfalardan kaldırıldı. Çerez yok. Site tek bir tane bile yazmıyor. Tarayıcında saklanan tek bir şey var: açık temayı mı koyu temayı mı tercih ettiğin — kendi cihazının yerel deposunda. Hiçbir yere gönderilmiyor ve aynı geliştirici araçlarından silebilirsin. Kayıt, hesap ve form yok: istesen bile veri bırakabileceğin bir yer yok.
Ve eksik, çünkü var: sayfa açılırken Google’ın sunucularından iki yazı tipi istiyor. Bu, sayısız sitede olduğu gibi, Google’ın senin IP’ne sahip birinin bu alan adından bir sayfa açtığını gördüğü anlamına geliyor. Ne yazdığını görmüyor —o istek daha önce oluyor ve bir daha tekrarlanmıyor— ama üçüncü bir tarafa giden bir istek, aynı Ağ sekmesinde onu göreceksin ve sana geliştirici araçlarını aç deyip bir yandan bundan hiç söz etmemenin hiçbir anlamı olmazdı. Düzeltilecekler listesinde.
Bunu neden anlatıyoruz
“Sıfır istek, tam gizlilik” yazıp arkamıza yaslanabilirdik. Kulağa daha hoş gelirdi ve ayrıntıda yalan olurdu: bir sözlük isteği var ve yazı tipleri var. Biri kontrol edince çöken bir argüman zaten argüman değildi: reklamdı.
Kesin olan sürüm daha az yuvarlak ama denetime dayanıyor: senin yazdığın şey tarayıcından çıkmıyor ve bu, zaten kurulu olan bir araçla otuz saniyede görülüyor.
Ve dikkat, çünkü bu sana genel bir ölçüt olarak geri dönüyor. Bir dahaki sefere herhangi bir site herhangi bir sebeple şifreni istediğinde, o sekmeyi aç ve tuşa bastığında bir istek beliriyor mu diye bak. Beliriyorsa şifren gitti. Gizlilik bildiriminin ne dediği, formdaki asma kilit simgesinin ne kadar şirin olduğu ya da şirketin ne kadar ciddi göründüğü hiç fark etmez. Ve site sana dönen bir çarkın ardından analizi bitmiş şifreyi gösteriyorsa, nereden geçtiğini artık biliyorsun.
Güvenlikte en az konuşulan kural şifrelerle ilgili değil: doğrulamayla ilgili. Güvenmek iyidir. Kontrol etmek daha iyidir ve burada bedava.
Kaynaklar: geliştirici araçlarıyla doğrulanabilir olan password.es’in kendi
mimarisi — şifre kontrol aracı, alana odaklanıldığında analiz kütüphanesini
listeleriyle birlikte (zxcvbn-tr.min.js) kendi alan adından indirir ve yazım
sırasında tek bir istek bile göndermez · crypto.getRandomValues(), kriptografik
rastgelelik için Web Crypto API’sinin standart API’si · sitenin kodunda analitik,
piksel veya çerez yoktur; yerelde saklanan tek veri tema tercihidir · yazı
tipleri Google Fonts üzerinden sunulur.