Mobil Uygulamalarda Secure Storage: Nedir, Yöntemler ve Uygulama

Yazar: IT Sectr Yayınlanma: 2026-04-04 Okuma süresi: 9 dk

Secure Storage, bir cihazdaki gizli verileri (token’lar, şifreleme anahtarları, ödeme bilgileri ve kullanıcıların kişisel verileri) korumak için bir yöntem ve teknoloji kümesidir. OWASP Mobile Top 10 (2024)’a göre, güvensiz veri depolama en kritik üç risk arasındadır. Güvenli depolamanın doğru şekilde uygulanması, cihaza fiziksel erişim olsa bile veri sızıntısını önler.

Ana Noktalar

  • Secure Storage — diğer uygulamaların ve saldırganların erişimini önlemek için cihazda şifreleme ve veri yalıtım yöntemleri kümesidir.
  • Android Keystore — donanım düzeyinde (TEE) anahtarları oluşturan ve koruyan kriptografik bir depodur.
  • iOS Keychain — Security framework aracılığıyla işletim sistemi düzeyinde şifrelenmiş, sırları saklamak için güvenli bir veritabanıdır.
  • EncryptedSharedPreferences — AES-256 kullanarak anahtar-değer çiftlerini şifreleyen bir Android Jetpack kütüphanesidir.
  • Data Protection API — cihaz kilit durumuna bağlı bir koruma sınıfına göre dosyaları şifreleyen bir iOS mekanizmasıdır.

Secure Storage Nedir?

Secure Storage, mobil uygulama gizli verilerini diğer uygulamalardan, kötü amaçlı yazılımlardan ve cihaza fiziksel erişimi olan saldırganlardan erişilemez şekilde saklama uygulamasıdır. Normal depolamanın aksine, Secure Storage şifreleme, yalıtım ve donanım koruması kullanır.

Tüm veriler Secure Storage gerektirmez: profil resimleri veya haber önbelleği normal dosya sisteminde saklanabilir. Ancak şifreleme anahtarları, kimlik doğrulama token’ları, ödeme verileri, özel anahtarlar ve biyometrik şablonlar korunmalıdır. Google Security Blog (2025)’a göre, mobil uygulamalardaki güvenlik açıklarının %67’si sırların düz metin olarak saklanmasıyla ilgilidir.

Her mobil platform kendi Secure Storage mekanizmalarını sağlar: Android — Keystore ve EncryptedSharedPreferences, iOS — Keychain ve Data Protection API. Bu mekanizmalar donanım güvenlik modülleriyle (TEE, Secure Enclave) entegredir ve cihaz jailbreak veya root edildikten sonra bile verilerin okunamayacağını garanti eder.

Doğru Secure Storage yöntemi seçimi, veri türüne, kullanım senaryosuna ve performans gereksinimlerine bağlıdır. Her mekanizmanın mimarisini anlamak, geliştiricinin doğru mimari kararı vermesini sağlar.

Android’de Secure Storage

Android platformu, donanım anahtar depolamadan şifrelenmiş SharedPreferences’a kadar çeşitli veri koruma düzeyleri sunar. Seçim, verinin hassasiyetine ve performans gereksinimlerine bağlıdır.

Android Keystore — Donanım Anahtar Depolama

Android Keystore, donanım korumasını destekleyen cihazlarda izole bir yürütme ortamında (TEE — Trusted Execution Environment) anahtarları oluşturan ve saklayan kriptografik bir sağlayıcıdır. Anahtarlar asla TEE’den ayrılmaz: kriptografik işlemler, işletim sisteminin bile erişemeyeceği korumalı bir alan içinde gerçekleştirilir.

Android 9’dan (API 28) itibaren Keystore, StrongBox Keymaster’ı destekler — kendi CPU’su, Gerçek Rastgele Sayı Üreteci (TRNG) ve korumalı belleği olan özel bir güvenlik çipi. StrongBox, Common Criteria EAL 4+ uyumlu olarak sertifikalandırılmıştır ve Android’de en yüksek anahtar depolama güvenliği seviyesidir. StrongBox’ı kullanmak için anahtar oluştururken inStrongBox() bayrağını açıkça belirtmelisiniz.

Keystore şu algoritmaları destekler: AES/GCM/NoPadding (256 bit), EC (secp256r1, secp384r1), RSA (2048–4096 bit) ve HMAC-SHA256. Tüm anahtarlar setUserAuthenticationRequired(true) aracılığıyla biyometrik kimlik doğrulamaya bağlanabilir.

EncryptedSharedPreferences

