Sobes.tech
Middle

Jetonları nerede saklayacaksınız?

sobes.tech yapay zeka

AI'dan gelen yanıt

Android uygulamasında özellikle gizli (API erişimi, kullanıcı oturumları) tokenleri depolamak için aşağıdaki yerleri dikkate alırım:

  1. SharedPreferences (şifrelenmiş veya EncryptedSharedPreferences kullanılarak): Küçük tokenler için uygundur. EncryptedSharedPreferences (Güvenlik Kütüphanesinin bir parçası) desteklenen cihazlarda donanım tabanlı şifreleme sağlar ve normal SharedPreferences'e göre güvenliği artırır.

    // EncryptedSharedPreferences oluşturma
    val context: Context = applicationContext
    val masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC)
    
    val sharedPreferences = EncryptedSharedPreferences.create(
        "secure_preferences",
        masterKeyAlias,
        context,
        EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
        EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
    )
    
    // Token kaydetme
    with(sharedPreferences.edit()) {
        putString("auth_token", "gizli_tokeniniz")
        apply()
    }
    
    // Token okuma
    val authToken = sharedPreferences.getString("auth_token", null)
    
  2. Android Keystore Sistemi: Kriptografik anahtarlar ve hassas verilerin saklanması için en güvenli yöntem. Anahtarlar cihazın korunan alanında saklanır ve uygulamadan çıkarılamaz. Keystore sistemi, SharedPreferences veya veritabanında saklanan tokenleri şifrelemek/şifresini çözmek için kullanılabilir.

    // Keystore'dan anahtar alma örneği (API seviyesi 23+ için)
    val keyStore = KeyStore.getInstance("AndroidKeyStore")
    keyStore.load(null)
    val secretKeyEntry = keyStore.getEntry("my_encryption_key_alias", null) as KeyStore.SecretKeyEntry
    val secretKey = secretKeyEntry.secretKey
    // secretKey kullanarak tokeni şifreleme/şifresini çözme
    
  3. SQLite Veritabanı (şifrelenmiş tablolar veya sütunlar): Çok sayıda token varsa veya diğer verilerle ilişkiliyse, yerel veritabanı kullanılabilir. Güvenliği artırmak için token verilerini şifrelenmiş sütunlarda saklamak veya tüm veritabanını şifreleyen bir kütüphane kullanmak (örneğin, SQLCipher for Android) önerilir.

    -- Şifrelenmiş sütun içeren tablo oluşturma örneği (kütüphaneye bağlı)
    CREATE TABLE users (
        id INTEGER PRIMARY KEY,
        username TEXT,
        auth_token BLOB -- Şifrelenmiş token saklama
    );
    
  4. Uygulama Belleği (RAM): Sadece geçici olarak, oturum sırasında tokeni saklamak için. Oturum sona erdikten veya uygulama kapatıldığında, token alınır ve daha güvenli bir şekilde saklanır. Kalıcı depolama için uygun değildir.

Seçim şu faktörlere bağlıdır:

  • Tokenin gizliliği: Token ne kadar hassas?
  • Tokenin boyutu: Küçük tokenler SharedPreferences veya Keystore'da saklanması daha kolaydır.
  • Tokenin yaşam süresi: Uygulama kapandıktan sonra token gerekebilir mi?
  • Android sürümleri: Keystore ve EncryptedSharedPreferences desteği değişkenlik gösterebilir.

Öneri: Anahtar şifreleme anahtarını saklamak için Keystore'u, kendisini şifrelenmiş SharedPreferences veya şifrelenmiş veritabanı ile birleştirin. Bu, nispeten basit kullanımla yüksek güvenlik seviyesi sağlar.