Secure Storage (təhlükəsiz saxlama) — cihazda məxfi məlumatların qorunması üçün metod və texnologiyalar kompleksi: tokenlər, şifrələmə açarları, ödəniş məlumatları və istifadəçi şəxsi məlumatları. OWASP Mobile Top 10 (2024) məlumatına görə, təhlükəsiz olmayan məlumat saxlanması ən kritik risklər arasında ilk üçlükdədir. Təhlükəsiz saxlamanın düzgün tətbiqi cihaza fiziki giriş olsa belə məlumat sızmasının qarşısını alır.
Əsas məqamlar
Secure Storage — mobil tətbiqin məxfi məlumatlarının digər tətbiqlər, zərərli proqramlar və cihaza fiziki girişi olan kiberhücumçu üçün əlçatmaz olmasını təmin edən saxlama praktikası. Adi saxlamadan fərqli olaraq, Secure Storage şifrələmə, təcrid və aparat qorunmasından istifadə edir.
Bütün məlumatlar Secure Storage tələb etmir: profil şəkilləri və ya xəbər keşi adi fayl sistemində saxlanıla bilər. Lakin şifrələmə açarları, autentifikasiya tokenləri, ödəniş məlumatları, şəxsi açarlar və biometrik şablonlar qorunmalıdır. Google Security Blog (2025) məlumatına görə, mobil tətbiqlərdəki zəifliklərin 67%-i sirlərin açıq şəkildə saxlanması ilə bağlıdır.
Hər bir mobil platforma öz Secure Storage mexanizmlərini təqdim edir: Android — Keystore və EncryptedSharedPreferences, iOS — Keychain və Data Protection API. Bu mexanizmlər aparat təhlükəsizlik modulları (TEE, Secure Enclave) ilə inteqrasiya olunub və cihaz jailbreak və ya root edilsə belə məlumatların oxunmasının qarşısını alır.
Secure Storage metodunun düzgün seçimi məlumat növündən, istifadə ssenarisindən və performans tələblərindən asılıdır. Hər bir mexanizmin arxitekturasını başa düşmək tərtibatçıya düzgün arxitektura qərarı verməyə imkan verir.
Android platforması aparat açar anbarından şifrələnmiş SharedPreferences-a qədər bir neçə məlumat qorunması səviyyəsi təqdim edir. Seçim məlumatların həssaslığından və performans tələblərindən asılıdır.
Android Keystore — aparat qorunmasını dəstəkləyən cihazlarda təcrid olunmuş icra mühitində (TEE — Trusted Execution Environment) açarları yaradan və saxlayan kriptoqrafik provayder. Açarlar heç vaxt TEE-ni tərk etmir: kriptoqrafik əməliyyatlar hətta əməliyyat sistemi üçün də əlçatmaz olan qorunan sahə daxilində yerinə yetirilir.
Android 9-dan (API 28) etibarən Keystore StrongBox Keymaster-ı dəstəkləyir — öz CPU-su, True Random Number Generator (TRNG) və qorunan yaddaşı olan xüsusi təhlükəsizlik çipi. StrongBox Common Criteria EAL 4+ sertifikatına malikdir və Android-də açarların saxlanmasının ən təhlükəsiz səviyyəsidir. StrongBox-dan istifadə etmək üçün açar yaradılarkən inStrongBox() bayrağını açıq şəkildə göstərmək lazımdır.
Keystore aşağıdakı alqoritmləri dəstəkləyir: AES/GCM/NoPadding (256 bit), EC (secp256r1, secp384r1), RSA (2048–4096 bit) və HMAC-SHA256. Bütün açarlar setUserAuthenticationRequired(true) vasitəsilə biometrik autentifikasiyaya bağlana bilər.
EncryptedSharedPreferences — AndroidX Security paketindən olan kitabxana SharedPreferences API vasitəsilə saxlanılan bütün məlumatları avtomatik şifrələyir. Dəyərlər AES-256 GCM açarı ilə, açarlar isə AES-256 SIV (sintetik IV) ilə şifrələnir ki, bu da açar adlarına lüğət hücumlarının qarşısını alır.
Əsas şifrələmə açarı Android Keystore-da saxlanılır və iki səviyyəli qorunma təmin edir: Keystore master-açarı qoruyur, EncryptedSharedPreferences isə məlumatları qoruyur. Tipik məlumatlar (token, parametrlər) üçün şifrələmə performansı oxuma/yazma əməliyyatı başına 5 ms-dən azdır ki, bu da kitabxananı istifadəçi ssenariləri üçün uyğun edir.
EncryptedSharedPreferences böyük həcmli məlumatlar (5 MB-dan çox) üçün nəzərdə tutulmayıb — belə hallarda SQLCipher və ya şifrələmə ilə Room vasitəsilə şifrələnmiş verilənlər bazasından istifadə edin.
SQLCipher — bütün verilənlər bazasını AES-256-CBC istifadə edərək səhifə-səhifə şifrələyən SQLite genişləndirməsi. Verilənlər bazasının hər bir səhifəsi PBKDF2 vasitəsilə master-paroldan əldə edilən ayrıca açarla şifrələnir. SQLCipher məlumatların ölçüsündən asılı olaraq performansa təxminən 5–15% yük əlavə edir.
Android ilə inteqrasiya standart SQLiteOpenHelper ilə uyğun API təqdim edən net.zetetic:android-database-sqlcipher kitabxanası vasitəsilə həyata keçirilir. SQLCipher üçün parol kodda və ya SharedPreferences-da deyil, Keystore-da saxlanılması tövsiyə olunur.
iOS platforması Keychain Services — əsas qorunan anbar, həmçinin OS səviyyəsində faylların şifrələnməsi üçün Data Protection API təqdim edir.
Keychain — iOS-un parolları, şifrələmə açarlarını, sertifikatları və qeydləri saxladığı şifrələnmiş SQLite verilənlər bazasıdır. Keychain-in hər bir elementi (SecItem) cihaz üçün unikal olan aparat açarından istifadə edərək şifrələnmiş formada saxlanılır. Elementə giriş ACL (Access Control List) vasitəsilə idarə olunur və biometrik autentifikasiya (Face ID, Touch ID) və ya parol tələb edə bilər.
Keychain məlumatların nə vaxt əlçatan olduğunu müəyyən edən qorunma siniflərini (Protection Class) dəstəkləyir: kSecAttrAccessibleWhenUnlockedThisDeviceOnly — məlumatlar yalnız cihaz açıq olduqda əlçatandır və ehtiyat nüsxə zamanı köçürülmür. Bu sinif autentifikasiya tokenlərinin saxlanması üçün əksər ssenarilərdə tövsiyə olunur.
iOS 15+-da Secure Enclave vasitəsilə aparat açarlarını dəstəkləyən Security framework mövcuddur — kriptoqrafik əməliyyatları emal edən və şəxsi açarları təcrid olunmuş yaddaşda saxlayan xüsusi Apple prosessoru. Secure Enclave çipdən çıxarılması mümkün olmayan açarların yaradılması üçün ECDSA (secp256r1) və ECDH alqoritmlərini dəstəkləyir.
Data Protection — cihazın paroluna bağlı açardan istifadə edərək fayl sistemi səviyyəsində (APFS) hər bir faylı şifrələyən iOS mexanizmidir. Tərtibatçı fayl yaradılarkən NSFileProtectionType atributu vasitəsilə qorunma səviyyəsini təyin edir: NSFileProtectionComplete — fayl yalnız cihaz açıq olduqda əlçatandır.
Data Protection iOS 5+ olan bütün cihazlarda parol təyin olunubsa avtomatik işləyir. Şifrələmə Apple prosessorunun Dedicated AES Engine vasitəsilə aparat səviyyəsində həyata keçirilir ki, bu da yüksək performans təmin edir — şifrələmə gecikməsi istifadəçi üçün praktiki olaraq hiss olunmaz. Tətbiqdə qorunmanı aktiv etmək üçün FileManager vasitəsilə fayl yaradılarkən qorunma atributunu təyin etmək kifayətdir.
Data Protection açarların saxlanması üçün Keychain-i əvəz etmir — faylların, Core Data verilənlər bazalarının və digər böyük həcmli məlumatların şifrələnməsi üçün istifadə olunur. Keychain (açarlar üçün) və Data Protection (fayllar üçün) kombinasiyası iOS-da tam təhlükəsiz saxlama dövrünü təmin edir.
Secure Storage-un Android və iOS-un daxili API-lərindən istifadə edərək praktik nümunələrini nəzərdən keçirək.
Nümunə Android Keystore-dan master-açar ilə EncryptedSharedPreferences-in inisiallaşdırılmasını göstərir. Sonrakı bütün oxuma və yazma əməliyyatları avtomatik şifrələnir və deşifrələnir.
import androidx.security.crypto.EncryptedSharedPreferences
import androidx.security.crypto.MasterKey
val masterKey = MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
val prefs = EncryptedSharedPreferences.create(
context,
"secure_prefs",
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
prefs.edit()
.putString("auth_token", "eyJhbGciOiJIUzI1NiJ9...")
.apply()
Nümunə Security framework-dən istifadə edərək iOS Keychain-də məlumatların saxlanması və oxunmasını nümayiş etdirir. Kod maksimum qorunma üçün kSecAttrAccessibleWhenUnlockedThisDeviceOnly-dan istifadə edir.
import Security
func saveToKeychain(key: String, data: Data) {
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: key,
kSecValueData as String: data,
kSecAttrAccessible as String:
kSecAttrAccessibleWhenUnlockedThisDeviceOnly
]
SecItemDelete(query as CFDictionary)
SecItemAdd(query as CFDictionary, nil)
}
func readFromKeychain(key: String) -> Data? {
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: key,
kSecReturnData as String: true,
kSecMatchLimit as String: kSecMatchLimitOne
]
var result: AnyObject?
let status = SecItemCopyMatching(
query as CFDictionary, &result
)
return status == errSecSuccess ? result as? Data : nil
}
Android Keystore-da saxlanan parol ilə SQLCipher vasitəsilə şifrələnmiş SQLite verilənlər bazasına qoşulma nümunəsi.
import net.sqlcipher.database.SQLiteDatabase
import net.sqlcipher.database.SQLiteOpenHelper
class SecureDBHelper(context: Context) :
SQLiteOpenHelper(context, "secure.db", null, 1) {
private val password = getKeyFromKeystore()
override fun onCreate(db: SQLiteDatabase) {
db.execSQL("CREATE TABLE tokens (id INTEGER PRIMARY KEY, value TEXT)")
}
override fun onUpgrade(
db: SQLiteDatabase, oldVersion: Int, newVersion: Int
) {
onCreate(db)
}
}
// Istifadə: açarkən parol daxil edin
val helper = SecureDBHelper(context)
val db = helper.getWritableDatabase(password)
Secure Storage-un düzgün istifadəsi tərtibatçıların tipik səhvlərinin qarşısını alan bir neçə əsas prinsipə riayət etməyi tələb edir.
Məlumatların təsnifatını müəyyən edin: hansı məlumatlar aparat qorunması (Keystore / Secure Enclave), hansılar — OS səviyyəsində şifrələmə (EncryptedSharedPreferences / Data Protection), hansılar isə adi fayl sistemində saxlanıla bilər. Autentifikasiya tokenləri, şəxsi açarlar və ödəniş məlumatları — yalnız aparat səviyyəsi. İstifadəçi parametrləri (mövzu, dil) — EncryptedSharedPreferences kifayətdir. Seans məlumatları (müvəqqəti keşlər) yaddaşda və ya müvəqqəti kataloqda saxlanıla bilər.
Heç vaxt sirləri kodda saxlamayın: API açarları, parollar və ya seed ifadələri olan sətirləri mənbə kodunda saxlamaq ən kobud təhlükəsizlik səhvidir. İstənilən reverse engineering bu məlumatları dərhal üzə çıxaracaq. Açarlar üçün Keystore-dan, konfiqurasiya üçün isə tətbiq işə salındıqda server yükləməsindən (remote config) istifadə edin.
Kritik əməliyyatlar üçün biometrik bağlamadan istifadə edin: Android Keystore və iOS Keychain açarların biometrik autentifikasiyaya bağlanmasını dəstəkləyir. Açara hər müraciətdə sistem Face ID, Touch ID və ya Android biometriyasını (BiometricPrompt) tələb edir. Bu, kiberhücumçunun cihaz üzərində tam nəzarəti olsa belə, saxlanılmış məlumatlardan istifadə edə bilməyəcəyinə zəmanət verir.
Qorunmanı test edin: təhlükəsizlik analizi alətlərindən istifadə edin — statik analiz üçün MobSF (Mobile Security Framework), runtime testi üçün objection və qorunmanın yan keçilməsi üçün Frida. Root və ya jailbreak-dən sonra məlumatların əlçatmaz olduğunu yoxlayın. Android root girişini SafetyNet Attestation və ya Play Integrity API vasitəsilə, iOS — Secure Enclave-in bütövlüyünü yoxlamaqla təsdiq etməyə imkan verir.
Kriptoqrafik kitabxanaları mütəmadi yeniləyin: şifrələmə kitabxanalarında zəifliklər mütəmadi aşkarlanır. AndroidX Security, SQLCipher və Keychain wrappers üçün CVE-ləri izləyin. Dependabot və ya Renovate vasitəsilə yeni versiyalar haqqında avtomatik bildiriş sistemi tətbiq edin.
Apple Security Research (2025) məlumatına görə, Secure Storage-un düzgün tətbiqi cihazdan məlumat oğurluğuna yönəlmiş hücumların 96%-nin qarşısını alır. Qalan 4% — fiziki girişi olan hücumlar və sıfırıncı gün eksploitləridir ki, onlara qarşı biometrik bağlama effektivdir.
Tez-tez verilən suallar
iOS Keychain — ACL vasitəsilə giriş nəzarəti ilə parolların, açarların və sertifikatların saxlanması üçün şifrələnmiş verilənlər bazasıdır. Android Keystore — təcrid olunmuş mühitdə (TEE/StrongBox) açarları yaradan və saxlayan, şəxsi açarın çıxarılmasına imkan verməyən kriptoqrafik provayderdir.
EncryptedSharedPreferences dəyərlərin şifrələnməsi üçün AES-256 GCM, açarların şifrələnməsi üçün isə AES-256 SIV istifadə edir. Əsas açar Android Keystore-da saxlanılır və iki səviyyəli qorunma təmin edir. Əlavə olaraq bütövlüyün yoxlanılması üçün HMAC-SHA256 istifadə olunur.
Bəli, HTTPS məlumatları yalnız ötürmə kanalında qoruyur. Cihazda məlumat deşifrələnmədən sonra açıq formada saxlanılır. Kiberhücumçu cihaza fiziki giriş əldə edərsə və ya zərərli proqram quraşdırarsa, HTTPS saxlanılan məlumatları qorumayacaq. Həmişə məlumatları saxlama səviyyəsində şifrələyin.
Android Keystore-dan setUnlockedDeviceRequired(true) bayrağı ilə istifadə edin ki, bu da root edilmiş cihazlarda açarlara girişi bloklayır. Əlavə olaraq Play Integrity API vasitəsilə bütövlüyü yoxlayın və istinad dəyərlərindən kənarlaşma olduqda anbardan bütün sirləri təmizləyin.
Xeyr, UserDefaults məlumatları sandbox daxilində plist faylında açıq formada saxlayır. Reverse engineering alətləri olan istənilən tətbiq (ehtiyat nüsxə və ya jailbreak vasitəsilə) tokenləri oxuya bilər. Yalnız Keychain — iOS-da sirlərin saxlanması üçün yeganə təhlükəsiz yerdir.
Nəticə
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.
Həm də oxuyun