Android-də Keystore — bu nədir, arxitektura və kriptoqrafiya

Müəllif: IT Sectr Dərc olunub: 2026-04-04 Oxuma vaxtı: 9 dəq

Android Keystore — izolasiya edilmiş icra mühitində (TEE) şifrələmə açarlarını yaradan və saxlayan kriptoqrafik provayderdir və hətta əməliyyat sistemi üçün də əlçatmazdır. AOSP Security Documentation (2025)-nın məlumatlarına görə, Keystore Google Play top-100-dəki Android tətbiqlərinin 80%-dən çoxunda tokenlərin qorunması və məlumatların şifrələnməsi üçün istifadə olunur. Android Keystore-u başa düşmək Android-də açarların təhlükəsiz saxlanması üçün kritik əhəmiyyət daşıyır.

Başlıca

  • Android Keystore — kriptoqrafik açarların aparat-izolasiya edilmiş mühitdə (TEE) yaradılması və saxlanması üçün sistem provayderi.
  • StrongBox Keymaster — öz CPU və TRNG ilə xüsusi təhlükəsizlik çipi, Common Criteria EAL 4+ sertifikatlaşdırılmışdır.
  • KeyGenParameterSpec — alqoritm, açar ölçüsü, biometrik bağlantı və etibarlılıq müddətini təyin etmək üçün konfiqurator.
  • TEE (Trusted Execution Environment) — istifadəçi məkanından girişsiz kriptoqrafik əməliyyatların yerinə yetirildiyi izolasiya edilmiş prosessor sahəsi.
  • Keystore-dan açarları çıxarmaq mümkün deyil — şəxsi açar heç vaxt TEE və ya StrongBox-u tərk etmir, hətta tətbiqin tərtibatçısı da onu oxuya bilməz.

Android-də Keystore nədir?

Android Keystore — qorunan mühitdə kriptoqrafik açarların yaradılması, saxlanması və istifadəsi üçün API təmin edən Android platformasının sistem komponentidir. Proqram kriptoqrafik kitabxanalarından (Bouncy Castle, Conscrypt) fərqli olaraq, Keystore şəxsi açarların heç vaxt izolasiya edilmiş icra sahəsini tərk etməyəcəyinə zəmanət verir.

Keystore Android 4.3-də (API 18) RSA dəstəyi ilə proqram provayderi kimi meydana çıxdı. Android 6.0-dan (API 23) başlayaraq, Keystore Keymaster Hardware Abstraction Layer (HAL) vasitəsilə aparat dəstəyi aldı və kriptoqrafik əməliyyatları uyğun cihazlarda Trusted Execution Environment (TEE)-yə həvalə edir. Android Compatibility Definition Document (2025)-a görə, Android 9+ olan bütün cihazlar TEE və ya StrongBox vasitəsilə aparat Keystore-nı dəstəkləməlidir.

Keystore-dakı açarlar alias (ləqəb) ilə müəyyən edilir — açarın yaradılması və ya yüklənməsi zamanı ötürülən sətir. Keystore açarın xammalını əldə etməyə imkan vermir: getEncoded() metodu Keystore-da yaradılmış açarlar üçün null qaytarır. Bu, proqram açarlarından fundamental fərqdir — hücumçu cihaz üzərində tam nəzarət olsa belə şəxsi açarı çıxara bilməz.

Keystore Android-in digər təhlükəsizlik mexanizmləri ilə inteqrasiya olunub: biometrik autentifikasiya (BiometricPrompt), fayl səviyyəsində şifrələmə (File-Based Encryption) və SafetyNet / Play Integrity doğrulama funksiyaları. Açarlar müəyyən şərtlər daxilinde avtomatik silinmək üçün konfiqurasiya edilə bilər: kod-parolun silinməsi, yeni barmaq izinin əlavə edilməsi və ya müddətin bitməsi ilə.

Android Keystore Arxitekturası

