Android Keystore — izolyatsiya qilingan bajarish muhitida (TEE) shifrlash kalitlarini yaratadigan va saqlaydigan kriptografik provayder bo'lib, hatto operatsion tizim uchun ham mavjud emas. AOSP Security Documentation (2025) ma'lumotlariga ko'ra, Keystore Google Play top-100'dagi Android ilovalarining 80% dan ko'prog'ida tokenlarni himoya qilish va ma'lumotlarni shifrlash uchun ishlatiladi. Android Keystore ni tushunish Android'da kalitlarni xavfsiz saqlash uchun juda muhimdir.
Asosiy
Android Keystore — himoyalangan muhitda kriptografik kalitlarni yaratish, saqlash va ishlatish uchun API ta'minlaydigan Android platformasining tizim komponentidir. Dasturiy kriptografik kutubxonalardan (Bouncy Castle, Conscrypt) farqli o'laroq, Keystore shaxsiy kalitlarning hech qachon izolyatsiya qilingan bajarish hududini tark etmasligini kafolatlaydi.
Keystore Android 4.3 (API 18) da RSA qo'llab-quvvatlashi bilan dasturiy provayder sifatida paydo bo'ldi. Android 6.0 (API 23) dan boshlab, Keystore Keymaster Hardware Abstraction Layer (HAL) orqali apparat qo'llab-quvvatlashini oldi va kriptografik operatsiyalarni mos qurilmalarda Trusted Execution Environment (TEE) ga topshiradi. Android Compatibility Definition Document (2025) ga ko'ra, Android 9+ bo'lgan barcha qurilmalar TEE yoki StrongBox orqali apparat Keystore ni qo'llab-quvvatlashi shart.
Keystore'dagi kalitlar alias (taxallus) bilan aniqlanadi — kalitni yaratish yoki yuklashda uzatiladigan satr. Keystore kalitning xom ashyosini olishga ruxsat bermaydi: getEncoded() metodlari Keystore'da yaratilgan kalitlar uchun null qaytaradi. Bu dasturiy kalitlardan tub farqdir — hujumchi qurilma ustidan to'liq nazoratga ega bo'lsa ham shaxsiy kalitni chiqarib ololmaydi.
Keystore Android-ning boshqa xavfsizlik mexanizmlari bilan integratsiyalashgan: biometrik autentifikatsiya (BiometricPrompt), fayl darajasidagi shifrlash (File-Based Encryption) va SafetyNet / Play Integrity tekshirish funksiyalari. Kalitlar ma'lum shartlarda avtomatik o'chirish uchun sozlanishi mumkin: kod-parolni o'chirishda, yangi barmoq izini qo'shishda yoki muddat tugashida.
Android Keystore arxitekturasi apparat himoya darajasi bilan farqlanuvchi uchta amalga oshirish darajasini o'z ichiga oladi. Daraja qurilmaning apparat imkoniyatlariga bog'liq.
TEE (Trusted Execution Environment) — bir xil protsessorda asosiy OT bilan parallel ishlaydigan izolyatsiya qilingan hudud. TEE ARM TrustZone texnologiyasidan foydalanadi, u fizik protsessor yadrosini ikkita virtual qismga ajratadi: Normal World (Android) va Secure World (TEE). Secure World'dagi kod Normal World'dan mavjud bo'lmagan xotira va periferik qurilmalarga kirish huquqiga ega.
Ilova Keystore orqali kriptografik operatsiyani chaqirganda, so'rov Keymaster HAL orqali TEE ga uzatiladi va operatsiya apparat tarafidan bajariladi. Natija ilovaga qaytariladi, ammo shaxsiy kalit TEE himoyalangan xotirasida qoladi. TEE GlobalPlatform TEE Protection Profile bo'yicha sertifikatlangan va TrustZone-ni qo'llab-quvvatlovchi protsessorli qurilmalarda Android 9+ uchun majburiy talabdir.
TEE AES/GCM (128, 256 bit), RSA (2048, 4096 bit), EC (P-256, P-384, P-521) va HMAC-SHA256 algoritmlarini qo'llab-quvvatlaydi. TEE unumdorligi dasturiy kriptografiyadan past (20–40% ga), ammo odatiy operatsiyalar (JWT imzosi, sessiya kalitining shifrini ochish) uchun kechikish 10–50 ms dan oshmaydi.
StrongBox — asosiy protsessordan fizik jihatdan ajratilgan maxsus xavfsizlik chipi. TEE dan farqli o'laroq (Android bilan protsessor vaqtini baham ko'radi), StrongBox o'z CPU, operativ xotira, True Random Number Generator (TRNG) va himoyalangan saqlash (One-Time Programmable memory) ga ega. StrongBox Common Criteria EAL 4+ va Secure IC Protection Profile bo'yicha sertifikatlangan.
StrongBox Android 9+ bo'lgan qurilmalarda tegishli chip mavjud bo'lganda mavjud (masalan, Google Pixel'da Titan M, Samsung Galaxy'da Knox). Ishlab chiqaruvchi StrongBox-ni KeyGenParameterSpec'dagi setIsStrongBoxBacked(true) flagi orqali yoqadi. Apparat qo'llab-quvvatlashi bo'lmasa, flag e'tiborga olinmaydi va Keystore TEE ga o'tadi.
StrongBox cheklovlari: cheklangan algoritmlar to'plami (AES-256, EC P-256, HMAC-SHA256), operatsiyalar navbati — bir vaqtning o'zida ko'pi bilan bitta, operatsiyalar soni — chip resurslari bilan cheklangan. StrongBox yuqori yuklangan stsenariylar uchun mo'ljallanmagan — tez-tez operatsiyalar uchun TEE dan, faqat muhim kalitlar uchun (master shifrlash kalitlari, imzo kalitlari) StrongBox dan foydalaning.
Software-based Keystore — TEE yoki StrongBox apparat qo'llab-quvvatlashisiz qurilmalarda ishlatiladigan dasturiy amalga oshirish. Kalitlar fayl tizimida shifrlangan holda saqlanadi, ammo shaxsiy kalit vaqtincha RAM da shifrdan chiqarilishi mumkin. Dasturiy Keystore kamroq xavfsiz — root kirishiga ega hujumchi xotiradagi kalitni ushlashi mumkin.
Android 12 (API 31) dan boshlab, Google barcha yangi qurilmalar uchun apparat Keystore qo'llab-quvvatlashini talab qiladi. Android 9–11 bo'lgan qurilmalar byudjet modellarida dasturiy Keystore ga ega bo'lishi mumkin. Ishlab chiqaruvchi KeyStore.getKeyCharacteristics() orqali himoya darajasini tekshirishi mumkin — SECURITY_LEVEL_TRUSTED_ENVIRONMENT yoki SECURITY_LEVEL_STRONGBOX atributi apparat himoyasini tasdiqlaydi.
Android Keystore kalit turiga qarab kategoriyalarga bo'lingan keng ko'lamli kriptografik algoritmlarni qo'llab-quvvatlaydi. Algoritm tanlovi unumdorlikka, muvofiqlikka va xavfsizlik darajasiga ta'sir qiladi.
AES (Advanced Encryption Standard) — qurilmadagi ma'lumotlarni himoya qilish uchun simmetrik shifrlash. Tavsiya etilgan rejim: AES/GCM/NoPadding (256 bit). GCM autentifikatsiyalangan shifrlash (AEAD) — shifrlangan ma'lumotlarning yaxlitligini tekshirishni ta'minlaydi. IV (Initialization Vector) hajmi: GCM uchun 12 bayt. AES/ECB dan foydalanmang ‒ tegishli himoyani ta'minlamaydi.
RSA (Rivest–Shamir–Adleman) — sessiya kalitlarini himoya qilish va raqamli imzo uchun asimmetrik shifrlash. Tavsiya etilgan hajm: 2048 yoki 4096 bit. Rejimlar: RSA/ECB/PKCS1Padding (shifrlash) va RSA/ECB/PKCS1Sign (imzo). RSA 1024 eskirgan deb hisoblanadi va yangi ilovalar uchun tavsiya etilmaydi (NIST SP 800-131A Rev. 2).
EC (Elliptic Curve) — imzo va kalit almashinuvi uchun elliptik egri chiziqlar bo'yicha asimmetrik kriptografiya. Qo'llab-quvvatlanadigan egri chiziqlar: secp256r1 (P-256, majburiy), secp384r1 (P-384) va secp521r1 (P-521). EC sezilarli darajada kichikroq kalit hajmi bilan RSA bilan solishtirish mumkin bo'lgan xavfsizlikni ta'minlaydi. P-256 ko'pchilik stsenariylar uchun tavsiya etiladi: barcha qurilmalar tomonidan qo'llab-quvvatlanadi va 128-bitli xavfsizlik darajasini ta'minlaydi.
HMAC (Hash-based Message Authentication Code) — xabarlarning simmetrik autentifikatsiyasi. Qo'llab-quvvatlanadigan hash funksiyalari: SHA-256, SHA-384, SHA-512. HMAC ma'lumotlarning yaxlitligi va haqiqiyligini tekshirish uchun ishlatiladi, masalan, webhook so'rovlarini tekshirish yoki konfiguratsiya yaxlitligini tekshirish uchun.
Barcha algoritmlar KeyGenParameterSpec.Builder.setUserAuthenticationRequired(true) orqali biometrik autentifikatsiyaga bog'lanishi mumkin. Android 11+ da setUserAuthenticationParameters() flagi mavjud bo'lib, u kalit biometrik autentifikatsiyadan keyin qayta so'rovsiz mavjud bo'lgan vaqtni (soniyalarda) belgilash imkonini beradi.
Android Keystore bilan ishlashning amaliy misollarini Kotlin'da ko'rib chiqamiz: AES kalitini yaratish, ma'lumotlarni shifrlash va imzo uchun asimmetrik juftlik yaratish.
Misol biometrik autentifikatsiyaga bog'langan 256-bitli AES/GCM kalitini yaratadi. Kalit getEncoded() orqali eksport uchun mavjud emas.
import android.security.keystore.KeyGenParameterSpec
import android.security.keystore.KeyProperties
import java.security.KeyStore
private val keyStore = KeyStore.getInstance("AndroidKeyStore").apply { load(null) }
fun generateAesKey(alias: String) {
val spec = KeyGenParameterSpec.Builder(
alias,
KeyProperties.PURPOSE_ENCRYPT or
KeyProperties.PURPOSE_DECRYPT
)
.setKeySize(256)
.setBlockModes(KeyProperties.KEY_BLOCK_MODE_GCM)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
.setUserAuthenticationRequired(true)
.setInvalidatedByBiometricEnrollment(true)
.build()
val generator = KeyGenerator.getInstance(
KeyProperties.KEY_ALGORITHM_AES,
"AndroidKeyStore"
)
generator.init(spec)
generator.generateKey()
}
Misol Android Keystore kalitidan foydalanib ma'lumotlarni shifrlaydi. Cipher kalitni alias bo'yicha oladi, AES/GCM shifrlashni boshlaydi va IV bilan birga shifrlangan ma'lumotlarni qaytaradi.
fun encryptData(alias: String, plaintext: ByteArray): ByteArray {
val cipher = Cipher.getInstance("AES/GCM/NoPadding")
val secretKey = keyStore.getKey(alias, null) as SecretKey
cipher.init(Cipher.ENCRYPT_MODE, secretKey)
val iv = cipher.getIV()
val encrypted = cipher.doFinal(plaintext)
// IV + shifrlangan ma'lumotlar
return iv + encrypted
}
fun decryptData(alias: String, ciphertextWithIv: ByteArray): ByteArray {
val iv = ciphertextWithIv.copyOfRange(0, 12)
val encrypted = ciphertextWithIv.copyOfRange(12, ciphertextWithIv.size)
val cipher = Cipher.getInstance("AES/GCM/NoPadding")
val secretKey = keyStore.getKey(alias, null) as SecretKey
val spec = GCMParameterSpec(128, iv)
cipher.init(Cipher.DECRYPT_MODE, secretKey, spec)
return cipher.doFinal(encrypted)
}
Misol StrongBox ga bog'langan Keystore'da RSA-2048 kalit juftligini yaratadi. Shaxsiy kalit imzo uchun ishlatiladi, ochiq kalit getEncoded() orqali eksport qilinishi mumkin.
fun generateRsaKeyPair(alias: String) {
val spec = KeyGenParameterSpec.Builder(
alias,
KeyProperties.PURPOSE_SIGN or
KeyProperties.PURPOSE_VERIFY
)
.setKeySize(2048)
.setSignaturePaddings(
KeyProperties.SIGNATURE_PADDING_RSA_PKCS1
)
.setDigests(KeyProperties.DIGEST_SHA256)
.setIsStrongBoxBacked(true)
.build()
val pair = KeyPairGenerator.getInstance(
KeyProperties.KEY_ALGORITHM_RSA,
"AndroidKeyStore"
).apply { init(spec) }
.generateKeyPair()
// Ochiq kalitni eksport qilish mumkin
val publicKey = pair.public // X509EncodedKeySpec
}
Android Keystore dan samarali foydalanish unumdorlikni saqlab, maksimal himoyani ta'minlaydigan qoidalarga rioya qilishni talab qiladi.
KeyGenParameterSpec dan minimal zarur parametrlar bilan foydalaning: faqat haqiqatda ishlatiladigan purpose, block modes va paddings larni belgilang. Ortiqcha parametrlar (masalan, faqat imzo uchun ishlatiladigan kalit uchun PURPOSE_ENCRYPT) qo'shimcha hujum vektorlarini yaratadi. Android imzo uchun digest ni aniq belgilashni tavsiya qiladi — SHA256 minimal qabul qilinadigan daraja (SHA1 eskirgan).
Muhim operatsiyalar uchun kalitlarni biometriyaga bog'lang: setUserAuthenticationRequired(true) kalit faqat biometrik autentifikatsiyadan keyin ishlatilishi mumkinligini kafolatlaydi. Android 11+ da bir sessiya doirasida har bir operatsiya uchun biometriyani talab qilmaslik uchun setUserAuthenticationParameters() dan vaqt chegarasi bilan (tavsiya etilgan 30–60 soniya) foydalaning. setInvalidatedByBiometricEnrollment(true) yangi barmoq izi yoki yuz qo'shilganda kalitni avtomatik o'chiradi ‒ bu eski biometrik ma'lumotlar bilan kirishni oldini oladi.
Ishga tushirish bosqichida xavfsizlik darajasini tekshiring: SECURITY_LEVEL ni aniqlash uchun KeyStore.getKeyCharacteristics() dan foydalaning. Agar qurilma faqat dasturiy Keystore ni qo'llab-quvvatlasa (SECURITY_LEVEL_SOFTWARE), qaror qabul qiling: yoki funksiyadan voz keching, yoki qo'shimcha shifrlashdan foydalaning (masalan, kalitni foydalanuvchi paroli bilan o'rash). StrongBox kafolatlanmagan bo'lsa, unga tayanmang — har doim setIsStrongBoxBacked(true) flagini belgilang va natijani getKeyCharacteristics orqali tekshiring.
Kalitlarni jadval bo'yicha yangilang: kriptografik kalitlarning tavsiya etilgan ishlash muddati bor. NIST SP 800-57 AES kalitlarini har 1–2 yilda, RSA/EC juftliklarini har 2–3 yilda almashtirishni tavsiya qiladi. Kalit aylanishi mexanizmini amalga oshiring: ilova ishga tushganda kalitning yaratilish sanasini tekshiring (KeyGenParameterSpec.Builder.setKeyValidityStart/End) va muddat tugaganda yangi kalit yarating. Eski kalit bilan shifrlangan eski ma'lumotlar shifrdan chiqarilishi va yangisi bilan qayta shifrlanishi kerak.
Keystore dan katta ma'lumotlar uchun foydalanmang: Keystore kalitlarni saqlash uchun mo'ljallangan (bir necha yuz bayt), katta fayllarni shifrlash uchun emas. Ma'lumotlarni shifrlash uchun sxemadan foydalaning: tasodifiy AES kalitini (DEK — Data Encryption Key) yarating, ma'lumotlarni ushbu kalit bilan shifrlang, DEK ni esa Keystore kaliti (KEK — Key Encryption Key) bilan shifrlang. Android EncryptedSharedPreferences aynan ushbu sxemadan foydalanadi: master kalit Keystore'da, ma'lumotlar esa AES-256 GCM bilan shifrlanadi.
Tez-tez so'raladigan savollar
Yo'q, Android Keystore shaxsiy kalit hech qachon TEE yoki StrongBox ni tark etmasligi uchun mo'ljallangan. getEncoded() metodi Keystore'da yaratilgan kalitlar uchun null qaytaradi. Kalit faqat Cipher, Signature yoki Mac API orqali ishlatilishi mumkin — xom ashyo mavjud emas.
TEE (TrustZone) — bir xil protsessorda virtual izolyatsiya, vaqt taqsimotidan foydalanadi. StrongBox — o'z CPU va xotirasiga ega alohida chip. StrongBox xavfsizroq (Common Criteria EAL 4+), lekin sekinroq va kamroq algoritmlarni qo'llab-quvvatlaydi. TEE tez-tez operatsiyalar uchun, StrongBox esa muhim kalitlar uchun mos keladi.
setIsStrongBoxBacked(true) flagi bilan kalit yaratgandan so'ng KeyStore.getKeyCharacteristics() dan foydalaning. SECURITY_LEVEL_STRONGBOX atributi apparat qo'llab-quvvatlashini tasdiqlaydi. Agar qurilma StrongBox ni qo'llab-quvvatlamasa, Keystore xatosiz TEE ga o'tadi — xavfsizlik darajasini aniq tekshirish kerak.
Keystore kalitlari ilova qurilmadan o'chirilganda avtomatik o'chiriladi. Android 10+ da ilova manifestda allowBackup=true flagiga ega bo'lsa, kalitlar saqlanib qolishi mumkin, ammo qayta o'rnatishdan keyin mavjud bo'lmaydi. Toza o'rnatishda kalitlarni qayta yaratish tavsiya etiladi.
Yo'q, Android Keystore ma'lum bir qurilmaning apparatiga bog'langan. Bir qurilmaning TEE sinda yaratilgan kalitni boshqasiga o'tkazib bo'lmaydi. Platformalararo shifrlash uchun sxemadan foydalaning: Keystore kalitni qurilmada himoya qiladi, sessiya kalitlari esa asimmetrik shifrlash bilan himoyalangan API orqali uzatiladi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.