Sobes.tech
Middle

Hol fogja tárolni a tokeneket?

sobes.tech MI

Válasz az MI-től

Tokenek, különösen bizalmasak (API-hozzáférés, felhasználói munkamenetek) tárolására az Android alkalmazásban a következő helyeket fogom megfontolni:

  1. SharedPreferences (titkosítva vagy az EncryptedSharedPreferences használatával): Kisebb tokenekhez alkalmas. Az EncryptedSharedPreferences (Biztonsági Könyvtár része) hardveres titkosítást nyújt támogatott eszközökön, növelve a biztonságot a szokásos SharedPreferences-hez képest.

    // EncryptedSharedPreferences létrehozása
    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 mentése
    with(sharedPreferences.edit()) {
        putString("auth_token", "your_sensitive_token")
        apply()
    }
    
    // Token olvasása
    val authToken = sharedPreferences.getString("auth_token", null)
    
  2. Android Keystore rendszer: A legbiztonságosabb módszer kriptográfiai kulcsok és érzékeny adatok tárolására. A kulcsok a készülék védett területén tárolódnak, és nem szerezhetők meg az alkalmazáson kívül. A Keystore rendszer használható tokenek titkosítására/dekódolására, amelyek SharedPreferences-ben vagy adatbázisban vannak tárolva.

    // Példa kulcs beszerzésére a Keystore-ból (API szint 23+)
    val keyStore = KeyStore.getInstance("AndroidKeyStore")
    keyStore.load(null)
    val secretKeyEntry = keyStore.getEntry("my_encryption_key_alias", null) as KeyStore.SecretKeyEntry
    val secretKey = secretKeyEntry.secretKey
    // A secretKey használata token titkosítására/dekódolására
    
  3. SQLite adatbázis (titkosított táblák vagy oszlopok): Ha sok token van, vagy más adatokkal kapcsolatosak, helyi adatbázist lehet használni. A biztonság növelése érdekében a tokeneket tartalmazó adatokat titkosított oszlopokban kell tárolni, vagy olyan könyvtárat használni, amely az egész adatbázist titkosítja (pl. SQLCipher for Android).

    -- Példa titkosított oszlopot tartalmazó tábla létrehozására (a könyvtár függvénye)
    CREATE TABLE users (
        id INTEGER PRIMARY KEY,
        username TEXT,
        auth_token BLOB -- Titkosított token tárolása
    );
    
  4. Alkalmazás memória (RAM): Csak ideiglenes token tárolására a jelenlegi munkamenet során. A munkamenet vagy az alkalmazás bezárása után a token kinyerhető és biztonságosabban tárolható. Nem alkalmas tartós tárolásra.

A választás függ:

  • A token bizalmassága: Mennyire érzékeny a token?
  • A token mérete: A kis tokenek könnyebben tárolhatók SharedPreferences-ben vagy Keystore-ban.
  • A token élettartama: Szükség van-e a tokenre az alkalmazás bezárása után?
  • Android verziók: A Keystore és az EncryptedSharedPreferences támogatása változó.

Ajánlás: Kombinálja a Keystore-t a titkosított SharedPreferences-szel vagy titkosított adatbázissal a token tárolására. Ez magas szintű biztonságot nyújt viszonylag egyszerű használat mellett.