İçeriğe atla
HexaTransfer
Bloga dön
Sifreleme ve guvenlik

Dosya aktarımı için mobil şifreleme: hareket halinde güvenli paylaşım

Mobil aktarımların uçtan uca şifreli olmasını sağlayın. iOS ve Android'de tarayıcı şifrelemenin nasıl çalıştığını öğrenin.

Mobil dosya şifreleme, iOS'ta Safari ve Android'de Chrome/Firefox üzerinden Web Crypto API — masaüstünde de çalışan crypto.subtle.encrypt çağrısıyla — gerçekleşir. Fotoğraflar kütüphanesinden veya Dosyalar uygulamasından seçilen dosyalar, herhangi bir bayt telefonu terk etmeden AES-256-GCM ile şifrelenir. Asıl ağır yük, PBKDF2 anahtar türetmesidir; bir iPhone 14 Pro'da 600.000 yinelemeli PBKDF2 yaklaşık 350 ms'de tamamlanır. Son tatilden kalan 500 MB'lık bir .mov dosyasının gerçek darboğazı yükleme bant genişliğidir, şifreleme değil. Mobil öncelikli aktarım hizmetleri için yerel uygulamalar gerekmez — tarayıcı gereken her şeye sahiptir.

Tarayıcı tabanlı neden mobilde yerel uygulamayı geçer

Dosya aktarımı için yerel iOS ve Android uygulamaları (Dropbox, WeTransfer'ın 2023 öncesi uygulaması) geniş izinler ister, kullanımdan sonra bellekte kalır ve reklam gösterir. Tarayıcı tabanlı bir iş akışı kurulum gerektirmez, bir kez çalışır ve sekme kapandığında biter. Daha da önemlisi, Apple'ın App Store'da gerçek sıfır bilgi uygulamalarını reddetmesi (Cryptee'nin 2021 davası belgelenmiştir), şifreleme mantığının bir uygulama güncellemesiyle sessizce değiştirilmemesini sağlamanın tek yolunu tarayıcı teslimatı kılar. Aynı JavaScript paketi her yerde çalışır ve SHA-384 karmaları üzerinden doğrulanabilir.

iOS ve Android'de Web Crypto API

iOS 17+'da Safari 17, crypto.subtle'i tam olarak destekler: deriveKey, encrypt, decrypt, sign, verify. Android'de Chrome, sürüm 37'den (2014) itibaren desteği mevcuttur. Her iki uygulama da yerel işletim sistemi ilkellerine — iOS'ta CommonCrypto, Android'de BoringSSL — devreder; bu sayede kriptografi, ARM'ın AES talimatlarında donanım hızlandırmasından yararlanır. 5 MB'lık bir parça Pixel 8'de yaklaşık 15 ms'de şifrelenir. API, JavaScript'e ham anahtar materyali açmaz (CryptoKey nesneleri opak tutamaçlardır); bu durum, mobil tarayıcılarda çok daha az sayıda olan kötü niyetli eklentilere karşı korumaya yardımcı olur.

Belleği patlatmadan büyük dosyaları yönetmek

Mobil Safari, 6 GB RAM'e sahip iPhone'larda JavaScript yığınını yaklaşık 2 GB ile sınırlar; eski cihazlarda daha azdır. "Dosyayı ArrayBuffer'a oku, şifrele, yükle" kalıbıyla yapılan naif uygulama, 1 GB'ın üzerindeki her şeyde çöker. Akış zorunludur. 5 MB parçaları okumak için File.slice() kullanın, her birini HKDF aracılığıyla türetilmiş bir alt anahtarla şifreleyin ve ReadableStream gövdesiyle fetch() üzerinden yükleyin. İlerleyen yükleme, 10 GB videolarda bile en yüksek bellek kullanımını 50 MB'ın altında tutar. Android'deki Chrome, sürüm 105'ten beri akış fetch isteklerini destekler; Safari, 17.4'te tam desteği ekledi.

Batarya ve ısı

AES-256-GCM, donanım açısından ucuzdur — ARMv8'in Kriptografi Uzantıları neredeyse DRAM hızında çalışmasını sağlar. iPhone 14 Pro'da 1 GB şifreleme yaklaşık %2 batarya tüketir; bunun büyük çoğunluğu CPU'dan değil yükleme için radyodan gelir. Kullanıcıların ısı hissettiği yer, yüksek yineleme sayılarında PBKDF2'dir; 1.200.000 yineleme (OWASP 2024 önerisi) 700 ms sürer ve A17'yi kısa süre 90°C'ye çıkarır. Yineleme sayısını 600.000'e ayarlamak güvenlik ve ısı arasında denge kurar. Argon2id, m=32 MB ile sürekli iş yüklerinde daha naziktir; çünkü bellek yoğunluğu daha yavaş ama daha az güç yoğunluğundadır.

