Secure Storage (xavfsiz saqlash) — qurilmadagi maxfiy ma'lumotlarni himoya qilish usullari va texnologiyalari majmui: tokenlar, shifrlash kalitlari, to'lov ma'lumotlari va foydalanuvchilarning shaxsiy ma'lumotlari. OWASP Mobile Top 10 (2024) ma'lumotlariga ko'ra, ma'lumotlarning xavfsiz saqlanmasligi eng muhim xatarlar uchligiga kiradi. Xavfsiz saqlash ning to'g'ri tatbiqi qurilmaga jismoniy kirish bo'lganda ham ma'lumotlar sizib chiqishining oldini oladi.
Asosiy fikrlar
Secure Storage — mobil ilovaning maxfiy ma'lumotlarini boshqa ilovalar, zararli dasturlar va qurilmaga jismoniy kirish imkoniga ega tajovuzkor uchun erishib bo'lmaydigan qilib saqlash amaliyoti. Oddiy saqlashdan farqli o'laroq, Secure Storage shifrlash, izolyatsiya va apparat himoyasidan foydalanadi.
Barcha ma'lumotlar Secure Storage talab qilmaydi: profil rasmlari yoki yangiliklar keshini oddiy fayl tizimida saqlash mumkin. Biroq shifrlash kalitlari, autentifikatsiya tokenlari, to'lov ma'lumotlari, shaxsiy kalitlar va biometrik shablonlar himoya qilinishi kerak. Google Security Blog (2025) ma'lumotlariga ko'ra, mobil ilovalardagi zaifliklarning 67% sirlarni ochiq holda saqlash bilan bog'liq.
Har bir mobil platforma o'z Secure Storage mexanizmlarini taqdim etadi: Android — Keystore va EncryptedSharedPreferences, iOS — Keychain va Data Protection API. Bu mexanizmlar apparat xavfsizlik modullari (TEE, Secure Enclave) bilan integratsiyalangan va qurilma jailbreak yoki root qilingan taqdirda ham ma'lumotlarni o'qib bo'lmasligini kafolatlaydi.
Secure Storage usulini to'g'ri tanlash ma'lumot turiga, foydalanish stsenariysiga va ishlash talablariga bog'liq. Har bir mexanizm arxitekturasini tushunish dasturchiga to'g'ri arxitektura qarorini qabul qilish imkonini beradi.
Android platformasi apparat kalit omboridan shifrlangan SharedPreferences-gacha bir necha ma'lumot himoyasi darajasini taqdim etadi. Tanlov ma'lumotlarning nozikligi va ishlash talablariga bog'liq.
Android Keystore — apparat himoyasini qo'llab-quvvatlovchi qurilmalarda izolyatsiyalangan ijro muhitida (TEE — Trusted Execution Environment) kalitlarni yaratadigan va saqlaydigan kriptografik provayder. Kalitlar hech qachon TEE-ni tark etmaydi: kriptografik operatsiyalar hatto operatsion tizim uchun ham erishib bo'lmaydigan himoyalangan hudud ichida bajariladi.
Android 9 (API 28) dan boshlab Keystore StrongBox Keymaster-ni qo'llab-quvvatlaydi — o'z CPU, True Random Number Generator (TRNG) va himoyalangan xotirasiga ega maxsus xavfsizlik chipi. StrongBox Common Criteria EAL 4+ sertifikatiga ega va Android-da kalit saqlashning eng xavfsiz darajasidir. StrongBox-dan foydalanish uchun kalit yaratishda inStrongBox() bayrog'ini aniq ko'rsatish kerak.
Keystore quyidagi algoritmlarni qo'llab-quvvatlaydi: AES/GCM/NoPadding (256 bit), EC (secp256r1, secp384r1), RSA (2048–4096 bit) va HMAC-SHA256. Barcha kalitlar setUserAuthenticationRequired(true) orqali biometrik autentifikatsiyaga ulanishi mumkin.
EncryptedSharedPreferences — AndroidX Security paketidagi kutubxona bo'lib, SharedPreferences API orqali saqlangan barcha ma'lumotlarni avtomatik shifrlaydi. Qiymatlar AES-256 GCM kaliti bilan, kalitlar esa AES-256 SIV (sintetik IV) bilan shifrlanadi, bu kalit nomlariga lug'at hujumlarining oldini oladi.
Asosiy shifrlash kaliti Android Keystore-da saqlanadi va ikki darajali himoyani ta'minlaydi: Keystore master-kalitni himoya qiladi, EncryptedSharedPreferences esa ma'lumotlarni himoya qiladi. Oddiy ma'lumotlar (token, sozlamalar) uchun shifrlash samaradorligi o'qish/yozish operatsiyasi uchun 5 ms dan kam, bu kutubxonani foydalanuvchi stsenariylari uchun mos qiladi.
EncryptedSharedPreferences katta hajmdagi ma'lumotlar (5 MB dan ortiq) uchun mo'ljallanmagan — bunday hollarda SQLCipher yoki shifrlash bilan Room orqali shifrlangan ma'lumotlar bazasidan foydalaning.
SQLCipher — butun ma'lumotlar bazasini AES-256-CBC yordamida sahifa-sahifa shifrlaydigan SQLite kengaytmasi. Ma'lumotlar bazasining har bir sahifasi PBKDF2 orqali master-paroldan olingan alohida kalit bilan shifrlanadi. SQLCipher ma'lumot hajmiga qarab 5–15% ishlash yukini qo'shadi.
Android bilan integratsiya standart SQLiteOpenHelper bilan mos API taqdim etadigan net.zetetic:android-database-sqlcipher kutubxonasi orqali amalga oshiriladi. SQLCipher uchun parol kodda yoki SharedPreferences-da emas, balki Keystore-da saqlanishi tavsiya etiladi.
iOS platformasi Keychain Services — asosiy himoyalangan ombor, shuningdek OT darajasida fayllarni shifrlash uchun Data Protection API-ni taqdim etadi.
Keychain — iOS parollar, shifrlash kalitlari, sertifikatlar va eslatmalarni saqlaydigan shifrlangan SQLite ma'lumotlar bazasi. Keychain-ning har bir elementi (SecItem) qurilma uchun noyob apparat kaliti yordamida shifrlangan holda saqlanadi. Elementga kirish ACL (Access Control List) orqali boshqariladi, bu biometrik autentifikatsiya (Face ID, Touch ID) yoki parolni talab qilishi mumkin.
Keychain ma'lumotlar qachon mavjudligini belgilaydigan himoya sinflarini (Protection Class) qo'llab-quvvatlaydi: kSecAttrAccessibleWhenUnlockedThisDeviceOnly — ma'lumotlar faqat qurilma ochiq bo'lganda mavjud va zaxira nusxalashda ko'chirilmaydi. Bu sinf autentifikatsiya tokenlarini saqlashning aksariyat stsenariylari uchun tavsiya etiladi.
iOS 15+ da Secure Enclave orqali apparat kalitlarini qo'llab-quvvatlovchi Security framework mavjud — kriptografik operatsiyalarni qayta ishlaydigan va shaxsiy kalitlarni izolyatsiyalangan xotirada saqlaydigan maxsus Apple protsessori. Secure Enclave chipdan chiqarib bo'lmaydigan kalitlarni yaratish uchun ECDSA (secp256r1) va ECDH algoritmlarini qo'llab-quvvatlaydi.
Data Protection — qurilma paroliga bog'langan kalit yordamida fayl tizimi darajasida (APFS) har bir faylni shifrlaydigan iOS mexanizmi. Dasturchi fayl yaratishda NSFileProtectionType atributi orqali himoya darajasini belgilaydi: NSFileProtectionComplete — fayl faqat qurilma ochiq bo'lganda mavjud.
Data Protection iOS 5+ bo'lgan barcha qurilmalarda parol o'rnatilgan bo'lsa avtomatik ishlaydi. Shifrlash Apple protsessorining Dedicated AES Engine orqali apparat darajasida amalga oshiriladi, bu yuqori samaradorlikni ta'minlaydi — shifrlash kechikishi foydalanuvchi uchun deyarli sezilmaydi. Ilovada himoyani faollashtirish uchun FileManager orqali fayl yaratishda himoya atributini o'rnatish kifoya.
Data Protection kalitlarni saqlash uchun Keychain o'rnini bosmaydi — fayllar, Core Data ma'lumotlar bazalari va boshqa katta hajmdagi ma'lumotlarni shifrlash uchun ishlatiladi. Keychain (kalitlar uchun) va Data Protection (fayllar uchun) kombinatsiyasi iOS-da to'liq xavfsiz saqlash siklini ta'minlaydi.
Secure Storage ning Android va iOS ning o'rnatilgan API-laridan foydalangan holda amaliy misollarini ko'rib chiqamiz.
Misol Android Keystore-dan master-kalit bilan EncryptedSharedPreferences ni ishga tushirishni ko'rsatadi. Keyingi barcha o'qish va yozish operatsiyalari avtomatik shifrlanadi va deshifrlanadi.
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()
Misol Security framework yordamida iOS Keychain dan ma'lumotlarni saqlash va o'qishni namoyish etadi. Kod maksimal himoya uchun kSecAttrAccessibleWhenUnlockedThisDeviceOnly dan foydalanadi.
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 saqlangan parol bilan SQLCipher orqali shifrlangan SQLite ma'lumotlar bazasiga ulanish misoli.
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)
}
}
// Foydalanish: ochishda parolni kiriting
val helper = SecureDBHelper(context)
val db = helper.getWritableDatabase(password)
Secure Storage dan to'g'ri foydalanish dasturchilarning odatiy xatolarining oldini oladigan bir necha asosiy tamoyillarga rioya qilishni talab qiladi.
Ma'lumotlar tasnifini aniqlang: qaysi ma'lumotlar apparat himoyasini (Keystore / Secure Enclave), qaysilari OT darajasida shifrlashni (EncryptedSharedPreferences / Data Protection), qaysilari esa oddiy fayl tizimida saqlanishi mumkin. Autentifikatsiya tokenlari, shaxsiy kalitlar va to'lov ma'lumotlari — faqat apparat darajasi. Foydalanuvchi sozlamalari (mavzu, til) — EncryptedSharedPreferences yetarli. Sessiya ma'lumotlari (vaqtinchalik keshlar) xotirada yoki vaqtinchalik katalogda saqlanishi mumkin.
Hech qachon sirlarni kodda saqlamang: API kalitlari, parollar yoki seed iboralari bo'lgan satrlarni manba kodida saqlash — eng qo'pol xavfsizlik xatosi. Har qanday reverse engineering bu ma'lumotlarni darhol fosh qiladi. Kalitlar uchun Keystore dan, konfiguratsiya uchun esa ilova ishga tushirilganda server yuklashdan (remote config) foydalaning.
Muhim operatsiyalar uchun biometrik bog'lashdan foydalaning: Android Keystore va iOS Keychain kalitlarning biometrik autentifikatsiyaga ulanishini qo'llab-quvvatlaydi. Kalitga har murojaatda tizim Face ID, Touch ID yoki Android biometriyasini (BiometricPrompt) so'raydi. Bu tajovuzkor qurilma ustidan to'liq nazoratga ega bo'lsa ham, saqlangan ma'lumotlardan egasiz foydalana olmasligini kafolatlaydi.
Himoyani sinab ko'ring: xavfsizlik tahlili vositalaridan foydalaning — statik tahlil uchun MobSF (Mobile Security Framework), runtime testi uchun objection va himoyani chetlab o'tish uchun Frida. Root yoki jailbreak dan keyin ma'lumotlarning erishib bo'lmasligini tekshiring. Android root mavjudligini SafetyNet Attestation yoki Play Integrity API orqali, iOS — Secure Enclave yaxlitligini tekshirish orqali aniqlash imkonini beradi.
Kriptografik kutubxonalarni muntazam yangilang: shifrlash kutubxonalarida zaifliklar muntazam topiladi. AndroidX Security, SQLCipher va Keychain wrapperlari uchun CVE-larni kuzatib boring. Dependabot yoki Renovate orqali yangi versiyalar haqida avtomatik xabardor qilish tizimini joriy qiling.
Apple Security Research (2025) ma'lumotlariga ko'ra, Secure Storage ni to'g'ri tatbiq qilish qurilmadan ma'lumot o'g'irlashga qaratilgan hujumlarning 96% oldini oladi. Qolgan 4% — jismoniy kirish bilan hujumlar va nolinchi kun eksploitlari, ularga qarshi biometrik bog'lash samarali.
Tez-tez beriladigan savollar
iOS Keychain — ACL orqali kirish nazorati bilan parollar, kalitlar va sertifikatlarni saqlash uchun shifrlangan ma'lumotlar bazasi. Android Keystore — izolyatsiyalangan muhitda (TEE/StrongBox) kalitlarni yaratadigan va saqlaydigan, shaxsiy kalitni chiqarishga imkon bermaydigan kriptografik provayder.
EncryptedSharedPreferences qiymatlarni shifrlash uchun AES-256 GCM va kalitlarni shifrlash uchun AES-256 SIV dan foydalanadi. Asosiy kalit Android Keystore da saqlanadi va ikki darajali himoyani ta'minlaydi. Qo'shimcha ravishda yaxlitlikni tekshirish uchun HMAC-SHA256 ishlatiladi.
Ha, HTTPS ma'lumotlarni faqat uzatish kanalida himoya qiladi. Qurilmada ma'lumotlar deshifrlashdan keyin ochiq holda saqlanadi. Agar tajovuzkor qurilmaga jismoniy kirishga ega bo'lsa yoki zararli dastur o'rnatsa, HTTPS saqlangan ma'lumotlarni himoya qilmaydi. Har doim ma'lumotlarni saqlash darajasida shifrlang.
Android Keystore dan setUnlockedDeviceRequired(true) bayrog'i bilan foydalaning, bu root qilingan qurilmalarda kalitlarga kirishni bloklaydi. Qo'shimcha ravishda Play Integrity API orqali yaxlitlikni tekshiring va mos yozuvlar qiymatlaridan chetlashganda ombordagi barcha sirlarni tozalang.
Yo'q, UserDefaults ma'lumotlarni sandbox ichidagi plist faylida ochiq holda saqlaydi. Reverse engineering vositalariga ega har qanday ilova (zaxira nusxa yoki jailbreak orqali) tokenlarni o'qishi mumkin. Faqat Keychain — iOS da sirlarni saqlash uchun yagona xavfsiz joy.
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.