Sobes.tech
Middle

Kde budete ukládat tokeny?

sobes.tech AI

Odpověď od AI

Pro ukládání tokenů, zejména důvěrných (přístup k API, uživatelské relace), v aplikaci Android zvážím následující místa:

  1. SharedPreferences (zašifrované nebo s použitím EncryptedSharedPreferences): Vhodné pro malé tokeny. EncryptedSharedPreferences (součást Bezpečnostní knihovny) poskytuje hardwarové šifrování na podporovaných zařízeních, čímž zvyšuje bezpečnost oproti běžným SharedPreferences.

    // Vytvoření 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
    )
    
    // Uložení tokenu
    with(sharedPreferences.edit()) {
        putString("auth_token", "your_sensitive_token")
        apply()
    }
    
    // Čtení tokenu
    val authToken = sharedPreferences.getString("auth_token", null)
    
  2. Systém Android Keystore: Nejbezpečnější způsob ukládání kryptografických klíčů a citlivých dat. Klíče jsou uloženy v chráněné oblasti zařízení a nemohou být získány z aplikace. Keystore lze použít k šifrování/dešifrování tokenů uložených v SharedPreferences nebo databázi.

    // Příklad získání klíče z Keystore (pro API úroveň 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
    // Použití secretKey pro šifrování/dešifrování tokenu
    
  3. SQLite databáze (zašifrované tabulky nebo sloupce): Pokud je tokenů hodně nebo jsou spojeny s jinými daty, lze použít místní databázi. Pro zvýšení bezpečnosti by měla být data tokenů uložena v zašifrovaných sloupcích nebo použít knihovnu poskytující šifrování celé databáze (například SQLCipher for Android).

    -- Příklad vytvoření tabulky se zašifrovaným sloupcem (závisí na knihovně)
    CREATE TABLE users (
        id INTEGER PRIMARY KEY,
        username TEXT,
        auth_token BLOB -- Uložení zašifrovaného tokenu
    );
    
  4. Paměť aplikace (RAM): Pouze pro dočasné uložení tokenu během krátké doby jeho použití v aktuální relaci. Po ukončení relace nebo zavření aplikace je token extrahován a uložen bezpečněji. Není vhodné pro perzistentní ukládání.

Výběr závisí na:

  • Důvěrnosti tokenu: Jak citlivý je token?
  • Velikosti tokenu: Malé tokeny jsou pohodlnější k uložení v SharedPreferences nebo Keystore.
  • Délce životnosti tokenu: Je potřeba token po zavření aplikace?
  • Verzi Androidu: Podpora Keystore a EncryptedSharedPreferences se liší.

Doporučení: Kombinujte Keystore pro ukládání šifrovacího klíče s zašifrovanými SharedPreferences nebo zašifrovanou databází pro ukládání samotného tokenu. To zajistí vysokou úroveň bezpečnosti při relativně jednoduchém použití.