Secure Storage v mobilních aplikacích: co to je, metody a implementace

Autor: IT Sectr Publikováno: 2026-04-04 Doba čtení: 9 min

Secure Storage (bezpečné ukládání) — soubor metod a technologií pro ochranu důvěrných dat na zařízení: tokenů, šifrovacích klíčů, platebních informací a osobních údajů uživatelů. Podle OWASP Mobile Top 10 (2024) patří nebezpečné ukládání dat mezi tři nejkritičtější rizika. Správná implementace bezpečného ukládání zabraňuje únikům dat i při fyzickém přístupu k zařízení.

Hlavní body

  • Secure Storage — soubor metod šifrování a izolace dat na zařízení pro zabránění přístupu jiných aplikací a útočníků.
  • Android Keystore — kryptografické úložiště, které generuje a chrání klíče na hardwarové úrovni (TEE).
  • iOS Keychain — chráněná databáze pro ukládání tajemství, šifrovaná na úrovni OS s přístupem přes Security framework.
  • EncryptedSharedPreferences — knihovna Android Jetpack pro šifrování párů klíč-hodnota pomocí AES-256.
  • Data Protection API — mechanismus iOS, který šifruje soubory na základě třídy ochrany vázané na stav uzamčení zařízení.

Co je Secure Storage?

Secure Storage — praxe ukládání důvěrných dat mobilní aplikace tak, aby byla nepřístupná jiným aplikacím, škodlivému softwaru a útočníkovi s fyzickým přístupem k zařízení. Na rozdíl od běžného ukládání používá Secure Storage šifrování, izolaci a hardwarovou ochranu.

Ne všechna data vyžadují Secure Storage: profilové obrázky nebo mezipaměť zpráv lze ukládat v běžném souborovém systému. Šifrovací klíče, autentizační tokeny, platební údaje, soukromé klíče a biometrické šablony však musí být chráněny. Podle Google Security Blog (2025) souvisí 67% zranitelností v mobilních aplikacích s ukládáním tajemství v otevřené podobě.

Každá mobilní platforma poskytuje vlastní mechanismy Secure Storage: Android — Keystore a EncryptedSharedPreferences, iOS — Keychain a Data Protection API. Tyto mechanismy jsou integrovány s hardwarovými bezpečnostními moduly (TEE, Secure Enclave) a zaručují, že data nelze přečíst ani po jailbreaku nebo rootování zařízení.

Správný výběr metody Secure Storage závisí na typu dat, scénáři použití a požadavcích na výkon. Pochopení architektury každého mechanismu umožňuje vývojáři učinit správné architektonické rozhodnutí.

Secure Storage na Androidu

Platforma Android poskytuje několik úrovní ochrany dat, od hardwarového úložiště klíčů po šifrované SharedPreferences. Volba závisí na citlivosti dat a požadavcích na výkon.

Android Keystore — hardwarové ukládání klíčů

Android Keystore — kryptografický poskytovatel, který generuje a ukládá klíče v izolovaném prostředí (TEE — Trusted Execution Environment) na zařízeních s podporou hardwarové ochrany. Klíče nikdy neopouštějí TEE: kryptografické operace jsou prováděny uvnitř chráněné oblasti nepřístupné i operačnímu systému.

Od Androidu 9 (API 28) Keystore podporuje StrongBox Keymaster — dedikovaný bezpečnostní čip s vlastním CPU, generátorem skutečných náhodných čísel (TRNG) a chráněnou pamětí. StrongBox je certifikován podle Common Criteria EAL 4+ a představuje nejbezpečnější úroveň ukládání klíčů na Androidu. Pro použití StrongBox je nutné explicitně uvést příznak inStrongBox() při generování klíče.

Keystore podporuje algoritmy: AES/GCM/NoPadding (256 bitů), EC (secp256r1, secp384r1), RSA (2048–4096 bitů) a HMAC-SHA256. Všechny klíče lze připojit k biometrické autentizaci pomocí setUserAuthenticationRequired(true).

EncryptedSharedPreferences

EncryptedSharedPreferences — knihovna z balíčku AndroidX Security, která automaticky šifruje všechna data uložená prostřednictvím API SharedPreferences. Hodnoty jsou šifrovány klíčem AES-256 GCM a klíče — AES-256 SIV (syntetický IV), což zabraňuje slovníkovým útokům na názvy klíčů.

Hlavní šifrovací klíč je uložen v Android Keystore, což poskytuje dvouúrovňovou ochranu: Keystore chrání hlavní klíč, EncryptedSharedPreferences chrání data. Výkon šifrování je u typických dat (token, nastavení) nižší než 5 ms na operaci čtení/zápisu, což knihovnu činí vhodnou pro uživatelské scénáře.

