Secure Storage a mobilalkalmazásokban: mi ez, módszerek és megvalósítás

Szerző: IT Sectr Megjelenés: 2026-04-04 Olvasási idő: 9 perc

Secure Storage (biztonságos tárolás) — módszerek és technológiák összessége a bizalmas adatok védelmére az eszközön: tokenek, titkosítási kulcsok, fizetési információk és a felhasználók személyes adatai. A OWASP Mobile Top 10 (2024) szerint az adatok nem biztonságos tárolása a három legkritikusabb kockázat közé tartozik. A biztonságos tárolás helyes megvalósítása megakadályozza az adatszivárgást még az eszközhöz való fizikai hozzáférés esetén is.

Főbb pontok

  • Secure Storage — az adatok titkosításának és elkülönítésének módszerei az eszközön, hogy megakadályozza a hozzáférést más alkalmazások és támadók számára.
  • Android Keystore — kriptográfiai tároló, amely hardver szinten (TEE) hoz létre és véd kulcsokat.
  • iOS Keychain — védett adatbázis titkok tárolására, OS szinten titkosítva, Security framework-en keresztüli hozzáféréssel.
  • EncryptedSharedPreferences — Android Jetpack könyvtár kulcs-érték párok titkosításához AES-256 használatával.
  • Data Protection API — iOS mechanizmus, amely az eszköz lezárási állapotához kötött védelmi osztály alapján titkosítja a fájlokat.

Mi az a Secure Storage?

Secure Storage — a mobilalkalmazás bizalmas adatainak olyan módon történő tárolása, hogy azok más alkalmazások, rosszindulatú szoftverek és az eszközhöz fizikailag hozzáférő támadó számára hozzáférhetetlenek legyenek. A szokásos tárolással ellentétben a Secure Storage titkosítást, elkülönítést és hardveres védelmet használ.

Nem minden adat igényel Secure Storage-ot: a profilképek vagy a hírek gyorsítótára a szokásos fájlrendszerben tárolható. A titkosítási kulcsokat, hitelesítési tokeneket, fizetési adatokat, privát kulcsokat és biometrikus sablonokat azonban védeni kell. A Google Security Blog (2025) szerint a mobilalkalmazásokban található sebezhetőségek 67%-a a titkok nyílt formában történő tárolásával kapcsolatos.

Minden mobil platform saját Secure Storage mechanizmusokat kínál: Android — Keystore és EncryptedSharedPreferences, iOS — Keychain és Data Protection API. Ezek a mechanizmusok integrálva vannak a hardveres biztonsági modulokkal (TEE, Secure Enclave), és garantálják, hogy az adatok még jailbreak vagy rootolás után sem olvashatók.

A Secure Storage módszer helyes kiválasztása az adatok típusától, a használati forgatókönyvtől és a teljesítménykövetelményektől függ. Az egyes mechanizmusok architektúrájának megértése lehetővé teszi a fejlesztő számára a helyes architekturális döntés meghozatalát.

Secure Storage Androidon

Az Android platform az adatvédelem több szintjét kínálja, a hardveres kulcstárolótól a titkosított SharedPreferences-ig. A választás az adatok érzékenységétől és a teljesítménykövetelményektől függ.

Android Keystore — hardveres kulcstárolás

Android Keystore — kriptográfiai szolgáltató, amely elkülönített végrehajtási környezetben (TEE — Trusted Execution Environment) hoz létre és tárol kulcsokat a hardveres védelmet támogató eszközökön. A kulcsok soha nem hagyják el a TEE-t: a kriptográfiai műveletek a védett területen belül hajtódnak végre, amely még az operációs rendszer számára sem hozzáférhető.

Az Android 9-től (API 28) a Keystore támogatja a StrongBox Keymaster-t — egy dedikált biztonsági chipet saját CPU-val, True Random Number Generator-ral (TRNG) és védett memóriával. A StrongBox Common Criteria EAL 4+ tanúsítvánnyal rendelkezik, és ez a kulcstárolás legbiztonságosabb szintje Androidon. A StrongBox használatához explicit módon meg kell adni az inStrongBox() jelzőt a kulcs létrehozásakor.

