Sobes.tech
Middle

Kur saugosite žetonus?

sobes.tech AI

Atsakymas iš AI

Tokenų saugojimas, ypač konfidencialių (API prieiga, naudotojo sesijos), Android programėlėje apsvarstysiu šias vietas:

  1. SharedPreferences (šifruoti arba naudojant EncryptedSharedPreferences): Tinka mažiems tokenams. EncryptedSharedPreferences (saugumo bibliotekos dalis) užtikrina aparatinį šifravimą palaikomose įrenginiuose, didindama saugumą lyginant su įprastais SharedPreferences.

    // EncryptedSharedPreferences sukūrimas
    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
    )
    
    // Tokeno išsaugojimas
    with(sharedPreferences.edit()) {
        putString("auth_token", "your_sensitive_token")
        apply()
    }
    
    // Tokeno skaitymas
    val authToken = sharedPreferences.getString("auth_token", null)
    
  2. Android Keystore sistema: Labiausiai saugus būdas saugoti kriptografinius raktus ir jautrius duomenis. Raktai saugomi apsaugotoje įrenginio srityje ir negali būti išgauti iš programėlės. Keystore sistemą galima naudoti šifravimui/dešifravimui tokenų, saugomų SharedPreferences ar duomenų bazėje.

    // Pavyzdys, kaip gauti raktą iš Keystore (API lygis 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
    // Naudoti secretKey šifravimui/dešifravimui tokeno
    
  3. SQLite duomenų bazė (šifruoti lentelės arba stulpeliai): Jei tokenų daug arba jie susiję su kitais duomenimis, galima naudoti vietinę duomenų bazę. Saugumo didinimui, tokenų duomenys turėtų būti saugomi šifruotuose stulpeliuose arba naudoti biblioteką, kuri užtikrina visos bazės šifravimą (pvz., SQLCipher for Android).

    -- Pavyzdys, kaip sukurti lentelę su šifruotu stulpeliu (priklauso nuo bibliotekos)
    CREATE TABLE users (
        id INTEGER PRIMARY KEY,
        username TEXT,
        auth_token BLOB -- Šifruotas tokeno saugojimas
    );
    
  4. Programėlės atmintis (RAM): Tik laikinas tokeno saugojimas per trumpą laiką, kol jis naudojamas dabartinėje sesijoje. Po sesijos pabaigos arba programėlės uždarymo, tokenas išgaunamas ir saugomas saugiau. Nėra tinkamas nuolatiniam saugojimui.

Pasirinkimas priklauso nuo:

  • Tokeno konfidencialumo: Kiek jautrus yra tokenas?
  • Tokeno dydžio: Maži tokenai patogesni saugoti SharedPreferences ar Keystore.
  • Tokeno gyvavimo laiko: Ar reikalingas tokenas po programėlės uždarymo?
  • Android versijos: Keystore ir EncryptedSharedPreferences palaikymas skiriasi.

Rekomendacija: Kombinuokite Keystore saugoti šifravimo raktą ir naudokite šifruotas SharedPreferences arba šifruotą duomenų bazę paties tokeno saugojimui. Tai užtikrina aukštą saugumo lygį, naudojimo paprastumu.