EncryptedSharedPreferences není určena pro velké objemy dat (více než 5 MB) — v takových případech použijte šifrovanou databázi prostřednictvím SQLCipher nebo Room se šifrováním.

SQLCipher — šifrovaná databáze

SQLCipher — rozšíření SQLite, které šifruje celou databázi stránku po stránce pomocí AES-256-CBC. Každá stránka databáze je šifrována samostatným klíčem odvozeným z hlavního hesla pomocí PBKDF2. SQLCipher přidává přibližně 5–15% režii výkonu v závislosti na velikosti dat.

Integrace s Androidem probíhá prostřednictvím knihovny net.zetetic:android-database-sqlcipher, která poskytuje API kompatibilní se standardním SQLiteOpenHelper. Heslo pro SQLCipher se doporučuje ukládat do Keystore, nikoli do kódu nebo SharedPreferences.

Secure Storage na iOS

Platforma iOS poskytuje Keychain Services — hlavní chráněné úložiště, a také Data Protection API pro šifrování souborů na úrovni OS.

Keychain Services

Keychain — šifrovaná databáze SQLite, ve které iOS ukládá hesla, šifrovací klíče, certifikáty a poznámky. Každý prvek Keychain (SecItem) je uložen v šifrované podobě pomocí hardwarového klíče jedinečného pro zařízení. Přístup k prvku je řízen prostřednictvím ACL (Access Control List), který může vyžadovat biometrickou autentizaci (Face ID, Touch ID) nebo heslo.

Keychain podporuje třídy ochrany (Protection Class), které určují, kdy jsou data dostupná: kSecAttrAccessibleWhenUnlockedThisDeviceOnly — data jsou dostupná pouze při odemčeném zařízení a nepřenášejí se při zálohování. Tato třída se doporučuje pro většinu scénářů ukládání autentizačních tokenů.

Na iOS 15+ je k dispozici Security framework s podporou hardwarových klíčů prostřednictvím Secure Enclave — dedikovaného procesoru Apple, který zpracovává kryptografické operace a ukládá soukromé klíče v izolované paměti. Secure Enclave podporuje algoritmy ECDSA (secp256r1) a ECDH pro generování klíčů, které nelze z čipu extrahovat.

Data Protection API

Data Protection — mechanismus iOS, který šifruje každý soubor na úrovni souborového systému (APFS) pomocí klíče vázaného na heslo zařízení. Vývojář určuje úroveň ochrany prostřednictvím atributu NSFileProtectionType při vytváření souboru: NSFileProtectionComplete — soubor je dostupný pouze při odemčeném zařízení.

Data Protection funguje automaticky na všech zařízeních s iOS 5+, pokud je nastaveno heslo. Šifrování probíhá na hardwarové úrovni prostřednictvím Dedicated AES Engine procesoru Apple, což zajišťuje vysoký výkon — zpoždění šifrování je pro uživatele prakticky nepostřehnutelné. Pro aktivaci ochrany v aplikaci stačí nastavit atribut ochrany při vytváření souboru prostřednictvím FileManager.

Data Protection nenahrazuje Keychain pro ukládání klíčů — používá se pro šifrování souborů, databází Core Data a dalších velkých objemů dat. Kombinace Keychain (pro klíče) a Data Protection (pro soubory) poskytuje úplný cyklus bezpečného ukládání na iOS.

Příklady kódu: šifrování dat na Androidu a iOS

Podívejme se na praktické příklady Secure Storage s použitím vestavěných API Androidu a iOS.

EncryptedSharedPreferences v Kotlin

Příklad ukazuje inicializaci EncryptedSharedPreferences s hlavním klíčem z Android Keystore. Všechny následující operace čtení a zápisu jsou automaticky šifrovány a dešifrovány.

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

Příklad demonstruje ukládání a čtení dat z iOS Keychain pomocí Security framework. Kód používá kSecAttrAccessibleWhenUnlockedThisDeviceOnly pro maximální ochranu.

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

Příklad připojení k šifrované databázi SQLite prostřednictvím SQLCipher s heslem uloženým v 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)
    }
}

// Použití: zadejte heslo při otevírání
val helper = SecureDBHelper(context)
val db = helper.getWritableDatabase(password)

Doporučení pro bezpečné ukládání dat

Správné použití Secure Storage vyžaduje dodržování několika základních principů, které zabraňují typickým chybám vývojářů.

Stanovte klasifikaci dat: která data vyžadují hardwarovou ochranu (Keystore / Secure Enclave), která — šifrování na úrovni OS (EncryptedSharedPreferences / Data Protection) a která lze ukládat v běžném souborovém systému. Autentizační tokeny, soukromé klíče a platební údaje — pouze hardwarová úroveň. Uživatelská nastavení (téma, jazyk) — stačí EncryptedSharedPreferences. Data relace (dočasné mezipaměti) lze ukládat do paměti nebo dočasného adresáře.