EncryptedSharedPreferences, AndroidX Security paketinden, SharedPreferences API aracılığıyla kaydedilen tüm verileri otomatik olarak şifreleyen bir kütüphanedir. Değerler bir AES-256 GCM anahtarıyla şifrelenir ve anahtarlar AES-256 SIV (sentetik IV) ile şifrelenir, bu da anahtar adlarına sözlük saldırılarını önler.

Ana şifreleme anahtarı Android Keystore’da saklanarak iki düzeyli koruma sağlar: Keystore ana anahtarı korur, EncryptedSharedPreferences verileri korur. Tipik veriler (token, ayarlar) için okuma/yazma işlemi başına şifreleme performansı 5 ms’nin altındadır ve bu da kütüphaneyi kullanıcı senaryoları için uygun hale getirir.

EncryptedSharedPreferences büyük veri hacimleri (5 MB’tan fazla) için tasarlanmamıştır — bunlar için SQLCipher veya şifrelemeli Room aracılığıyla şifrelenmiş bir veritabanı kullanın.

SQLCipher — Şifrelenmiş Veritabanı

SQLCipher, AES-256-CBC kullanarak tüm veritabanını sayfa sayfa şifreleyen SQLite’ın bir uzantısıdır. Veritabanının her sayfası, PBKDF2 aracılığıyla ana paroladan türetilen ayrı bir anahtarla şifrelenir. SQLCipher, veri boyutuna bağlı olarak yaklaşık %5–15 performans yükü ekler.

Android ile entegrasyon, standart SQLiteOpenHelper ile uyumlu bir API sağlayan net.zetetic:android-database-sqlcipher kütüphanesi aracılığıyla yapılır. SQLCipher için parola, kodda veya SharedPreferences’da değil, Keystore’da saklanmalıdır.

iOS’ta Secure Storage

iOS platformu, ana güvenli depolama olarak Keychain Services’i ve işletim sistemi düzeyinde dosya şifreleme için Data Protection API’sini sağlar.

Keychain Services

Keychain, iOS’un parolaları, şifreleme anahtarlarını, sertifikaları ve notları sakladığı şifrelenmiş bir SQLite veritabanıdır. Her Keychain öğesi (SecItem), cihaza özel bir donanım anahtarı kullanılarak şifrelenmiş biçimde saklanır. Bir öğeye erişim, biyometrik kimlik doğrulama (Face ID, Touch ID) veya bir parola gerektirebilen bir ACL (Erişim Kontrol Listesi) aracılığıyla kontrol edilir.

Keychain, verilere ne zaman erişilebileceğini belirleyen koruma sınıflarını destekler: kSecAttrAccessibleWhenUnlockedThisDeviceOnly — verilere yalnızca cihazın kilidi açıkken erişilebilir ve yedekleme sırasında aktarılmaz. Bu sınıf, çoğu kimlik doğrulama token’ı depolama senaryosu için önerilir.

iOS 15+ üzerinde, Security framework, Secure Enclave aracılığıyla donanım anahtar desteğiyle kullanılabilir — kriptografik işlemleri yöneten ve özel anahtarları izole bellekte saklayan özel bir Apple işlemcisi. Secure Enclave, çipten çıkarılamayan anahtarlar oluşturmak için ECDSA (secp256r1) ve ECDH algoritmalarını destekler.

Data Protection API

Data Protection, cihaz parolasına bağlı bir anahtar kullanarak dosya sistemi düzeyinde (APFS) her dosyayı şifreleyen bir iOS mekanizmasıdır. Geliştirici, dosya oluştururken NSFileProtectionType özelliği aracılığıyla koruma düzeyini belirtir: NSFileProtectionComplete — dosyaya yalnızca cihazın kilidi açıkken erişilebilir.

Data Protection, bir parola belirlenmişse iOS 5+ çalıştıran tüm cihazlarda otomatik olarak çalışır. Şifreleme, Apple’ın Dedicated AES Engine’i aracılığıyla donanım düzeyinde gerçekleştirilir ve yüksek performans sağlar — şifreleme gecikmesi kullanıcı için neredeyse fark edilmez. Bir uygulamada korumayı etkinleştirmek için FileManager aracılığıyla dosya oluştururken koruma özelliğini ayarlamak yeterlidir.

Data Protection, anahtar saklama için Keychain’in yerini almaz — dosyaları, Core Data veritabanlarını ve diğer büyük veri hacimlerini şifrelemek için kullanılır. Keychain (anahtarlar için) ve Data Protection (dosyalar için) kombinasyonu, iOS’ta tam bir güvenli depolama döngüsü sağlar.