Hücresel, Wi-Fi ve yükleme güvenilirliği

Mobil yüklemeler başarısız olur. Metro tüneli, asansör, Wi-Fi'dan LTE'ye geçiş — bunların herhangi biri naif bir fetch()'i öldürür. Sağlam mobil aktarım, parça düzeyinde onaylama ile devam ettirilebilir yüklemeler kullanır; tus.io (yaygın olarak desteklenen tus 1.0 spesifikasyonu) veya S3 çok parçalı yüklemeler gibi protokoller. Her 5 MB'lık parça bağımsız olarak yüklenir; başarısızlık yalnızca o parçayı yeniden gönderir. İstemci, parça durumunu IndexedDB'de saklar; bu sayede tarayıcı sekmesinin yeniden yüklenmesi veya iOS sekmesinin çıkarılması işin tamamını yeniden başlatmaz.

Klavye girişi ve parola UX sorunu

Telefon klavyesinde 16 karakterlik güçlü parola yazmak zahmetlidir. Alternatifler sunun: gönderenin ekranından parolayı içeren QR kod tarayın, yerel parola yöneticisinden yapıştırın (iOS, web için .well-known/apple-app-site-association eşdeğerleri aracılığıyla Keychain'den doldurur) veya önceki aktarımda kaydedilmiş bir passkey kullanın. Tek seferlik durumlar için, bir yardımcı uygulamanın (örneğin Signal) parolayı kullanıcı yeniden yazmadan enjekte etmesine izin vermek amacıyla Web Share Target API'sini kullanın.

Erişilebilirlik ve küçük ekranlar

4,7 inçlik iPhone SE, masaüstü stili sürükle-bırak yükleyiciye sığmaz. Mobil şifreleme arayüzleri görüntü alanını gözetmeli: tam ekran dosya seçici, sanal klavyenin üzerinde görünür kalan ilerleme çubukları, her düğmede VoiceOver etiketleri (erişilebilirlik için aria-valuenow ile role="progressbar") ve Apple HIG uyarınca minimum 44x44 piksel dokunma hedefi. Kontrolleri hover durumlarının arkasına saklamayın — dokunmatik ekranda hover yoktur. iOS Düşük Güç Modu ile test edin; bu mod arka plan zamanlayıcılarını kısıtlar ve yoklama tabanlı ilerleme güncellemelerini bozar.

iOS Safari'nin yüklemeleri bozan tuhaflıkları

Safari'nin iOS'ta bazı tuzakları vardır. Fetch API'nin yükleme ilerleme olayları, iOS 16.4 öncesinde güvenilir biçimde tetiklenmez. Dosya Sistemi Erişim API'si desteklenmez; bu nedenle Chrome'un yaptığı gibi yerel depolamadan büyük dosyaları akış halinde okuyamazsınız. Safari, bellek baskısında etkin olmayan sekmeleri agresif biçimde çıkarır; bu da devam eden yüklemeleri öldürür. Hafifletme yolları: geri dönüş olarak XMLHttpRequest'i ilerleme olaylarıyla kullanın (hâlâ sorunsuz çalışır), yükleme sırasında sekmeyi ön planda tutun ve büyük dosyalar için ekranı kilitlememeleri konusunda kullanıcıları uyarın. Ekranın açık kalması batarya tüketir ama sekme çıkarılmasını önler.

Android'in geniş cihaz çeşitliliği

Android, Pixel 8 Pro'dan 80 dolarlık Android Go çalıştıran Moto e14 cihazlara kadar uzanır. Web Crypto hepsinde çalışır, ancak performans büyük ölçüde değişir — 2 GHz MT6762'de 600.000 PBKDF2 yinelemesi Apple M3 sınıfı telefonun 200 ms'sine karşılık 1,8 saniye sürer. Cihazı Device Memory API ve Hardware Concurrency aracılığıyla algılayın, yineleme sayılarını buna göre ölçeklendirin (Go cihazlar için 300.000'e kadar düşürün) ve yalnızca hücresel bağlantısı olan kullanıcıları 1 GB'ın üzerindeki yüklemelerin güvenilmez olabileceği konusunda uyarın. Kazanım şudur: şifreli aktarım, amiral gemisi gerektirmeden dünyanın telefonlarının büyük çoğunluğunda çalışı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