Sobes.tech
Middle

Kde budete ukladať tokeny?

sobes.tech AI

Odpoveď od AI

Pre uchovávanie tokenov, najmä dôverných (prístup k API, používateľské relácie), v Android aplikácii zvážim nasledujúce miesta:

  1. SharedPreferences (zašifrované alebo s použitím EncryptedSharedPreferences): Vhodné pre malé tokeny. EncryptedSharedPreferences (časť Security Library) poskytuje hardvérové šifrovanie na podporovaných zariadeniach, čím zvyšuje bezpečnosť v porovnaní s bežnými SharedPreferences.

    // Vytvorenie 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ženie tokenu
    with(sharedPreferences.edit()) {
        putString("auth_token", "your_sensitive_token")
        apply()
    }
    
    // Čítanie tokenu
    val authToken = sharedPreferences.getString("auth_token", null)
    
  2. Android Keystore System: Najbezpečnejší spôsob pre ukladanie kryptografických kľúčov a citlivých údajov. Kľúče sa ukladajú v chránenom priestore zariadenia a nemôžu byť získané z aplikácie. Keystore systém možno použiť na šifrovanie/dešifrovanie tokenov, ktoré sú uložené v SharedPreferences alebo databáze.

    // Príklad získania kľúča z Keystore (pre 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žitie secretKey na šifrovanie/dešifrovanie tokenu
    
  3. SQLite databáza (zašifrované tabuľky alebo stĺpce): Ak je tokenov veľa alebo sú spojené s inými dátami, možno použiť lokálnu databázu. Pre zvýšenie bezpečnosti by mali byť údaje tokenov uložené v zašifrovaných stĺpcoch alebo použiť knižnicu poskytujúcu šifrovanie celej databázy (napr. SQLCipher for Android).

    -- Príklad vytvorenia tabuľky so zašifrovaným stĺpcom (závisí od knižnice)
    CREATE TABLE users (
        id INTEGER PRIMARY KEY,
        username TEXT,
        auth_token BLOB -- Uloženie zašifrovaného tokenu
    );
    
  4. Pamäť aplikácie (RAM): Len na dočasné uloženie tokenu počas krátkeho obdobia jeho použitia v aktuálnej relácii. Po ukončení relácie alebo zatvorení aplikácie je token extrahovaný a uložený bezpečnejšie. Nie je vhodné na perzistentné uloženie.

Výber závisí od:

  • Dôvernosti tokenu: Ako citlivý je token?
  • Veľkosti tokenu: Malé tokeny sú pohodlnejšie na uloženie v SharedPreferences alebo Keystore.
  • Dĺžky života tokenu: Je potrebný token po zatvorení aplikácie?
  • Verzie Androidu: Podpora Keystore a EncryptedSharedPreferences sa líši.

Odporúčanie: Kombinujte Keystore na uloženie šifrovacieho kľúča s zašifrovanými SharedPreferences alebo zašifrovanou databázou na uloženie samotného tokenu. To zabezpečuje vysokú úroveň bezpečnosti pri relatívne jednoduchom použití.