Secure Storage di Aplikasi Seluler: Apa Itu, Metode, dan Implementasi

Penulis: IT Sectr Diterbitkan: 2026-04-04 Waktu membaca: 9 mnt

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 — seperangkat metode enkripsi dan isolasi data pada perangkat untuk mencegah akses oleh aplikasi lain dan penyerang.
  • Android Keystore — penyimpanan kriptografi yang menghasilkan dan melindungi kunci pada tingkat perangkat keras (TEE).
  • iOS Keychain — basis data terlindungi untuk menyimpan rahasia, dienkripsi pada tingkat OS dengan akses melalui Security framework.
  • EncryptedSharedPreferences — pustaka Android Jetpack untuk mengenkripsi pasangan kunci-nilai menggunakan AES-256.
  • Data Protection API — mekanisme iOS yang mengenkripsi file berdasarkan kelas perlindungan yang terkait dengan status kunci perangkat.

Apa itu Secure Storage?

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.

Secure Storage di Android

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 — Penyimpanan Kunci Perangkat Keras

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

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 — Basis Data Terenkripsi

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.

Secure Storage di iOS

Platform iOS menyediakan Keychain Services — penyimpanan aman utama, serta Data Protection API untuk enkripsi file pada tingkat OS.

Keychain Services

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 API

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.

Contoh Kode: Enkripsi Data di Android dan iOS

Mari kita lihat contoh praktis Secure Storage menggunakan API bawaan Android dan iOS.

EncryptedSharedPreferences di Kotlin

Contoh menunjukkan inisialisasi EncryptedSharedPreferences dengan kunci utama dari Android Keystore. Semua operasi baca dan tulis selanjutnya secara otomatis dienkripsi dan didekripsi.

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

Keychain di Swift

Contoh mendemonstrasikan penyimpanan dan pembacaan data dari iOS Keychain menggunakan Security framework. Kode menggunakan kSecAttrAccessibleWhenUnlockedThisDeviceOnly untuk perlindungan maksimal.

swift
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
}

SQLCipher di Kotlin

Contoh koneksi ke basis data SQLite terenkripsi melalui SQLCipher dengan kata sandi yang disimpan di Android Keystore.

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

Rekomendasi untuk Penyimpanan Data yang Aman

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

Apa perbedaan antara Keychain dan Keystore?

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.

Algoritma enkripsi apa yang digunakan di EncryptedSharedPreferences?

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.

Apakah perlu mengenkripsi data yang sudah dilindungi oleh HTTPS?

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.

Bagaimana cara melindungi data setelah rooting Android?

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.

Bisakah UserDefaults digunakan untuk menyimpan token di iOS?

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

  • Secure Storage — komponen perlindungan wajib aplikasi seluler yang mencegah kebocoran data saat akses fisik ke perangkat.
  • Android Keystore dengan StrongBox menyediakan penyimpanan kunci perangkat keras pada chip keamanan khusus.
  • iOS Keychain dengan kelas perlindungan (WhenUnlockedThisDeviceOnly) — standar penyimpanan rahasia di platform Apple.
  • EncryptedSharedPreferences — solusi siap pakai untuk mengenkripsi pengaturan dan token di Android dengan kriptografi dua tingkat.
  • SQLCipher — pilihan untuk basis data terenkripsi dengan enkripsi halaman AES-256-CBC.
  • Data Protection di iOS dan SafetyNet/Play Integrity di Android — tingkat perlindungan tambahan sistem file.
  • Klasifikasi data yang tepat dan ikatan biometrik mencegah 96% serangan pada data yang disimpan menurut Apple Security Research.

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.

Diskusikan proyek

Baca juga