Secure Storage i mobilappar: vad det är, metoder och implementering

Författare: IT Sectr Publicerad: 2026-04-04 Lästid: 9 min

Secure Storage (säker lagring) — en uppsättning metoder och tekniker för att skydda konfidentiell data på enheten: tokens, krypteringsnycklar, betalningsinformation och användarnas personuppgifter. Enligt OWASP Mobile Top 10 (2024) hör osäker datalagring till de tre mest kritiska riskerna. Korrekt implementering av säker lagring förhindrar dataläckor även vid fysisk åtkomst till enheten.

Huvudpunkter

  • Secure Storage — en uppsättning metoder för kryptering och isolering av data på enheten för att förhindra åtkomst från andra appar och angripare.
  • Android Keystore — kryptografiskt lager som genererar och skyddar nycklar på hårdvarunivå (TEE).
  • iOS Keychain — skyddad databas för lagring av hemligheter, krypterad på OS-nivå med åtkomst via Security framework.
  • EncryptedSharedPreferences — Android Jetpack-bibliotek för kryptering av nyckel-värdepar med AES-256.
  • Data Protection API — iOS-mekanism som krypterar filer baserat på skyddsklass kopplad till enhetens låsningsstatus.

Vad är Secure Storage?

Secure Storage — praxis att lagra konfidentiell data från en mobilapp på ett sådant sätt att den är otillgänglig för andra appar, skadlig programvara och en angripare med fysisk åtkomst till enheten. Till skillnad från vanlig lagring använder Secure Storage kryptering, isolering och hårdvaruskydd.

All data behöver inte Secure Storage: profilbilder eller nyhetscache kan lagras i det vanliga filsystemet. Men krypteringsnycklar, autentiseringstokens, betalningsdata, privata nycklar och biometriska mallar måste skyddas. Enligt Google Security Blog (2025) är 67% av sårbarheterna i mobilappar relaterade till lagring av hemligheter i öppen form.

Varje mobilplattform tillhandahåller sina egna Secure Storage-mekanismer: Android — Keystore och EncryptedSharedPreferences, iOS — Keychain och Data Protection API. Dessa mekanismer är integrerade med hårdvarusäkerhetsmoduler (TEE, Secure Enclave) och garanterar att data inte kan läsas även efter jailbreak eller rotning av enheten.

Rätt val av Secure Storage-metod beror på datatyp, användningsscenario och prestandakrav. Att förstå arkitekturen för varje mekanism gör det möjligt för utvecklaren att fatta rätt arkitekturbeslut.

Secure Storage på Android

Plattformen Android erbjuder flera nivåer av dataskydd, från hårdvarunyckellagring till krypterade SharedPreferences. Valet beror på datans känslighet och prestandakrav.

Android Keystore — hårdvarulagring av nycklar

Android Keystore — en kryptografisk leverantör som genererar och lagrar nycklar i en isolerad exekveringsmiljö (TEE — Trusted Execution Environment) på enheter med stöd för hårdvaruskydd. Nycklar lämnar aldrig TEE: kryptografiska operationer utförs inom ett skyddat område som inte ens är tillgängligt för operativsystemet.

Från och med Android 9 (API 28) stöder Keystore StrongBox Keymaster — ett dedikerat säkerhetschip med egen CPU, True Random Number Generator (TRNG) och skyddat minne. StrongBox är certifierat enligt Common Criteria EAL 4+ och är den säkraste nivån för nyckellagring på Android. För att använda StrongBox måste du explicit ange flaggan inStrongBox() vid generering av nyckeln.

Keystore stöder algoritmerna: AES/GCM/NoPadding (256 bitar), EC (secp256r1, secp384r1), RSA (2048–4096 bitar) och HMAC-SHA256. Alla nycklar kan kopplas till biometrisk autentisering via setUserAuthenticationRequired(true).

EncryptedSharedPreferences

EncryptedSharedPreferences — ett bibliotek från AndroidX Security-paketet som automatiskt krypterar all data som lagras via SharedPreferences API. Värden krypteras med en AES-256 GCM-nyckel och nycklar — med AES-256 SIV (syntetisk IV), vilket förhindrar ordboksattacker på nyckelnamn.

Huvudkrypteringsnyckeln lagras i Android Keystore, vilket ger två nivåers skydd: Keystore skyddar huvudnyckeln, EncryptedSharedPreferences skyddar data. Krypteringsprestandan är mindre än 5 ms per läs-/skrivoperation för typisk data (token, inställningar), vilket gör biblioteket lämpligt för användarscenarier.