Nikdy neukládejte tajemství do kódu: řetězce s API klíči, hesly nebo seed frázemi ve zdrojovém kódu — nejzávažnější bezpečnostní chyba. Jakýkoli reverse engineering tato data okamžitě odhalí. Používejte Keystore pro klíče a pro konfiguraci — načítání ze serveru při spuštění aplikace (remote config).

Používejte biometrické vázání pro kritické operace: Android Keystore a iOS Keychain podporují vázání klíčů na biometrickou autentizaci. Při každém přístupu ke klíči systém vyžaduje Face ID, Touch ID nebo biometrii Android (BiometricPrompt). To zaručuje, že ani při plné kontrole nad zařízením nemůže útočník použít uložená data bez vlastníka.

Testujte ochranu: používejte nástroje pro analýzu zabezpečení — MobSF (Mobile Security Framework) pro statickou analýzu, objection pro runtime testování a Frida pro obcházení ochrany. Zkontrolujte, že data jsou po rootování nebo jailbreaku nepřístupná. Android umožňuje kontrolu přítomnosti root přístupu prostřednictvím SafetyNet Attestation nebo Play Integrity API, iOS — prostřednictvím ověření integrity Secure Enclave.

Pravidelně aktualizujte kryptografické knihovny: zranitelnosti v šifrovacích knihovnách jsou pravidelně objevovány. Sledujte CVE pro AndroidX Security, SQLCipher a wrappery Keychain. Zaveďte systém automatických upozornění na nové verze prostřednictvím Dependabot nebo Renovate.

Podle Apple Security Research (2025) správná implementace Secure Storage zabraňuje 96% útoků zaměřených na krádež dat ze zařízení. Zbývající 4% — útoky s fyzickým přístupem a exploity nultého dne, proti kterým je účinné biometrické vázání.

Často kladené dotazy

Jaký je rozdíl mezi Keychain a Keystore?

iOS Keychain — šifrovaná databáze pro ukládání hesel, klíčů a certifikátů s řízením přístupu přes ACL. Android Keystore — kryptografický poskytovatel, který generuje a ukládá klíče v izolovaném prostředí (TEE/StrongBox) a neumožňuje extrakci soukromého klíče.

Jaký šifrovací algoritmus se používá v EncryptedSharedPreferences?

EncryptedSharedPreferences používá AES-256 GCM pro šifrování hodnot a AES-256 SIV pro šifrování klíčů. Hlavní klíč je uložen v Android Keystore, což poskytuje dvouúrovňovou ochranu. Dále se používá HMAC-SHA256 pro kontrolu integrity.

Je třeba šifrovat data již chráněná HTTPS?

Ano, HTTPS chrání data pouze v přenosovém kanálu. Na zařízení jsou data po dešifrování uložena v otevřené podobě. Pokud útočník získá fyzický přístup k zařízení nebo nainstaluje škodlivý software, HTTPS uložená data neochrání. Vždy šifrujte data na úrovni úložiště.

Jak chránit data po rootování Androidu?

Použijte Android Keystore s příznakem setUnlockedDeviceRequired(true), který blokuje přístup ke klíčům na rootovaných zařízeních. Dále kontrolujte integritu prostřednictvím Play Integrity API a při odchylce od referenčních hodnot vymažte všechna tajemství z úložiště.

Lze použít UserDefaults pro ukládání tokenů na iOS?

Ne, UserDefaults ukládá data v otevřené podobě v souboru plist v sandboxu. Jakákoli aplikace s nástroji pro reverse engineering (prostřednictvím zálohy nebo jailbreaku) může tokeny přečíst. Pouze Keychain — jediné bezpečné místo pro ukládání tajemství na iOS.

Shrnutí

  • Secure Storage — povinná součást ochrany mobilních aplikací, která zabraňuje úniku dat při fyzickém přístupu k zařízení.
  • Android Keystore se StrongBox zajišťuje hardwarové ukládání klíčů na dedikovaném bezpečnostním čipu.
  • iOS Keychain s třídami ochrany (WhenUnlockedThisDeviceOnly) — standard ukládání tajemství na platformě Apple.
  • EncryptedSharedPreferences — hotové řešení pro šifrování nastavení a tokenů na Androidu s dvouúrovňovou kryptografií.
  • SQLCipher — volba pro šifrované databáze se stránkovým šifrováním AES-256-CBC.
  • Data Protection na iOS a SafetyNet/Play Integrity na Androidu — další úrovně ochrany souborového systému.
  • Správná klasifikace dat a biometrické vázání zabraňují 96% útoků na uložená data podle Apple Security Research.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také