Android Keystore arxitekturası aparat qorunma dərəcəsinə görə fərqlənən üç tətbiq səviyyəsini əhatə edir. Səviyyə cihazın aparat imkanlarından asılıdır.

Hardware-backed Keystore (TEE)

TEE (Trusted Execution Environment) — eyni prosessorda əsas ŞİS ilə paralel işləyən izolasiya edilmiş sahədir. TEE ARM TrustZone texnologiyasından istifadə edir, bu da fiziki prosessor nüvəsini iki virtual hissəyə ayırır: Normal World (Android) və Secure World (TEE). Secure World-dəki kod Normal World-ə əlçatmayan yaddaş və periferiya cihazlarına çıxış əldə edə bilər.

Tətbiq Keystore vasitəsilə kriptoqrafik əməliyyat çağırdıqda, sorğu Keymaster HAL vasitəsilə TEE-yə ötürülür və əməliyyat aparat tərəfindən yerinə yetirilir. Nəticə tətbiqə qaytarılır, lakin şəxsi açar TEE-nin qorunan yaddaşında qalır. TEE GlobalPlatform TEE Protection Profile-ə uyğun sertifikatlaşdırılıb və TrustZone dəstəkləyən prosessorlu cihazlarda Android 9+ üçün məcburi tələbdir.

TEE AES/GCM (128, 256 bit), RSA (2048, 4096 bit), EC (P-256, P-384, P-521) və HMAC-SHA256 alqoritmlərini dəstəkləyir. TEE-nin məhsuldarlığı proqram kriptoqrafiyasından aşağıdır (20–40% aşağı), lakin tipik əməliyyatlar üçün (JWT imzası, sessiya açarının şifrədən açılması) gecikmə 10–50 ms-dən çox olmur.

StrongBox Keymaster

StrongBox — əsas prosessordan fiziki olaraq ayrılmış xüsusi təhlükəsizlik çipi. TEE-dən fərqli olaraq (Android ilə prosessor vaxtını paylaşır), StrongBox öz CPU, operativ yaddaş, True Random Number Generator (TRNG) və qorunan yaddaşa (One-Time Programmable memory) malikdir. StrongBox Common Criteria EAL 4+ və Secure IC Protection Profile üzrə sertifikatlaşdırılıb.

StrongBox Android 9+ olan cihazlarda müvafiq çip olduqda ələgatəndir (məsələn, Google Pixel-də Titan M, Samsung Galaxy-də Knox). Tərtibatçı StrongBox-u KeyGenParameterSpec-də setIsStrongBoxBacked(true) bayrağı ilə aktivləşdirir. Aparat dəstəyi olmadıqda bayraq nəzərə alınmır və Keystore TEE-yə keçir.

StrongBox məhdudiyyətləri: məhdud alqoritm dəsti (AES-256, EC P-256, HMAC-SHA256), əməliyyat növbəsi — eyni anda birdən çox deyil, əməliyyatların sayı çipin resursları ilə məhdudlaşır. StrongBox yüksək yüklənmə ssenariləri üçün nəzərdə tutulmayıb — tez-tez əməliyyatlar üçün TEE-dən, kritik açarlar üçün isə StrongBox-dan istifadə edin (master şifrələmə açarları, imza açarları).

Software-based Keystore

Software-based Keystore — TEE və ya StrongBox aparat dəstəyi olmayan cihazlarda istifadə edilən proqram tətbiqidir. Açarlar fayl sistemində şifrələnmiş formada saxlanılır, lakin şəxsi açar müvəqqəti olaraq operativ yaddaşda şifrədən açıla bilər. Proqram Keystore daha az təhlükəsizdir — root girişi olan hücumçu yaddaşdakı açarı ələ keçirə bilər.