EncryptedSharedPreferences är inte avsett för stora datamängder (över 5 MB) — i sådana fall använd en krypterad databas via SQLCipher eller Room med kryptering.

SQLCipher — krypterad databas

SQLCipher — en SQLite-tillägg som krypterar hela databasen sida för sida med AES-256-CBC. Varje sida i databasen krypteras med en separat nyckel som härleds från huvudlösenordet via PBKDF2. SQLCipher lägger till cirka 5–15% prestandaoverhead beroende på datastorlek.

Integration med Android sker via biblioteket net.zetetic:android-database-sqlcipher, som tillhandahåller ett API kompatibelt med standard SQLiteOpenHelper. Lösenordet för SQLCipher rekommenderas att lagras i Keystore, inte i kod eller SharedPreferences.

Secure Storage på iOS

Plattformen iOS tillhandahåller Keychain Services — den primära säkra lagringen, samt Data Protection API för kryptering av filer på OS-nivå.

Keychain Services

Keychain — en krypterad SQLite-databas där iOS lagrar lösenord, krypteringsnycklar, certifikat och anteckningar. Varje Keychain-element (SecItem) lagras i krypterad form med en hårdvarunyckel som är unik för enheten. Åtkomst till elementet kontrolleras via ACL (Access Control List), som kan kräva biometrisk autentisering (Face ID, Touch ID) eller lösenkod.

Keychain stöder skyddsklasser (Protection Class) som bestämmer när data är tillgänglig: kSecAttrAccessibleWhenUnlockedThisDeviceOnly — data är endast tillgänglig när enheten är upplåst och överförs inte vid säkerhetskopiering. Denna klass rekommenderas för de flesta scenarier för lagring av autentiseringstokens.

På iOS 15+ finns Security framework med stöd för hårdvarunycklar via Secure Enclave — en dedikerad Apple-processor som utför kryptografiska operationer och lagrar privata nycklar i isolerat minne. Secure Enclave stöder algoritmerna ECDSA (secp256r1) och ECDH för generering av nycklar som inte kan extraheras från chippet.

Data Protection API

Data Protection — en iOS-mekanism som krypterar varje fil på filsystemnivå (APFS) med en nyckel kopplad till enhetens lösenkod. Utvecklaren anger skyddsnivån via attributet NSFileProtectionType när filen skapas: NSFileProtectionComplete — filen är endast tillgänglig när enheten är upplåst.

Data Protection fungerar automatiskt på alla enheter med iOS 5+ om en lösenkod har ställts in. Kryptering utförs på hårdvarunivå via Apples Dedicated AES Engine, vilket säkerställer hög prestanda — krypteringsfördröjningen är praktiskt taget omärkbar för användaren. För att aktivera skydd i appen räcker det att ställa in skyddsattributet när filen skapas via FileManager.

Data Protection ersätter inte Keychain för lagring av nycklar — det används för kryptering av filer, Core Data-databaser och andra stora datamängder. Kombinationen av Keychain (för nycklar) och Data Protection (för filer) ger en komplett cykel av säker lagring på iOS.

Kodexempel: kryptering av data på Android och iOS

Låt oss titta på praktiska exempel på Secure Storage med inbyggda API:er för Android och iOS.

EncryptedSharedPreferences i Kotlin

Exemplet visar initiering av EncryptedSharedPreferences med en huvudnyckel från Android Keystore. Alla efterföljande läs- och skrivoperationer krypteras och dekrypteras automatiskt.

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 i Swift

Exemplet demonstrerar lagring och läsning av data från iOS Keychain med Security framework. Koden använder kSecAttrAccessibleWhenUnlockedThisDeviceOnly för maximalt skydd.

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 i Kotlin

Exempel på anslutning till en krypterad SQLite-databas via SQLCipher med lösenord lagrat i 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)
    }
}

// Användning: ange lösenord vid öppning
val helper = SecureDBHelper(context)
val db = helper.getWritableDatabase(password)

Rekommendationer för säker datalagring

Korrekt användning av Secure Storage kräver efterlevnad av några grundläggande principer som förhindrar typiska utvecklarfel.

Bestäm klassificeringen av data: vilken data kräver hårdvaruskydd (Keystore / Secure Enclave), vilken — kryptering på OS-nivå (EncryptedSharedPreferences / Data Protection), och vilken kan lagras i det vanliga filsystemet. Autentiseringstokens, privata nycklar och betalningsdata — endast hårdvarunivå. Användarinställningar (tema, språk) — EncryptedSharedPreferences är tillräckligt. Sessionsdata (tillfälliga cacheminnen) kan lagras i minnet eller en tillfällig katalog.

Lagra aldrig hemligheter i kod: strängar med API-nycklar, lösenord eller seed-fraser i källkod — det allvarligaste säkerhetsfelet. All reverse engineering kommer omedelbart att avslöja dessa data. Använd Keystore för nycklar och för konfiguration — serverladdning vid appstart (remote config).

Använd biometrisk bindning för kritiska operationer: Android Keystore och iOS Keychain stöder bindning av nycklar till biometrisk autentisering. Vid varje åtkomst till nyckeln begär systemet Face ID, Touch ID eller Android-biometri (BiometricPrompt). Detta garanterar att även med full kontroll över enheten kan en angripare inte använda lagrad data utan ägaren.

Testa skyddet: använd säkerhetsanalysverktyg — MobSF (Mobile Security Framework) för statisk analys, objection för runtime-testning och Frida för att kringgå skydd. Kontrollera att data är otillgänglig efter rotning eller jailbreak. Android gör det möjligt att kontrollera förekomsten av root-åtkomst via SafetyNet Attestation eller Play Integrity API, iOS — via verifiering av Secure Enclaves integritet.

Uppdatera kryptografiska bibliotek regelbundet: sårbarheter i krypteringsbibliotek upptäcks regelbundet. Följ CVE:er för AndroidX Security, SQLCipher och Keychain-omslag. Implementera ett system för automatiska meddelanden om nya versioner via Dependabot eller Renovate.

Enligt Apple Security Research (2025) förhindrar korrekt implementering av Secure Storage 96% av attackerna som syftar till stöld av data från enheten. Återstående 4% — attacker med fysisk åtkomst och zero-day-exploater, mot vilka biometrisk bindning är effektiv.

Vanliga frågor

Vad är skillnaden mellan Keychain och Keystore?

iOS Keychain — krypterad databas för lagring av lösenord, nycklar och certifikat med åtkomstkontroll via ACL. Android Keystore — kryptografisk leverantör som genererar och lagrar nycklar i en isolerad miljö (TEE/StrongBox) och inte tillåter extraktion av privat nyckel.

Vilken krypteringsalgoritm används i EncryptedSharedPreferences?

EncryptedSharedPreferences använder AES-256 GCM för kryptering av värden och AES-256 SIV för kryptering av nycklar. Huvudnyckeln lagras i Android Keystore, vilket ger två nivåers skydd. Dessutom används HMAC-SHA256 för integritetskontroll.

Måste data som redan skyddas av HTTPS krypteras?

Ja, HTTPS skyddar data endast i överföringskanalen. På enheten lagras data i öppen form efter dekryptering. Om en angripare får fysisk åtkomst till enheten eller installerar skadlig programvara kommer HTTPS inte att skydda lagrad data. Kryptera alltid data på lagringsnivå.

Hur skyddar man data efter rotning av Android?

Använd Android Keystore med flaggan setUnlockedDeviceRequired(true), som blockerar åtkomst till nycklar på rotade enheter. Kontrollera dessutom integriteten via Play Integrity API och vid avvikelse från referensvärden, rensa alla hemligheter från lagringen.

Kan UserDefaults användas för lagring av tokens på iOS?

Nej, UserDefaults lagrar data i öppen form i en plist-fil i sandlådan. Alla appar med reverse engineering-verktyg (via säkerhetskopia eller jailbreak) kan läsa tokens. Endast Keychain — den enda säkra platsen för lagring av hemligheter på iOS.

Sammanfattning

  • Secure Storage — en obligatorisk skyddskomponent för mobilappar som förhindrar dataläckor vid fysisk åtkomst till enheten.
  • Android Keystore med StrongBox ger hårdvarulagring av nycklar på ett dedikerat säkerhetschip.
  • iOS Keychain med skyddsklasser (WhenUnlockedThisDeviceOnly) — standarden för lagring av hemligheter på Apple-plattformen.
  • EncryptedSharedPreferences — färdig lösning för kryptering av inställningar och tokens på Android med två nivåers kryptografi.
  • SQLCipher — valet för krypterade databaser med sidvis AES-256-CBC-kryptering.
  • Data Protection på iOS och SafetyNet/Play Integrity på Android — ytterligare skyddsnivåer för filsystemet.
  • Korrekt dataklassificering och biometrisk bindning förhindrar 96% av attackerna på lagrad data enligt Apple Security Research.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också