Secure Storage (penyimpanan aman) — kumpulan metode dan teknologi untuk melindungi data rahasia di perangkat: token, kunci enkripsi, informasi pembayaran, dan data pribadi pengguna. Menurut OWASP Mobile Top 10 (2024), penyimpanan data yang tidak aman termasuk dalam tiga risiko paling kritis. Implementasi penyimpanan aman yang tepat mencegah kebocoran data bahkan dengan akses fisik ke perangkat.
Poin Utama
Secure Storage — praktik menyimpan data rahasia aplikasi seluler sedemikian rupa sehingga tidak dapat diakses oleh aplikasi lain, perangkat lunak berbahaya, dan penyerang dengan akses fisik ke perangkat. Tidak seperti penyimpanan biasa, Secure Storage menggunakan enkripsi, isolasi, dan perlindungan perangkat keras.
Tidak semua data memerlukan Secure Storage: gambar profil atau cache berita dapat disimpan di sistem file biasa. Namun, kunci enkripsi, token autentikasi, data pembayaran, kunci privat, dan templat biometrik harus dilindungi. Menurut Google Security Blog (2025), 67% kerentanan di aplikasi seluler terkait dengan penyimpanan rahasia dalam bentuk terbuka.
Setiap platform seluler menyediakan mekanisme Secure Storage-nya sendiri: Android — Keystore dan EncryptedSharedPreferences, iOS — Keychain dan Data Protection API. Mekanisme ini terintegrasi dengan modul keamanan perangkat keras (TEE, Secure Enclave) dan menjamin bahwa data tidak dapat dibaca bahkan setelah jailbreak atau rooting perangkat.
Pemilihan metode Secure Storage yang tepat tergantung pada jenis data, skenario penggunaan, dan persyaratan kinerja. Memahami arsitektur setiap mekanisme memungkinkan pengembang mengambil keputusan arsitektur yang tepat.
Platform Android menyediakan beberapa tingkat perlindungan data, dari penyimpanan kunci perangkat keras hingga SharedPreferences terenkripsi. Pilihan tergantung pada sensitivitas data dan persyaratan kinerja.
Android Keystore — penyedia kriptografi yang menghasilkan dan menyimpan kunci di lingkungan eksekusi terisolasi (TEE — Trusted Execution Environment) pada perangkat dengan dukungan perlindungan perangkat keras. Kunci tidak pernah meninggalkan TEE: operasi kriptografi dilakukan di dalam area terlindungi yang tidak dapat diakses bahkan oleh sistem operasi.
Sejak Android 9 (API 28), Keystore mendukung StrongBox Keymaster — chip keamanan khusus dengan CPU sendiri, True Random Number Generator (TRNG), dan memori terlindungi. StrongBox tersertifikasi sesuai Common Criteria EAL 4+ dan merupakan tingkat penyimpanan kunci paling aman di Android. Untuk menggunakan StrongBox, Anda harus secara eksplisit menambahkan flag inStrongBox() saat menghasilkan kunci.
Keystore mendukung algoritma: AES/GCM/NoPadding (256 bit), EC (secp256r1, secp384r1), RSA (2048–4096 bit), dan HMAC-SHA256. Semua kunci dapat dikaitkan dengan autentikasi biometrik melalui setUserAuthenticationRequired(true).
EncryptedSharedPreferences — pustaka dari paket AndroidX Security yang secara otomatis mengenkripsi semua data yang disimpan melalui API SharedPreferences. Nilai dienkripsi dengan kunci AES-256 GCM, dan kunci — dengan AES-256 SIV (IV sintetis), yang mencegah serangan kamus pada nama kunci.
Kunci enkripsi utama disimpan di Android Keystore, memberikan perlindungan dua tingkat: Keystore melindungi kunci utama, EncryptedSharedPreferences melindungi data. Kinerja enkripsi kurang dari 5 ms per operasi baca/tulis untuk data tipikal (token, pengaturan), menjadikan pustaka ini cocok untuk skenario pengguna.
EncryptedSharedPreferences tidak dirancang untuk volume data besar (lebih dari 5 MB) — dalam kasus seperti itu, gunakan basis data terenkripsi melalui SQLCipher atau Room dengan enkripsi.
SQLCipher — ekstensi SQLite yang mengenkripsi seluruh basis data halaman per halaman menggunakan AES-256-CBC. Setiap halaman basis data dienkripsi dengan kunci terpisah yang diturunkan dari kata sandi utama melalui PBKDF2. SQLCipher menambahkan sekitar 5–15% overhead kinerja tergantung pada ukuran data.
Integrasi dengan Android dilakukan melalui pustaka net.zetetic:android-database-sqlcipher, yang menyediakan API kompatibel dengan SQLiteOpenHelper standar. Kata sandi untuk SQLCipher disarankan disimpan di Keystore, bukan di kode atau SharedPreferences.
Platform iOS menyediakan Keychain Services — penyimpanan aman utama, serta Data Protection API untuk enkripsi file pada tingkat OS.
Keychain — basis data SQLite terenkripsi tempat iOS menyimpan kata sandi, kunci enkripsi, sertifikat, dan catatan. Setiap elemen Keychain (SecItem) disimpan dalam bentuk terenkripsi menggunakan kunci perangkat keras yang unik untuk perangkat. Akses ke elemen dikendalikan melalui ACL (Access Control List), yang mungkin memerlukan autentikasi biometrik (Face ID, Touch ID) atau kata sandi.
Keychain mendukung kelas perlindungan (Protection Class) yang menentukan kapan data tersedia: kSecAttrAccessibleWhenUnlockedThisDeviceOnly — data hanya tersedia saat perangkat tidak terkunci dan tidak ditransfer saat pencadangan. Kelas ini direkomendasikan untuk sebagian besar skenario penyimpanan token autentikasi.
Pada iOS 15+ tersedia Security framework dengan dukungan kunci perangkat keras melalui Secure Enclave — prosesor khusus Apple yang memproses operasi kriptografi dan menyimpan kunci privat di memori terisolasi. Secure Enclave mendukung algoritma ECDSA (secp256r1) dan ECDH untuk menghasilkan kunci yang tidak dapat diekstraksi dari chip.
Data Protection — mekanisme iOS yang mengenkripsi setiap file pada tingkat sistem file (APFS) menggunakan kunci yang terkait dengan kata sandi perangkat. Pengembang menentukan tingkat perlindungan melalui atribut NSFileProtectionType saat membuat file: NSFileProtectionComplete — file hanya tersedia saat perangkat tidak terkunci.
Data Protection bekerja secara otomatis di semua perangkat dengan iOS 5+ jika kata sandi telah diatur. Enkripsi dilakukan pada tingkat perangkat keras melalui Dedicated AES Engine prosesor Apple, memastikan kinerja tinggi — latensi enkripsi praktis tidak terlihat oleh pengguna. Untuk mengaktifkan perlindungan di aplikasi, cukup atur atribut perlindungan saat membuat file melalui FileManager.
Data Protection tidak menggantikan Keychain untuk menyimpan kunci — ini digunakan untuk mengenkripsi file, basis data Core Data, dan volume data besar lainnya. Kombinasi Keychain (untuk kunci) dan Data Protection (untuk file) menyediakan siklus penyimpanan aman lengkap di iOS.
Mari kita lihat contoh praktis Secure Storage menggunakan API bawaan Android dan iOS.
Contoh menunjukkan inisialisasi EncryptedSharedPreferences dengan kunci utama dari Android Keystore. Semua operasi baca dan tulis selanjutnya secara otomatis dienkripsi dan didekripsi.
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()
Contoh mendemonstrasikan penyimpanan dan pembacaan data dari iOS Keychain menggunakan Security framework. Kode menggunakan kSecAttrAccessibleWhenUnlockedThisDeviceOnly untuk perlindungan maksimal.
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
}
Contoh koneksi ke basis data SQLite terenkripsi melalui SQLCipher dengan kata sandi yang disimpan di Android Keystore.
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)
}
}
// Penggunaan: masukkan kata sandi saat membuka
val helper = SecureDBHelper(context)
val db = helper.getWritableDatabase(password)
Penggunaan Secure Storage yang tepat memerlukan kepatuhan terhadap beberapa prinsip dasar yang mencegah kesalahan umum pengembang.
Tentukan klasifikasi data: data mana yang memerlukan perlindungan perangkat keras (Keystore / Secure Enclave), mana yang — enkripsi tingkat OS (EncryptedSharedPreferences / Data Protection), dan mana yang dapat disimpan di sistem file biasa. Token autentikasi, kunci privat, dan data pembayaran — hanya tingkat perangkat keras. Pengaturan pengguna (tema, bahasa) — EncryptedSharedPreferences sudah cukup. Data sesi (cache sementara) dapat disimpan di memori atau direktori sementara.
Jangan pernah menyimpan rahasia di kode: string dengan kunci API, kata sandi, atau frase seed di kode sumber — kesalahan keamanan paling serius. Setiap reverse engineering akan segera mengungkapkan data ini. Gunakan Keystore untuk kunci, dan untuk konfigurasi — muatan server saat aplikasi dimulai (remote config).
Gunakan ikatan biometrik untuk operasi kritis: Android Keystore dan iOS Keychain mendukung pengikatan kunci ke autentikasi biometrik. Setiap kali mengakses kunci, sistem meminta Face ID, Touch ID, atau biometrik Android (BiometricPrompt). Ini menjamin bahwa bahkan dengan kendali penuh atas perangkat, penyerang tidak dapat menggunakan data yang disimpan tanpa pemilik.
Uji perlindungan: gunakan alat analisis keamanan — MobSF (Mobile Security Framework) untuk analisis statis, objection untuk pengujian runtime, dan Frida untuk melewati perlindungan. Periksa apakah data tidak dapat diakses setelah rooting atau jailbreak. Android memungkinkan pemeriksaan keberadaan root melalui SafetyNet Attestation atau Play Integrity API, iOS — melalui verifikasi integritas Secure Enclave.
Perbarui pustaka kriptografi secara teratur: kerentanan di pustaka enkripsi ditemukan secara teratur. Pantau CVE untuk AndroidX Security, SQLCipher, dan wrapper Keychain. Terapkan sistem pemberitahuan otomatis tentang versi baru melalui Dependabot atau Renovate.
Menurut Apple Security Research (2025), implementasi Secure Storage yang tepat mencegah 96% serangan yang menargetkan pencurian data dari perangkat. Sisanya 4% — serangan dengan akses fisik dan eksploitasi zero-day, yang terhadapnya ikatan biometrik efektif.
Pertanyaan yang Sering Diajukan
iOS Keychain — basis data terenkripsi untuk menyimpan kata sandi, kunci, dan sertifikat dengan kontrol akses melalui ACL. Android Keystore — penyedia kriptografi yang menghasilkan dan menyimpan kunci di lingkungan terisolasi (TEE/StrongBox) dan tidak mengizinkan ekstraksi kunci privat.
EncryptedSharedPreferences menggunakan AES-256 GCM untuk mengenkripsi nilai dan AES-256 SIV untuk mengenkripsi kunci. Kunci utama disimpan di Android Keystore, memberikan perlindungan dua tingkat. Selain itu, HMAC-SHA256 digunakan untuk pemeriksaan integritas.
Ya, HTTPS hanya melindungi data di saluran transmisi. Di perangkat, data disimpan dalam bentuk terbuka setelah dekripsi. Jika penyerang mendapatkan akses fisik ke perangkat atau menginstal malware, HTTPS tidak akan melindungi data yang disimpan. Selalu enkripsi data pada tingkat penyimpanan.
Gunakan Android Keystore dengan flag setUnlockedDeviceRequired(true), yang memblokir akses ke kunci pada perangkat yang di-root. Selain itu, periksa integritas melalui Play Integrity API dan jika terjadi penyimpangan dari nilai referensi, hapus semua rahasia dari penyimpanan.
Tidak, UserDefaults menyimpan data dalam bentuk terbuka di file plist di dalam sandbox. Aplikasi apa pun dengan alat reverse engineering (melalui cadangan atau jailbreak) dapat membaca token. Hanya Keychain — satu-satunya tempat aman untuk menyimpan rahasia di iOS.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga