Şifreleme (encryption), verilerin özel bir anahtar olmadan okunamayacak bir forma dönüştürülmesi işlemidir. Mobil uygulamalarda şifreleme, kullanıcıların kişisel verilerini, ödeme bilgilerini ve iş mantığını ele geçirme ve sızıntılara karşı korur. Statista'ya (2024) göre, mobil uygulamalardan kaynaklanan veri ihlallerinin sayısı iki yılda %38 arttı ve vakaların %72'sinde neden, şifrelemenin olmaması veya yanlış kullanılmasıydı. Modern mobil platformlar, şifreleme için yerleşik API'ler sağlar ve bunların kullanımı zorunlu bir güvenlik standardıdır. Statista, 2024
Önemli Noktalar
Mobil uygulamalar bağlamında şifreleme, cihazda depolanan verileri (data at rest) ve ağ üzerinden iletilen verileri (data in transit) korumak için kriptografik algoritmaların uygulanmasıdır. Cihaz düzeyinde, yerel depolama şifrelenir: dosyalar, veritabanları, SharedPreferences ve önbellek. Ağ düzeyinde, uygulama ile sunucu arasındaki trafik TLS/HTTPS protokolleri aracılığıyla şifrelenir. Nihai hedef, cihaza fiziksel erişim veya trafiğin ele geçirilmesi durumunda bile, bir saldırganın kriptografik anahtar olmadan korunan verileri okuyamamasını sağlamaktır.
Mobil cihazlar veri kaybına karşı özellikle savunmasızdır: bir telefon kolayca kaybolabilir, çalınabilir veya kötü amaçlı yazılım bulaşabilir. Ponemon Institute'a (2023) göre, veri ihlallerinden etkilenen şirketlerin %42'si olayları mobil cihazlara bağlamaktadır. Şifreleme olmadan, bir saldırgan USB aracılığıyla cihaza bağlanabilir, SQLite veritabanını çıkarabilir ve depolanan tüm verileri okuyabilir. Şifreleme bu sorunu çözer: veritabanı çıkarılsa bile, içeriği şifreli kalır. Ayrıca, ABD ve AB'de kişisel verilerin şifrelenmesini zorunlu kılan ve ihlaller için yıllık cironun %4'üne kadar para cezası uygulayan yasalar (GDPR, CCPA) bulunmaktadır. Şifreleme kullanımı, kullanıcı verileriyle çalışan herhangi bir mobil uygulama için yalnızca teknik bir gereklilik değil, aynı zamanda yasal bir zorunluluktur.
Tüm şifreleme algoritmaları iki ana türe ayrılır: simetrik (şifreleme ve şifre çözme için tek anahtar) ve asimetrik (bir çift anahtar — açık ve özel). Türün seçimi kullanım senaryosuna bağlıdır: yerel verileri şifrelemek için genellikle hızları nedeniyle simetrik algoritmalar kullanılırken, anahtar değişimi ve kimlik doğrulama için asimetrik algoritmalar kullanılır.
| Özellik | Simetrik | Asimetrik |
|---|---|---|
| Anahtar sayısı | 1 (gizli) | 2 (açık + özel) |
| Hız | Yüksek (1–10 GB/s) | Düşük (1–10 MB/s) |
| Anahtar dağıtımı | Sorunlu — anahtar iletilmelidir | Basit — açık anahtar yayınlanır |
| Örnekler | AES, ChaCha20 | RSA, ECDH, ECIES |
| Mobil geliştirmede kullanım | Yerel veri şifreleme | Anahtar değişimi, dijital imzalar |
Pratikte, mobil uygulamalarda karma şifreleme kullanılır: asimetrik bir algoritmayla (örneğin ECDH) taraflar bir oturum anahtarı değiş tokuş eder ve sonraki tüm veriler simetrik bir algoritmayla (AES veya ChaCha20) şifrelenir. Bu yaklaşım, simetrik şifrelemenin hızını asimetrik anahtar değişiminin güvenliğiyle birleştirir. Bu yöntem, TLS 1.3, Signal Protocol ve Apple iMessage'ın temelini oluşturur.
Modern mobil geliştirme, her biri belirli görevler için tasarlanmış ve kendi uygulama alanına sahip birkaç standartlaştırılmış şifreleme algoritması kullanır.
Şifreleme verileri üç temel senaryoda korur: cihaz kaybı (disk ve uygulama kapsayıcı şifrelemesi), trafik ele geçirme (TLS/HTTPS ağ protokolleri) ve sunucu sızıntısı (uçtan uca şifreleme). Her senaryo kendi yaklaşımını ve araçlarını gerektirir.
Bekleyen veriler — cihazdaki veriler — Android Keystore ve iOS Keychain aracılığıyla şifrelenir. Android 7.0'dan itibaren dosya tabanlı şifreleme (File-Based Encryption) kullanılır ve uygulamalar, AndroidX Security kitaplığından EncryptedSharedPreferences ve EncryptedFile aracılığıyla verilerini ek olarak şifreleyebilir. iOS'ta, tüm uygulamalar varsayılan olarak Data Protection API ile çalışır ve dosyaları, cihaz şifresiyle bağlantılı bir anahtarla dosya sistemi düzeyinde şifreler. İletilen veriler için zorunlu Certificate Pinning ile TLS 1.2/1.3 kullanılır.
Uçtan uca şifreleme (E2E), bir mesajın gönderenin cihazında şifrelendiği ve yalnızca alıcının cihazında çözüldüğü en yüksek veri koruma seviyesidir. Depolama ve iletim sunucusunun içeriğe erişimi yoktur — yalnızca şifrelenmiş bloblarla işlem yapar. Mobil uygulamalar için en bilinen E2E uygulaması, ilk anahtar değişimi için X3DH (Extended Triple Diffie-Hellman) ile birlikte Double Ratchet Algorithm kullanan Signal Protocol'dür. Signal Protocol, Perfect Forward Secrecy ve future secrecy sağlar: bir anahtarın ele geçirilmesi önceki veya sonraki mesajları ortaya çıkarmaz. Carnegie Mellon Üniversitesi'nin (2023) bir araştırmasına göre, mesajlaşma uygulamalarında E2E şifreleme, yalnızca TLS şifrelemesine kıyasla iletişim sızıntısı riskini %99,7 oranında azaltır. GDPR ve HIPAA gerekliliklerine göre Health & Fitness ve Finance kategorilerindeki uygulamalar için E2E kullanımı zorunludur. Kendi projenizde E2E uygulamak için Signal Protocol kitaplığını (Java/Swift) veya Olm (Matrix protokolü) tabanlı bir kitaplığı kullanmanız önerilir. Bir E2E çözümü seçerken platform uyumluluğunu değerlendirin: Signal Protocol, eşzamansız gönderme ve istemcide anahtar depolama desteği gerektirir, bu da çoklu cihaz senaryolarını karmaşık hale getirir — bu gibi durumlarda, oda modeliyle Matrix Protocol daha iyi bir seçim olabilir.
Android'de Jetpack Security (AndroidX Security) kullanarak veri şifreleme ve şifre çözme örneğine bakalım. Kitaplık, dosya şifreleme için EncryptedFile ve ayarlar için EncryptedSharedPreferences sağlar.
val masterKey = MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
val encryptedFile = EncryptedFile.Builder(
context,
File(context.filesDir, "secret.dat"),
masterKey,
EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB
).build()
encryptedFile.openFileOutput(applicationContext).use { outputStream ->
outputStream.write("Sensitive user data".toByteArray(Charsets.UTF_8))
}
MasterKey, AES256-GCM kullanılarak oluşturulur — en güvenli simetrik şifreleme modu. Anahtar, ana süreçten izole edilmiş Android Keystore'da saklanır: uygulama ele geçirilse bile, bir saldırgan anahtarı çıkaramaz. EncryptedFile, anahtar türetme için HKDF ile AES-256-GCM şeması ve 4KB sayfa boyutu kullanarak hız ve güvenlik arasında iyi bir denge sağlar. Verileri okumak için aynı parametrelerle openFileInput kullanılır: kitaplık, okuma sırasında verileri otomatik olarak çözer.
iOS'ta, AES.GCM veya ChaChaPoly kullanarak CryptoKit (Swift) aracılığıyla benzer işlevsellik sağlanır. Anahtar, Keychain Services aracılığıyla Secure Enclave'de saklanır. İlke aynıdır: anahtarlar güvenli donanım deposunu asla terk etmez ve veriler diske yazılmadan önce şifrelenir. Bu mimari, hassas verilerle çalışan uygulamalar için OWASP MASVS (Mobile Application Security Verification Standard) Seviye L2 önerilerine uygundur. Gerçek projelerde, tokenlar için EncryptedSharedPreferences ve kullanıcı verileri için EncryptedFile kombinasyonu, yerel şifreleme senaryolarının %100'ünü kapsar. Ayrıca, sunucudan alınan anahtarlarla (örneğin ECDH oturum anahtarları) çalışmak için, purpose = KeyProperties.PURPOSE_ENCRYPT parametresiyle Android KeyStore kullanılır; bu, anahtarın yalnızca yetkili kriptografik işlemler için kullanılabilmesini ve donanım deposundan RAM'e düz metin olarak asla dışa aktarılmamasını sağlar.
Sıkça sorulan sorular
GCM modunda AES-256, anahtarın donanım deposunda (Android Keystore / iOS Keychain) saklanmasıyla altın standart olarak kabul edilir. Ağ trafiği için — Curve25519 eliptik eğrisiyle TLS 1.3. ChaCha20-Poly1305, donanım AES'i olmayan cihazlarda alternatif olarak kullanılır.
AES simetrik bir algoritmadır (tek anahtar), hızlıdır, büyük hacimli verileri şifrelemek için uygundur. RSA asimetriktir (anahtar çifti), yavaştır, veriler için değil anahtar şifreleme ve imzalar için kullanılır. Mobil uygulamalarda AES verileri şifreler, RSA anahtarları korur.
Gizli verileri şifrelemek gerekir: erişim tokenları, parolalar, kişisel bilgiler, ödeme verileri, tıbbi kayıtlar. Kamuya açık veriler (görseller, içerik) şifrelenmeden kalabilir, ancak bunları uygulamanın korumalı kapsayıcısında saklamak daha iyidir.
Uçtan uca şifrelemede, veriler gönderilmeden önce gönderenin cihazında şifrelenir ve yalnızca alıcının cihazında çözülür. Sunucu yalnızca şifrelenmiş verileri görür. Signal Protocol'de uygulanan Double Ratchet protokolü, mobil mesajlaşma uygulamalarında en yaygın E2E mekanizmasıdır.
Teknik olarak mümkün, ancak önerilmez. Cihazdaki veriler için Keystore'dan bir anahtarla simetrik şifreleme (AES-GCM) kullanın. Ağ için ayrı bir anahtar seti ve Certificate Pinning ile TLS 1.3 kullanın. Ayrım, bir anahtar sızdırıldığında her iki kanalın da ele geçirilmesini önler.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun