Sobes.tech
Middle

Waar gaat u de tokens opslaan?

sobes.tech AI

Antwoord van AI

Om tokens op te slaan, vooral vertrouwelijke (toegang tot API, gebruikerssessies), in een Android-applicatie, overweeg ik de volgende plaatsen:

  1. SharedPreferences (versleuteld of met EncryptedSharedPreferences) : Geschikt voor kleine tokens. EncryptedSharedPreferences (onderdeel van de Security Library) biedt hardwareversleuteling op ondersteunde apparaten, wat de veiligheid verhoogt in vergelijking met gewone SharedPreferences.

    // Aanmaken van EncryptedSharedPreferences
    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 opslaan
    with(sharedPreferences.edit()) {
        putString("auth_token", "jouwgevoelige_token")
        apply()
    }
    
    // Token lezen
    val authToken = sharedPreferences.getString("auth_token", null)
    
  2. Android Keystore Systeem: De meest veilige manier om cryptografische sleutels en gevoelige gegevens op te slaan. Sleutels worden opgeslagen in een beveiligd gedeelte van het apparaat en kunnen niet uit de app worden gehaald. Het Keystore-systeem kan worden gebruikt voor het versleutelen/decrypten van tokens die in SharedPreferences of een database worden opgeslagen.

    // Voorbeeld van het verkrijgen van een sleutel uit de Keystore (voor API-niveau 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
    // Gebruik van secretKey voor het versleutelen/decrypten van het token
    
  3. SQLite Database (versleutelde tabellen of kolommen): Als er veel tokens zijn of ze gerelateerd zijn aan andere gegevens, kan een lokale database worden gebruikt. Voor verhoogde veiligheid moeten tokengegevens worden opgeslagen in versleutelde kolommen of een bibliotheek gebruiken die volledige databaseversleuteling biedt (bijvoorbeeld SQLCipher voor Android).

    -- Voorbeeld van het maken van een tabel met een versleutelde kolom (afhankelijk van de bibliotheek)
    CREATE TABLE users (
        id INTEGER PRIMARY KEY,
        username TEXT,
        auth_token BLOB -- Opgeslagen versleuteld token
    );
    
  4. Toepassingsgeheugen (RAM): Alleen voor tijdelijke opslag van het token tijdens korte gebruiksperiode in de huidige sessie. Na het beëindigen van de sessie of het sluiten van de app wordt het token geëxtraheerd en op een veiligere manier opgeslagen. Niet geschikt voor persistente opslag.

De keuze hangt af van:

  • Vertrouwelijkheid van het token: Hoe gevoelig is het token?
  • Grootte van het token: Kleine tokens zijn gemakkelijker op te slaan in SharedPreferences of Keystore.
  • Levensduur van het token: Is het token nodig na het sluiten van de app?
  • Android-versies: Ondersteuning voor Keystore en EncryptedSharedPreferences varieert.

Aanbeveling: Combineer Keystore voor het opslaan van de encryptiesleutel met versleutelde SharedPreferences of een versleutelde database voor het opslaan van het token zelf. Dit zorgt voor een hoog beveiligingsniveau met relatief eenvoudig gebruik.