İstemci tarafı şifreleme nedir? Tarayıcınız işi yapar
İstemci tarafı şifreleme, dosyalarınızın yüklemeden önce tarayıcınızda şifrelenmesi demektir. Maksimum gizlilik ve kontrol.
İstemci tarafı şifreleme, tarayıcınızın veya uygulamanızın ağa herhangi bir şey değmeden dosyaları cihazınızda şifrelediği anlamına gelir. Sunucu yalnızca şifreli metin alır; rastgele gürültüden ayırt edilemeyen AES-256-GCM çıktısı ve şifre çözme anahtarı hiçbir zaman istemciyi terk etmez. Bu, sağlayıcının anahtarları elinde bulundurduğu ve teknik olarak dosyalarınızı okuyabildiği sunucu tarafı şifrelemenin tam tersidir. Web Crypto API (window.crypto.subtle) bunu eklenti gerektirmeksizin herhangi bir modern tarayıcıda mümkün kılar; AES-NI donanımında yaklaşık 2-3 GB/sn hızla çalışır. HexaTransfer, SwissTransfer, Tresorit Send ve Proton Drive, hizmetin kendisi tehlikeye girse bile dosyaların gizli kalmasını garanti etmek için bu modeli kullanır.
Kriptografik motor olarak tarayıcıya geçiş
Beş yıl önce gerçek şifreleme, bir masaüstü uygulaması kurmayı ya da komut satırında PGP kullanmayı gerektiriyordu. W3C tarafından 2017'de standartlaştırılan Web Crypto API bunu değiştirdi. Chrome, Firefox, Safari ve Edge dahil tüm ana akım tarayıcılarda çalışan JavaScript'e doğrudan AES-GCM, RSA-OAEP, ECDH, HMAC, PBKDF2 ve SHA-256 sunar.
Performans artık engel değil. Intel AES-NI talimatları, AES-256-GCM için çekirdek başına 3-5 GB/sn ulaşır. Apple M serisi ve Qualcomm Snapdragon çiplerindeki ARM Şifreleme Uzantıları benzer verim sağlar. 1 GB'lık bir dosyayı tarayıcıda şifrelemek orta düzey bir dizüstü bilgisayarda yaklaşık 300-500 ms alır.
Geri kalan zorluk, tarayıcı belleğinden büyük dosyaları işlemektir. Streams API ve ReadableStream, kodun dosyaları 4 MB'lık parçalar halinde işlemesine, her parçayı benzersiz sayaç modu IV ile bağımsız olarak şifrelemesine olanak tanır. Hizmetler bu sayede sınırı 10 GB veya daha yüksek bir noktaya taşır.
Minimal bir istemci tarafı şifreleme akışı
Tipik bir tarayıcı tabanlı hizmetin çalıştırdığı sıra:
// 1. Rastgele 256 bitlik AES anahtarı oluştur
const key = await crypto.subtle.generateKey(
{ name: "AES-GCM", length: 256 }, true, ["encrypt", "decrypt"]
);
// 2. Dosyayı parçalar halinde oku
const file = fileInput.files[0];
const chunkSize = 4 * 1024 * 1024;
// 3. Her parçayı benzersiz 12 baytlık IV ile şifrele
for (let offset = 0; offset < file.size; offset += chunkSize) {
const chunk = file.slice(offset, offset + chunkSize);
const iv = crypto.getRandomValues(new Uint8Array(12));
const ciphertext = await crypto.subtle.encrypt(
{ name: "AES-GCM", iv }, key, await chunk.arrayBuffer()
);
// 4. [iv || şifreli metin] sunucuya yükle
}
// 5. Anahtarı dışa aktar ve paylaşım URL'si parçasına göm
const keyBytes = await crypto.subtle.exportKey("raw", key);
const shareUrl = `https://example.com/d/${fileId}#k=${base64url(keyBytes)}`;
Sunucu rastgele görünen baytları, bir dosya kimliğini ve başka hiçbir şeyi görmez. Anahtar yalnızca kullanıcının tarayıcı belleğinde ve URL parçasında bulunur.
Bu, sunucu tarafı şifrelemeyi neden geride bırakır
Sunucu tarafı şifreleme, küçük resim oluşturmak, virüs taraması yapmak, arama sorgularını işlemek veya yasal taleplere yanıt vermek için sağlayıcının talep üzerine şifre çözdüğü anlamına gelir. 2023'te Apple'ın açıkladığına göre, Gelişmiş Veri Koruması başlayıncaya kadar iCloud yedekleri şifreli değildi; dolayısıyla Apple ve geçerli talepler kapsamında ABD kolluk kuvvetleri tarafından erişilebilirdi.
İstemci tarafı bunu tersine çevirir. Anahtar sağlayıcıya hiç ulaşmadığı için:
- Hileli çalışanlar hiçbir şey göremez. Veritabanı erişimi olan mühendis şifreli metin alır.
- Mahkeme celpleri şifreli metin üretir. Sağlayıcı, anahtarsız işe yaramayan şifreli blob'u teslim ederek arama kararlarına uyabilir.
- İhlaller şifreli metni sızdırır. 2021 LastPass olayı bunun önemini gösterdi; çalınan kasalar şifreli olduğundan yalnızca zayıf ana parolası olan kullanıcılar gerçek riskle karşılaştı.
- Sağlayıcı kesintileri veriyi tehlikeye atmaz. Şirket kapansa bile anahtarın yerel kopyası (URL) dosyanın şifresini çözer.
Sunucunun hâlâ görebildikleri
İstemci tarafı şifreleme dosya içeriklerini korur ama her şeyi değil. Sunucu genellikle şunları gözlemler:
- Dosya boyutu — şifreli metin uzunluğu düz metin uzunluğuna yakındır (AES-GCM, şifreleme başına 16 bayt ek yük artı 12 baytlık IV ekler).
- Yükleme ve indirme IP adresleri ve zaman damgaları.
- TLS el sıkışmalarından oturum meta verisi, istemcinin TLS parmak izi dahil.
- Şifreli dosya adları — dosya adları şifreli yüke dahil edilmezse sızabilir.
İyi istemci tarafı hizmetler, dosya adlarını şifreli metin başlığının bir parçası olarak şifreler ve boyutu gizlemek için kova boyutlarına (1 MB, 10 MB, 100 MB) doldurma yapar. Tresorit ve Proton Drive, meta veri ifşasını açıkça belgeler.
Parola korumalı istemci tarafı şifreleme
Birçok hizmet, kullanıcıların URL parçasının üzerine parola eklemesine izin verir. Akış:
- Tarayıcı rastgele 128 bitlik tuz oluşturur ve 600.000 iterasyonlu PBKDF2-HMAC-SHA-256 ile (OWASP 2023 önerisi) veya
bellek=64 MB, iterasyon=3parametreleriyle Argon2id ile anahtar türetir. - Dosya türetilen anahtarla şifrelenir.
- Tuz URL parçasına gider; parola bant dışı iletilir.
- Alıcı parolayı yazar, yerel olarak anahtarı yeniden türetir.
Bu, tek kanallı paylaşımı (URL yeterli) iki faktörlüye dönüştürür: saldırganın hem linke hem de parolaya ihtiyacı vardır. 600.000 iterasyonlu PBKDF2, modern GPU'da tahmin başına yaklaşık 10 saniye maliyeti yaratır; bu nedenle kararlı saldırganlara direnmek için parolaların 40+ bit entropi içermesi gerekir; yani geniş bir alfabeden 10+ karakter düşünün.
Güven kayması: hizmetten istemci koduna
İstemci tarafı şifreleme, güven sınırını değiştirir. Daha önce hizmetin düz metninizi iyi yönetmesine güveniyordunuz. Şimdi ise hizmetin her sayfa yüklemesinde tarayıcınıza gönderdiği JavaScript'e güveniyorsunuz. Kötü amaçlı bir güncelleme, şifreleme öncesinde veya sırasında anahtarı dışarıya sızdırabilir.
Üç azaltma mekanizması mevcuttur; titizlik dereceleri farklılık gösterir:
- Script etiketleri için Subresource Integrity (SRI), JS karmasının bilinen bir değerle eşleşmesini sağlar.
- Cure53, NCC Group veya Trail of Bits gibi firmalar tarafından yapılan Kod denetimleri, şifreleme mantığının sağlam olduğunu doğrular.
- Tekrarlanabilir derlemeler, bağımsız tarafların gönderilen kodun yayımlanan kaynak kodla eşleştiğini doğrulamasına olanak tanır.
- İçerik Güvenlik Politikası (CSP) başlıkları, şifrelemeyle oynayabilecek üçüncü taraf komut dosyalarını engeller.
Proton Mail'in pmcrypto ve bazı Electron tabanlı istemcilerin kullandığı en katı yaklaşım, her ziyaret için yeni JavaScript yerine imzalı ikili dosyalar gönderir. Tarayıcı tabanlı hizmetler bu titizliğin bir kısmını sıfır kurulum kolaylığı için feda eder.
İstemci tarafının öne çıktığı kullanım senaryoları
Biraz daha yavaş ilk yüklemeye değdiği bazı senaryolar:
- Hukuki ve tıbbi belgeler. HIPAA 45 CFR § 164.312 ve avukat-müvekkil gizliliği, sağlayıcıdan bağımsız mimarilerden büyük ölçüde yararlanır. KVKK kapsamında kişisel sağlık verilerinin aktarımında da istemci tarafı şifreleme önerilir.
- Gazetecilik ve kaynak koruma. Meta veri ifşasının dahi risk taşıdığı redaksiyonsuz belge gönderimi.
- Kurumsal fikri mülkiyet. Yönetim kurulu belgeleri, finansal modeller, şirket birleşme ve satın alma materyalleri; dosya aktarım sağlayıcısındaki içeriden tehditlerin gerçekçi bir endişe olduğu durumlar.
- Kişisel kayıtlar. Vergi belgeleri, pasaportlar, tıbbi testler; sağlayıcı ihlali başlığında görünmekten rahatsız olacağınız dosyalar.
Düşük hassasiyetli dosyalar (toplantı fotoğrafı, tarif) için geleneksel sunucu tarafı şifreleme yeterlidir.
Gerçek istemci tarafı şifrelemeyi tanımak
Bir hizmetin gerçekten istemci tarafı şifreleme yaptığının dört işareti:
- URL parçaları anahtar taşır. Paylaşım URL'si
#işaretinden sonra base64 kodlu rastgele baytlar gibi görünen metin içerir. - Yüklemeler şifreli metindir. Yükleme sırasında DevTools → Network sekmesini açın; istek gövdesi dosya adınızı değil rastgele baytlar gibi görünmelidir.
- Büyük dosyalar hızla çalışır. Gerçek bir istemci tarafı akışı parçaları aktarır; sunucu tarafı şifreleme ağ geçidine yeniden yüklemez.
- Gizlilik politikası "dosyalarınızın şifresini çözemeyiz" der. Yalnızca pazarlama metni değil, teknik bir teknik belgeyle desteklenmiş olarak.
Sınavı geçen hizmetler: SwissTransfer'ın E2EE katmanı, Tresorit Send, Proton Drive paylaşım linkleri, Mega.nz ve HexaTransfer. Geçemeyenler: WeTransfer (standart), Google Drive, Dropbox paylaşım linkleri.
Pratiğe dökmek
İstemci tarafı şifrelemeyi bugün denemek istiyorsanız bir dosya yüklerken DevTools'u açın ve Network sekmesini izleyin. Sunucuya giden şifreli bir blob ve hiçbir istekte görünmeyen bir URL çubuğundaki anahtar görmelisiniz. İşin bütün vaadi bu kadardır.
hexatransfer.com'da deneyin — ücretsiz, hesap gerekmez, 10 GB'a kadar.
Uçtan uca şifreleme ile büyük dosyaları güvenle gönderin
Uçtan uca şifreleme ile 10 GB'a kadar dosya ücretsiz aktarın. Hesap gerekmez. Dosyalarınız yüklenmeden önce tarayıcınızda şifrelenir — başka kimse okuyamaz.
Dosya gönder