Güvenli Depolama
Güvenli depolama, hassas verileri işleyen mobil uygulamalar için temel bir güvenlik gereksinimidir. Bu, kullanıcı kimlik bilgilerini, API tokenlarını, kişisel bilgileri ve finansal verileri içerir. Hem Android hem de iOS, mevcut olduğunda donanım güvenlik özelliklerinden yararlanan platform özel güvenli depolama mekanizmaları sağlar.
Android Güvenli Depolama
EncryptedSharedPreferences
Android'in EncryptedSharedPreferences
'ı, mevcut olduğunda donanım destekli anahtarlar kullanarak AES şifreleme ile otomatik şifreleme/şifre çözme sağlar.
// Şifreleme için MasterKey oluştur
val masterKey = MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
// EncryptedSharedPreferences oluştur
val encryptedPrefs = EncryptedSharedPreferences.create(
context,
"secure_prefs",
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
// Hassas verileri sakla
encryptedPrefs.edit()
.putString("auth_token", authToken)
.putString("user_credentials", credentials)
.apply()
Android Keystore Sistemi
Android Keystore sistemi, kriptografik işlemler için donanım destekli anahtar depolama sağlar.
// Android Keystore'da anahtarlar oluştur
val keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore")
val keyGenParameterSpec = KeyGenParameterSpec.Builder(
"secure_key",
KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
)
.setBlockModes(KeyProperties.BLOCK_MODE_GCM)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
.setUserAuthenticationRequired(true)
.setUserAuthenticationValidityDurationSeconds(300)
.build()
keyGenerator.init(keyGenParameterSpec)
val secretKey = keyGenerator.generateKey()
// Şifreleme için anahtarı kullan
val cipher = Cipher.getInstance("AES/GCM/NoPadding")
cipher.init(Cipher.ENCRYPT_MODE, secretKey)
val encryptedData = cipher.doFinal(plainTextData.toByteArray())
iOS Güvenli Depolama
Keychain Servisleri
iOS Keychain, isteğe bağlı iCloud senkronizasyonu ve biyometrik koruma ile hassas bilgilerin güvenli depolanmasını sağlar.
import Security
import LocalAuthentication
class KeychainManager {
func store(data: Data, forKey key: String, requireBiometry: Bool = false) -> Bool {
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: key,
kSecValueData as String: data,
kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlockedThisDeviceOnly
]
var finalQuery = query
if requireBiometry {
let access = SecAccessControlCreateWithFlags(
nil,
kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
.biometryAny,
nil
)
finalQuery[kSecAttrAccessControl as String] = access
}
// Mevcut öğeyi sil
SecItemDelete(query as CFDictionary)
// Yeni öğe ekle
let status = SecItemAdd(finalQuery as CFDictionary, nil)
return status == errSecSuccess
}
func retrieve(forKey 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
}
}
Güvenli Depolama İçin En İyi Uygulamalar
Veri Sınıflandırması
- Genel Veri: Şifreleme gerekmez
- İç Veri: Temel şifreleme
- Gizli Veri: Güçlü şifreleme + erişim kontrolleri
- Kısıtlı Veri: Donanım destekli şifreleme + biyometri
Anahtar Yönetimi Stratejisi
// Android anahtar yönetimi örneği
class KeyManagementStrategy {
companion object {
const val KEY_ALIAS_AUTH_TOKEN = "auth_token_key"
const val KEY_ALIAS_USER_DATA = "user_data_key"
const val KEY_ALIAS_FINANCIAL = "financial_key"
}
fun getKeyForDataType(dataType: DataType): String {
return when (dataType) {
DataType.AUTH_TOKEN -> KEY_ALIAS_AUTH_TOKEN
DataType.USER_DATA -> KEY_ALIAS_USER_DATA
DataType.FINANCIAL -> KEY_ALIAS_FINANCIAL
}
}
}
Güvenlik Değerlendirmeleri
Anahtar Rotasyonu
- Uzun ömürlü uygulamalar için otomatik anahtar rotasyonu uygulayın
- Mevcut şifrelenmiş veriler için geçiş yolları sağlayın
- Anahtar kullanımını ve yaşam döngüsünü izleyin
Yedekleme ve Kurtarma
- Şifrelenmiş veriler için güvenli yedekleme stratejileri tasarlayın
- Kurumsal ortamlar için anahtar emanet sistemi uygulayın
- Cihaz geçiş senaryoları için plan yapın
Uyumluluk Gereksinimleri
- KVKK: Silme hakkı uygulaması
- PCI DSS: Güvenli ödeme verisi depolama
- HIPAA: Sağlık verisi koruması
- SOX: Finansal veri bütünlüğü
Güvenli depolama, mobil uygulama güvenliğinin temelidir. Platform özel API'lerin doğru uygulanması, sağlam anahtar yönetimi uygulamalarıyla birleştirildiğinde, cihaz tehlikeye girse bile hassas kullanıcı verilerinin korunmasını sağlar.