Android 12-dən (API 31) etibarən, Google bütün yeni cihazlar üçün aparat Keystore dəstəyi tələb edir. Android 9–11 olan cihazlar büdcə modellərində proqram Keystore-a malik ola bilər. Tərtibatçı KeyStore.getKeyCharacteristics() vasitəsilə qorunma səviyyəsini yoxlaya bilər — SECURITY_LEVEL_TRUSTED_ENVIRONMENT və ya SECURITY_LEVEL_STRONGBOX atributu aparat qorunmasını təsdiqləyir.

Dəstəklənən alqoritmlər və funksiyalar

Android Keystore açar növündən asılı olaraq kateqoriyalara bölünmüş geniş kriptoqrafik alqoritmlər dəstini dəstəkləyir. Alqoritm seçimi məhsuldarlığa, uyğunluğa və təhlükəsizlik səviyyəsinə təsir edir.

AES (Advanced Encryption Standard) — cihazda məlumatların qorunması üçün simmetrik şifrələmə. Tövsiyə olunan rejim: AES/GCM/NoPadding (256 bit). GCM autentifikasiya edilmiş şifrələmə (AEAD) təmin edir — şifrələnmiş məlumatların bütövlüyünün yoxlanılması. IV (İlkinləşdirmə Vektoru) ölçüsü: GCM üçün 12 bayt. AES/ECB-dən istifadə etməyin — lazımi qorunma təmin etmir.

RSA (Rivest–Shamir–Adleman) — sessiya açarlarının qorunması və rəqəmsal imza üçün asimmetrik şifrələmə. Tövsiyə olunan ölçü: 2048 və ya 4096 bit. Rejimlər: RSA/ECB/PKCS1Padding (şifrələmə) və RSA/ECB/PKCS1Sign (imza). RSA 1024 köhnəlmiş hesab olunur və yeni tətbiqlər üçün tövsiyə edilmir (NIST SP 800-131A Rev. 2).

EC (Elliptic Curve) — imza və açar mübadiləsi üçün elliptik əyrilər üzərində asimmetrik kriptoqrafiya. Dəstəklənən əyrilər: secp256r1 (P-256, məcburi), secp384r1 (P-384) və secp521r1 (P-521). EC eyni təhlükəsizliyi əhəmiyyətli dərəcədə kiçik açar ölçüsü ilə təmin edir. P-256 əksər ssenarilər üçün tövsiyə olunur: bütün cihazlar tərəfindən dəstəklənir və 128-bit təhlükəsizlik səviyyəsi təmin edir.

HMAC (Hash-based Message Authentication Code) — mesajların simmetrik autentifikasiyası. Dəstəklənən heş funksiyaları: SHA-256, SHA-384, SHA-512. HMAC məlumatların bütövlüyünün və həqiqiliyinin yoxlanılması üçün istifadə olunur, məsələn webhook sorğularının doğrulanması və ya konfiqurasiyanın bütövlüyünün yoxlanılması üçün.

Bütün alqoritmlər KeyGenParameterSpec.Builder.setUserAuthenticationRequired(true) vasitəsilə biometrik autentifikasiyaya bağlana bilər. Android 11+-da setUserAuthenticationParameters() bayrağı mövcuddur və açarın biometrik autentifikasiyadan sonra təkrari sorğu olmadan ələgatər olduğu müddəti (saniyələrlə) təyin etməyə imkan verir.

Kod nümunələri: açarların yaradılması və istifadəsi

Android Keystore ilə işləmənin praktik nümunələrinə Kotlin-də baxaq: AES açarının yaradılması, məlumatların şifrələnməsi və imza üçün asimmetrik cütlüyün yaradılması.

Keystore-da AES açarının yaradılması

Nümunə biometrik autentifikasiyaya bağlı 256-bit AES/GCM açarı yaradır. Açar getEncoded() vasitəsilə ixrac üçün əlçatmazdır.

kotlin
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()
}

AES/GCM məlumatlarının şifrələnməsi

Nümunə Android Keystore-dan açardan istifadə edərək məlumatları şifrələyir. Cipher açarı alias üzrə əldə edir, AES/GCM şifrələməni başlatdırır və IV ilə birlikdə şifrələnmiş məlumatları qaytarır.