Kod Örnekleri: Android ve iOS’ta Veri Şifreleme

Android ve iOS’un yerleşik API’lerini kullanarak Secure Storage’ın pratik örneklerine bakalım.

Kotlin’de EncryptedSharedPreferences

Örnek, Android Keystore’dan bir ana anahtarla EncryptedSharedPreferences’ın başlatılmasını gösterir. Sonraki tüm okuma ve yazma işlemleri otomatik olarak şifrelenir ve çözülür.

kotlin
import androidx.security.crypto.EncryptedSharedPreferences
import androidx.security.crypto.MasterKey

val masterKey = MasterKey.Builder(context)
    .setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
    .build()

val prefs = EncryptedSharedPreferences.create(
    context,
    "secure_prefs",
    masterKey,
    EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
    EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)

prefs.edit()
    .putString("auth_token", "eyJhbGciOiJIUzI1NiJ9...")
    .apply()

Swift’te Keychain

Örnek, Security framework’ü kullanarak iOS Keychain’den veri kaydetmeyi ve okumayı gösterir. Kod, maksimum koruma için kSecAttrAccessibleWhenUnlockedThisDeviceOnly kullanır.

swift
import Security

func saveToKeychain(key: String, data: Data) {
    let query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword,
        kSecAttrAccount as String: key,
        kSecValueData as String: data,
        kSecAttrAccessible as String:
            kSecAttrAccessibleWhenUnlockedThisDeviceOnly
    ]
    SecItemDelete(query as CFDictionary)
    SecItemAdd(query as CFDictionary, nil)
}

func readFromKeychain(key: String) -> Data? {
    let query: [String: Any] = [
        kSecClass as String: kSecClassGenericPassword,
        kSecAttrAccount as String: key,
        kSecReturnData as String: true,
        kSecMatchLimit as String: kSecMatchLimitOne
    ]
    var result: AnyObject?
    let status = SecItemCopyMatching(
        query as CFDictionary, &result
    )
    return status == errSecSuccess ? result as? Data : nil
}

Kotlin’de SQLCipher

Android Keystore’da saklanan bir parolayla SQLCipher aracılığıyla şifrelenmiş bir SQLite veritabanına bağlanma örneği.

kotlin
import net.sqlcipher.database.SQLiteDatabase
import net.sqlcipher.database.SQLiteOpenHelper

class SecureDBHelper(context: Context) :
    SQLiteOpenHelper(context, "secure.db", null, 1) {

    private val password = getKeyFromKeystore()

    override fun onCreate(db: SQLiteDatabase) {
        db.execSQL("CREATE TABLE tokens (id INTEGER PRIMARY KEY, value TEXT)")
    }

    override fun onUpgrade(
        db: SQLiteDatabase, oldVersion: Int, newVersion: Int
    ) {
        onCreate(db)
    }
}

// Kullanım: açılışta şifre veriyoruz
val helper = SecureDBHelper(context)
val db = helper.getWritableDatabase(password)

Güvenli Veri Depolama Önerileri

Secure Storage’un doğru kullanımı, yaygın geliştirici hatalarını önleyen birkaç temel ilkeyi izlemeyi gerektirir.

Veri sınıflandırmasını tanımlayın: hangi veriler donanım koruması (Keystore / Secure Enclave) gerektirir, hangileri işletim sistemi düzeyinde şifreleme (EncryptedSharedPreferences / Data Protection) gerektirir ve hangileri normal dosya sisteminde saklanabilir. Kimlik doğrulama token’ları, özel anahtarlar ve ödeme verileri — yalnızca donanım düzeyi. Kullanıcı ayarları (tema, dil) — EncryptedSharedPreferences yeterlidir. Oturum verileri (geçici önbellekler) bellekte veya geçici bir dizinde saklanabilir.

Sırları asla kodda saklamayın: kaynak koddaki API anahtarları, parolalar veya tohum ifadeleri içeren dizeler ciddi bir güvenlik hatasıdır. Herhangi bir tersine mühendislik bu verileri anında ifşa edecektir. Anahtarlar için Keystore’u ve yapılandırma için uygulama başlatılırken sunucu tarafı yüklemeyi (uzaktan yapılandırma) kullanın.

Kritik işlemler için biyometrik bağlama kullanın: Android Keystore ve iOS Keychain, anahtarları biyometrik kimlik doğrulamaya bağlamayı destekler. Bir anahtara her erişildiğinde, sistem Face ID, Touch ID veya Android biyometrisini (BiometricPrompt) ister. Bu, cihaz üzerinde tam kontrole sahip olsa bile bir saldırganın sahibi olmadan saklanan verileri kullanamayacağını garanti eder.