A Keystore a következő algoritmusokat támogatja: AES/GCM/NoPadding (256 bit), EC (secp256r1, secp384r1), RSA (2048–4096 bit) és HMAC-SHA256. Minden kulcs kapcsolható biometrikus hitelesítéshez a setUserAuthenticationRequired(true) segítségével.

EncryptedSharedPreferences

EncryptedSharedPreferences — az AndroidX Security csomagból származó könyvtár, amely automatikusan titkosítja a SharedPreferences API-n keresztül tárolt összes adatot. Az értékek AES-256 GCM kulccsal, a kulcsok pedig AES-256 SIV (szintetikus IV) segítségével vannak titkosítva, ami megakadályozza a szótári támadásokat a kulcsnevek ellen.

A fő titkosítási kulcs az Android Keystore-ban van tárolva, két szintű védelmet biztosítva: a Keystore védi a mesterkulcsot, az EncryptedSharedPreferences pedig az adatokat. A titkosítás teljesítménye tipikus adatok (token, beállítások) esetén kevesebb, mint 5 ms olvasási/írási műveletenként, ami alkalmassá teszi a könyvtárat felhasználói forgatókönyvekhez.

Az EncryptedSharedPreferences nem nagy adatmennyiségekhez (5 MB felett) készült — ilyen esetekben használjon titkosított adatbázist SQLCipher vagy Room segítségével titkosítással.

SQLCipher — titkosított adatbázis

SQLCipher — SQLite kiterjesztés, amely a teljes adatbázist oldalanként titkosítja AES-256-CBC használatával. Az adatbázis minden oldala külön kulccsal van titkosítva, amely a PBKDF2 segítségével a mesterjelszóból származik. A SQLCipher körülbelül 5–15% teljesítménytöbbletet ad hozzá az adatok méretétől függően.

Az Androiddal való integráció a net.zetetic:android-database-sqlcipher könyvtáron keresztül történik, amely a szabványos SQLiteOpenHelper-rel kompatibilis API-t biztosít. Az SQLCipher jelszavát ajánlott a Keystore-ban tárolni, nem a kódban vagy a SharedPreferences-ben.

Secure Storage iOS-en

Az iOS platform a Keychain Services-t — a fő védett tárolót, valamint a Data Protection API-t kínálja a fájlok OS szintű titkosításához.

Keychain Services

A Keychain egy titkosított SQLite adatbázis, amelyben az iOS jelszavakat, titkosítási kulcsokat, tanúsítványokat és jegyzeteket tárol. A Keychain minden eleme (SecItem) titkosított formában van tárolva, az eszközre jellemző hardveres kulcs használatával. Az elemhez való hozzáférést ACL (Access Control List) szabályozza, amely biometrikus hitelesítést (Face ID, Touch ID) vagy jelszót igényelhet.

A Keychain védelmi osztályokat (Protection Class) támogat, amelyek meghatározzák, hogy az adatok mikor érhetők el: kSecAttrAccessibleWhenUnlockedThisDeviceOnly — az adatok csak akkor érhetők el, ha az eszköz fel van oldva, és nem kerülnek átvitelre biztonsági mentéskor. Ez az osztály a hitelesítési tokenek tárolásának legtöbb forgatókönyvéhez ajánlott.

iOS 15+-on elérhető a Security framework a hardveres kulcsok támogatásával a Secure Enclave-en keresztül — egy dedikált Apple processzor, amely kriptográfiai műveleteket végez és privát kulcsokat tárol elkülönített memóriában. A Secure Enclave az ECDSA (secp256r1) és ECDH algoritmusokat támogatja olyan kulcsok létrehozásához, amelyek nem vonhatók ki a chipből.

Data Protection API

A Data Protection egy iOS mechanizmus, amely minden fájlt a fájlrendszer szintjén (APFS) titkosít az eszköz jelszavához kötött kulcs segítségével. A fejlesztő a védelmi szintet az NSFileProtectionType attribútumon keresztül határozza meg a fájl létrehozásakor: NSFileProtectionComplete — a fájl csak feloldott eszközön érhető el.

A Data Protection automatikusan működik minden iOS 5+-os eszközön, ha jelszó van beállítva. A titkosítás hardver szinten történik az Apple processzor Dedicated AES Engine-jén keresztül, ami nagy teljesítményt biztosít — a titkosítás késleltetése gyakorlatilag észrevehetetlen a felhasználó számára. A védelem aktiválásához az alkalmazásban elegendő a védelmi attribútumot beállítani a fájl FileManageren keresztüli létrehozásakor.

A Data Protection nem helyettesíti a Keychain-t a kulcsok tárolásában — fájlok, Core Data adatbázisok és más nagy adatmennyiségek titkosítására szolgál. A Keychain (kulcsokhoz) és a Data Protection (fájlokhoz) kombinációja teljes biztonságos tárolási ciklust biztosít iOS-en.

Kódpéldák: adatok titkosítása Androidon és iOS-en

Tekintsük át a Secure Storage gyakorlati példáit az Android és iOS beépített API-jainak használatával.

EncryptedSharedPreferences Kotlinban

A példa az EncryptedSharedPreferences inicializálását mutatja az Android Keystore-ból származó mesterkulccsal. Az összes későbbi olvasási és írási művelet automatikusan titkosításra és visszafejtésre kerül.

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 Swiftben

A példa az adatok iOS Keychain-ből történő mentését és olvasását mutatja be a Security framework használatával. A kód a kSecAttrAccessibleWhenUnlockedThisDeviceOnly-t használja a maximális védelem érdekében.

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 Kotlinban

Példa titkosított SQLite adatbázishoz való csatlakozásra SQLCipher segítségével, az Android Keystore-ban tárolt jelszóval.

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

// Használat: adja meg a jelszót nyitáskor
val helper = SecureDBHelper(context)
val db = helper.getWritableDatabase(password)

Ajánlások az adatok biztonságos tárolásához

A Secure Storage helyes használata néhány alapelv betartását igényli, amelyek megakadályozzák a fejlesztők tipikus hibáit.

Határozza meg az adatok osztályozását: mely adatok igényelnek hardveres védelmet (Keystore / Secure Enclave), melyek — OS szintű titkosítást (EncryptedSharedPreferences / Data Protection), és melyek tárolhatók a szokásos fájlrendszerben. Hitelesítési tokenek, privát kulcsok és fizetési adatok — csak hardver szint. Felhasználói beállítások (téma, nyelv) — elég az EncryptedSharedPreferences. Munkamenet-adatok (ideiglenes gyorsítótárak) tárolhatók a memóriában vagy ideiglenes könyvtárban.

Soha ne tároljon titkokat a kódban: API-kulcsokat, jelszavakat vagy seed kifejezéseket tartalmazó karakterláncok a forráskódban — a legsúlyosabb biztonsági hiba. Bármilyen reverse engineering azonnal felfedi ezeket az adatokat. Használja a Keystore-t a kulcsokhoz, konfigurációhoz pedig szerverről történő betöltést az alkalmazás indításakor (remote config).

Kritikus műveletekhez használjon biometrikus kötést: Az Android Keystore és az iOS Keychain támogatja a kulcsok biometrikus hitelesítéshez való kötését. Minden kulcshozzáféréskor a rendszer Face ID-t, Touch ID-t vagy Android biometriát (BiometricPrompt) kér. Ez garantálja, hogy még az eszköz feletti teljes kontroll esetén sem használhatja a támadó a tárolt adatokat a tulajdonos nélkül.

Tesztelje a védelmet: használjon biztonsági elemző eszközöket — MobSF (Mobile Security Framework) statikus elemzéshez, objection futásidejű teszteléshez és Frida a védelem megkerüléséhez. Ellenőrizze, hogy az adatok hozzáférhetetlenek-e rootolás vagy jailbreak után. Az Android lehetővé teszi a root jelenlétének ellenőrzését SafetyNet Attestation vagy Play Integrity API segítségével, az iOS — a Secure Enclave integritásának ellenőrzésével.

Rendszeresen frissítse a kriptográfiai könyvtárakat: a titkosítási könyvtárakban rendszeresen fedeznek fel sebezhetőségeket. Kövesse a CVE-ket az AndroidX Security, SQLCipher és Keychain wrapperek számára. Vezessen be automatikus értesítési rendszert az új verziókról a Dependabot vagy Renovate segítségével.

Az Apple Security Research (2025) szerint a Secure Storage helyes megvalósítása megakadályozza az eszközről történő adatlopást célzó támadások 96%-át. A fennmaradó 4% — fizikai hozzáféréssel járó támadások és zero-day exploitok, amelyekkel szemben a biometrikus kötés hatékony.

Gyakran Ismételt Kérdések

Mi a különbség a Keychain és a Keystore között?

iOS Keychain — titkosított adatbázis jelszavak, kulcsok és tanúsítványok tárolására ACL-en keresztüli hozzáférés-vezérléssel. Android Keystore — kriptográfiai szolgáltató, amely elkülönített környezetben (TEE/StrongBox) hoz létre és tárol kulcsokat, és nem teszi lehetővé a privát kulcs kinyerését.

Milyen titkosítási algoritmust használ az EncryptedSharedPreferences?

Az EncryptedSharedPreferences AES-256 GCM-et használ az értékek titkosításához és AES-256 SIV-et a kulcsok titkosításához. A fő kulcs az Android Keystore-ban van tárolva, két szintű védelmet biztosítva. Ezenkívül HMAC-SHA256-ot használ az integritás ellenőrzéséhez.

Kell-e titkosítani a HTTPS által már védett adatokat?

Igen, a HTTPS csak az átviteli csatornán védi az adatokat. Az eszközön az adatok a visszafejtés után nyílt formában tárolódnak. Ha a támadó fizikai hozzáférést szerez az eszközhöz vagy rosszindulatú szoftvert telepít, a HTTPS nem védi a tárolt adatokat. Mindig titkosítsa az adatokat tárolási szinten.

Hogyan védhetők az adatok Android rootolása után?

Használja az Android Keystore-t a setUnlockedDeviceRequired(true) jelzővel, amely blokkolja a kulcsokhoz való hozzáférést rootolt eszközökön. Ezenkívül ellenőrizze az integritást a Play Integrity API-n keresztül, és a referenciaértékektől való eltérés esetén törölje az összes titkot a tárolóból.

Használható a UserDefaults tokenek tárolására iOS-en?

Nem, a UserDefaults nyílt formában tárolja az adatokat egy plist fájlban a homokozóban. Bármely alkalmazás reverse engineering eszközökkel (biztonsági mentésen vagy jailbreak-en keresztül) olvashatja a tokeneket. Csak a Keychain — az egyetlen biztonságos hely a titkok tárolására iOS-en.

Összefoglalás

  • Secure Storage — a mobilalkalmazások kötelező védelmi összetevője, amely megakadályozza az adatszivárgást az eszközhöz való fizikai hozzáférés esetén.
  • Android Keystore a StrongBox-szal hardveres kulcstárolást biztosít egy dedikált biztonsági chipen.
  • iOS Keychain védelmi osztályokkal (WhenUnlockedThisDeviceOnly) — a titkok tárolásának szabványa az Apple platformon.
  • EncryptedSharedPreferences — kész megoldás a beállítások és tokenek titkosítására Androidon két szintű kriptográfiával.
  • SQLCipher — a választás titkosított adatbázisokhoz oldalankénti AES-256-CBC titkosítással.
  • Data Protection iOS-en és SafetyNet/Play Integrity Androidon — a fájlrendszer további védelmi szintjei.
  • Az adatok helyes osztályozása és a biometrikus kötés megakadályozza a tárolt adatok elleni támadások 96%-át az Apple Security Research szerint.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is