kotlin
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 + şifrələnmiş məlumatlar
    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)
}

Imza üçün RSA cütlüyünün yaradılması

Nümunə StrongBox-a bağlı Keystore-da RSA-2048 açar cütlüyü yaradır. Şəxsi açar imza üçün istifadə olunur, açıq açar getEncoded() vasitəsilə ixrac edilə bilər.

kotlin
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()

    // Açıq açarı ixrac etmək olar
    val publicKey = pair.public // X509EncodedKeySpec
}

Android Keystore ilə işləməyin ən yaxşı təcrübələri

Android Keystore-dan səmərəli istifadə məhsuldarlığı qoruyaraq maksimal qorunma təmin edən qaydalara riayət etməyi tələb edir.

KeyGenParameterSpec-dən minimal zəruri parametrlərlə istifadə edin: yalnız həqiqətən istifadə olunan purpose, block modes və paddings-ləri göstərin. Həddindən artıq parametrlər (məsələn, yalnız imza üçün istifadə olunan açar üçün PURPOSE_ENCRYPT) əlavə hücum vektorları yaradır. Android imza üçün açıq şəkildə digest təyin etməyi tövsiyə edir — SHA256 minimal məqbul səviyyədir (SHA1 köhnəlmişdir).

Kritik əməliyyatlar üçün açarları biometriyaya bağlayın: setUserAuthenticationRequired(true) açarın yalnız biometrik autentifikasiyadan sonra istifadə edilə biləcəyinə zəmanət verir. Android 11+-da bir sessiya çərçivəsində hər əməliyyat üçün biometrik tələb etməmək üçün setUserAuthenticationParameters()-dən vaxt limiti ilə (tövsiyə olunan 30–60 saniyə) istifadə edin. setInvalidatedByBiometricEnrollment(true) yeni barmaq izi və ya üz əlavə edildikdə açarı avtomatik silir — bu köhnə biometrik məlumatlarla girişin qarşısını alır.

Başlatma mərhələsində təhlükəsizlik səviyyəsini yoxlayın: SECURITY_LEVEL müəyyən etmək üçün KeyStore.getKeyCharacteristics() istifadə edin. Cihaz yalnız proqram Keystore-nı dəstəkləyirsə (SECURITY_LEVEL_SOFTWARE), qərar verin: ya funksionallıqdan imtina edin, ya da əlavə şifrələmədən istifadə edin (məsələn, açarı istifadəçi şifrəsi ilə bükmək). StrongBox zəmanətli deyilsə, ona güvənməyin — həmişə setIsStrongBoxBacked(true) bayrağını təyin edin və nəticəni getKeyCharacteristics vasitəsilə yoxlayın.

Açarları cədvəl üzrə yeniləyin: kriptoqrafik açarların tövsiyə olunan ömrü var. NIST SP 800-57 AES açarlarının hər 1–2 ildə, RSA/EC cütlüklərinin hər 2–3 ildə dəyişdirilməsini tövsiyə edir. Açar rotasiyası mexanizmini tətbiq edin: tətbiq başdaşdıqda açarın yaradılma tarixini yoxlayın (KeyGenParameterSpec.Builder.setKeyValidityStart/End) və müddət bitdikdə yeni açar yaradın. Köhnə açarla şifrələnmiş köhnə məlumatlar şifrədən açılmalı və yenisi ilə yenidən şifrələnməlidir.

Keystore-dan böyük məlumatlar üçün istifadə etməyin: Keystore açarların saxlanması üçün nəzərdə tutulub (bir neçə yüz bayt), böyük faylların şifrələnməsi üçün deyil. Məlumatların şifrələnməsi üçün sxemdən istifadə edin: təsadüfi AES açarı (DEK — Data Encryption Key) yaradın, məlumatları bu açarla şifrələyin, DEK-i isə Keystore açarı (KEK — Key Encryption Key) ilə şifrələyin. Android EncryptedSharedPreferences məhz bu sxemdən istifadə edir: master açar Keystore-da, məlumatlar isə AES-256 GCM ilə şifrələnir.

Tez-tez verilən suallar

Android Keystore-dan şəxsi açar əldə etmək mümkündürmü?

Xeyr, Android Keystore şəxsi açarın heç vaxt TEE və ya StrongBox-u tərk etməməsi üçün nəzərdə tutulmuşdur. getEncoded() metodu Keystore-da yaradılmış açarlar üçün null qaytarır. Açar yalnız Cipher, Signature və ya Mac API vasitəsilə istifadə edilə bilər — xammal əlçatmazdır.

TEE və StrongBox arasındakı fərq nədir?

TEE (TrustZone) — eyni prosessorda virtual izolasiya, vaxt bölgüsündən istifadə edir. StrongBox — öz CPU və yaddaşı olan ayrıca çip. StrongBox daha təhlükəsizdir (Common Criteria EAL 4+), lakin daha yavaşdır və daha az alqoritm dəstəkləyir. TEE tez-tez əməliyyatlar üçün, StrongBox isə kritik açarlar üçün uyğundur.

Cihazın StrongBox-u dəstəklədiyini necə yoxlamaq olar?

setIsStrongBoxBacked(true) bayrağı ilə açar yaratdıqdan sonra KeyStore.getKeyCharacteristics()-dən istifadə edin. SECURITY_LEVEL_STRONGBOX atributu aparat dəstəyini təsdiqləyir. Cihaz StrongBox-u dəstəkləmirsə, Keystore xətasız olaraq TEE-yə keçir — təhlükəsizlik səviyyəsini açıq şəkildə yoxlamaq lazımdır.

Tətbiq silindikdə açarlara nə olur?

Keystore-dakı açarlar tətbiq silindikdə avtomatik silinir. Android 10+-da tətbiqin manifestində allowBackup=true bayrağı varsa, açarlar qoruna bilər, lakin yenidən quraşdırmadan sonra əlçatmaz olacaq. Təmiz quraşdırma zamanı açarların yenidən yaradılması tövsiyə olunur.

Bir açardan bir neçə cihazda istifadə etmək mümkündürmü?

Xeyr, Android Keystore müəyyən cihazın aparatına bağlıdır. Bir cihazın TEE-sində yaradılmış açar digərinə ötürülə bilməz. Platformalararası şifrələmə üçün sxemdən istifadə edin: Keystore cihazda açarı qoruyur, sessiya açarları isə asimmetrik şifrələmə ilə qorunan API vasitəsilə ötürülür.

Nəticələr

  • Android Keystore — kriptoqrafik açarların aparat-izolasiya edilmiş mühitdə (TEE və ya StrongBox) qorunması üçün sistem provayderi.
  • TEE (TrustZone) — eyni prosessorda virtual izolasiya, TrustZone olan cihazlarda Android 9+ üçün məcburidir.
  • StrongBox — Common Criteria EAL 4+ sertifikatlı xüsusi təhlükəsizlik çipi, setIsStrongBoxBacked(true) ilə aktivləşdirilir.
  • KeyGenParameterSpec — açar parametrlərinin konfiqurasiyası üçün mərkəzi sinif: alqoritm, ölçü, biometrik bağlantı və rotasiya.
  • Açarları çıxarmaq mümkün deyil — şəxsi material getEncoded() vasitəsilə əlçatmazdır, əməliyyatlar TEE/StrongBox daxilində yerinə yetirilir.
  • Tövsiyə olunan alqoritmlər — şifrələmə üçün AES/GCM/NoPadding (256 bit), imza üçün EC P-256, asimmetrik ssenarilər üçün RSA 2048.
  • KEK/DEK sxemi — Keystore məlumat şifrələmə açarlarını qorumaq üçün master açarı saxlayır, məhsuldarlıq və təhlükəsizliyi təmin edir.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun