Sobes.tech
Middle

სად შეინახავთ ტოკენებს?

sobes.tech AI

პასუხი AI-სგან

ტოკენების შენახვა, განსაკუთრებით კონფიდენციალურ (API წვდომა, მომხმარებლის სესია), Android აპლიკაციაში განიხილავ შემდეგ ადგილებს:

  1. SharedPreferences (შიფრირებული ან გამოყენებით EncryptedSharedPreferences): შესაფერისია მცირე ტოკენებისთვის. EncryptedSharedPreferences (უსაფრთხოების ბიბლიოთეკის ნაწილი) უზრუნველყოფს ჰარდვერ შიფრაციას მხარდაჭერილი მოწყობილობებზე, რაც ზრდის უსაფრთხოებას ჩვეულებრივ SharedPreferences-ის მიმართ:

    // 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
    )
    
    // ტოკენის შენახვა
    with(sharedPreferences.edit()) {
        putString("auth_token", "your_sensitive_token")
        apply()
    }
    
    // ტოკენის კითხვა
    val authToken = sharedPreferences.getString("auth_token", null)
    
  2. Android Keystore სისტემა: ყველაზე უსაფრთხო გზა კრიპტოგრაფიული გასაღებების და მგრძნობიარე მონაცემების შენახვისთვის. გასაღებები ინახება მოწყობილობის დაცულ ტერიტორიაზე და ვერ მიიღება აპლიკაციიდან. Keystore-ს სისტემა შეიძლება გამოყენებულ იქნას ტოკენების შიფრაციის/დეშიფრაციისთვის, რომლებიც შენახულია SharedPreferences ან მონაცემთა ბაზაში.

    // მაგალითი გასაღების მიღების Keystore-დან (API დონე 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
    // გამოყენება secretKey-ის ტოკენის შიფრაციის/დეშიფრაციისთვის
    
  3. SQLite მონაცემთა ბაზა (შიფრირებული სვეტები ან სვეტები): თუ ტოკენების რაოდენობა დიდია ან დაკავშირებულია სხვა მონაცემებთან, შეიძლება გამოყენებულ იქნას ადგილობრივი მონაცემთა ბაზა. უსაფრთხოების გასაზრდელად, ტოკენების მონაცემები უნდა იყოს შიფრირებული სვეტებში ან გამოიყენოს ბიბლიოთეკა, რომელიც უზრუნველყოფს მთლიანი ბაზის შიფრაციას (მაგალითად, SQLCipher for Android).

    -- მაგალითი შიფრირებული სვეტით ტაბლის შექმნის (მოკიდებულია ბიბლიოთეკაზე)
    CREATE TABLE users (
        id INTEGER PRIMARY KEY,
        username TEXT,
        auth_token BLOB -- შიფრირებული ტოკენის შენახვა
    );
    
  4. აპლიკაციის მეხსიერება (RAM): მხოლოდ დროებითი შენახვა ტოკენის მიმდინარე სესიის განმავლობაში. სესიის დასრულების ან აპლიკაციის დახურვის შემდეგ, ტოკენი ამოიღება და უფრო უსაფრთხოდ ინახება. არ არის შესაფერისი მუდმივი შენახვისთვის.

შერჩევა დამოკიდებულია:

  • ტოკენის კონფიდენციალურობა: რამდენად მგრძნობიარეა ტოკენი?
  • ტოკენის ზომა: მცირე ტოკენები უფრო მოსახერხებელია SharedPreferences ან Keystore-ში შენახვისთვის.
  • ტოკენის სიცოცხლის ხანგრძლივობა: საჭიროა თუ არა ტოკენი აპლიკაციის დახურვის შემდეგ?
  • Android-ის ვერსიები: Keystore და EncryptedSharedPreferences მხარდაჭერა განსხვავდება.

შეფასება: კომბინირეთ Keystore-ს შიფრირების გასაღების შენახვასთან, რომელიც გამოიყენება შიფრირებული SharedPreferences ან შიფრირებული მონაცემთა ბაზის შენახვაზე, რათა უზრუნველყოთ მაღალი უსაფრთხოების დონე, გამოყენების სიმარტივესთან ერთად.