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:
-
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) -
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 -
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 ); -
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
EncryptedSharedPreferencessa 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í.