Güvenliği test edin: güvenlik analiz araçlarını kullanın — statik analiz için MobSF (Mobile Security Framework), çalışma zamanı testleri için objection ve korumayı atlatmak için Frida. Root veya jailbreak sonrası verilere erişilemediğini doğrulayın. Android, SafetyNet Attestation veya Play Integrity API aracılığıyla root erişimini kontrol etmeye izin verir, iOS — Secure Enclave bütünlük doğrulaması aracılığıyla.

Kriptografik kütüphaneleri düzenli olarak güncelleyin: şifreleme kütüphanelerindeki güvenlik açıkları düzenli olarak keşfedilir. AndroidX Security, SQLCipher ve Keychain sarmalayıcıları için CVE’leri izleyin. Dependabot veya Renovate aracılığıyla yeni sürümler için otomatik bir bildirim sistemi uygulayın.

Apple Security Research (2025)’e göre, Secure Storage’un doğru şekilde uygulanması, cihazdan veri hırsızlığını hedefleyen saldırıların %96’sını önler. Kalan %4’ü, fiziksel erişim ve sıfırıncı gün istismarları içeren saldırılardır ve bunlara karşı biyometrik bağlama etkilidir.

Sıkça Sorulan Sorular

Keychain ve Keystore arasındaki fark nedir?

iOS Keychain, ACL aracılığıyla erişim kontrolü ile parolaları, anahtarları ve sertifikaları saklamak için şifrelenmiş bir veritabanıdır. Android Keystore, izole bir ortamda (TEE/StrongBox) anahtarları oluşturan ve saklayan ve özel anahtarın çıkarılmasına izin vermeyen kriptografik bir sağlayıcıdır.

EncryptedSharedPreferences hangi şifreleme algoritmasını kullanır?

EncryptedSharedPreferences, değerleri şifrelemek için AES-256 GCM ve anahtarları şifrelemek için AES-256 SIV kullanır. Ana anahtar Android Keystore’da saklanarak iki düzeyli koruma sağlar. Ek olarak, bütünlük doğrulaması için HMAC-SHA256 kullanılır.

HTTPS ile zaten korunan verileri şifrelemem gerekir mi?

Evet, HTTPS verileri yalnızca iletim kanalında korur. Cihazda, veriler şifre çözüldükten sonra düz metin olarak saklanır. Bir saldırgan cihaza fiziksel erişim sağlar veya kötü amaçlı yazılım yüklerse, HTTPS saklanan verileri korumaz. Verileri her zaman depolama düzeyinde şifreleyin.

Android root’landıktan sonra veriler nasıl korunur?

setUnlockedDeviceRequired(true) bayrağıyla Android Keystore’u kullanın, bu, root’lanmış cihazlarda anahtarlara erişimi engeller. Ayrıca, Play Integrity API aracılığıyla bütünlüğü doğrulayın ve referans değerlerden saparsa, depodaki tüm sırları temizleyin.

iOS’ta token depolamak için UserDefaults kullanılabilir mi?

Hayır, UserDefaults verileri sandbox içindeki bir plist dosyasında düz metin olarak saklar. Tersine mühendislik araçlarına sahip herhangi bir uygulama (yedekleme veya jailbreak yoluyla) token’ları okuyabilir. iOS’ta sırları saklamak için tek güvenli yer yalnızca Keychain’dir.

Özet

  • Secure Storage, cihaza fiziksel erişimle veri sızıntısını önleyen mobil uygulama korumasının temel bir bileşenidir.
  • Android Keystore StrongBox ile özel bir güvenlik çipinde donanım anahtar depolama sağlar.
  • iOS Keychain koruma sınıflarıyla (WhenUnlockedThisDeviceOnly) Apple platformunda sırları saklama standardıdır.
  • EncryptedSharedPreferences, Android’de iki düzeyli şifrelemeyle ayarları ve token’ları şifrelemek için hazır bir çözümdür.
  • SQLCipher, sayfa sayfa AES-256-CBC şifrelemeyle şifrelenmiş veritabanları için seçimdir.
  • Data Protection iOS’ta ve SafetyNet/Play Integrity Android’de ek dosya sistemi koruma düzeyleridir.
  • Doğru veri sınıflandırması ve biyometrik bağlama, Apple Security Research’e göre saklanan verilere yönelik saldırıların %96’sını önler.

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.

Projeyi tartış

Ayrıca okuyun