Secure Storage in mobilen Apps: Was es ist, Methoden und Implementierung

Autor: IT Sectr Veröffentlicht: 2026-04-04 Lesezeit: 9 Min.

Secure Storage ist eine Reihe von Methoden und Technologien zum Schutz vertraulicher Daten auf einem Gerät: Tokens, Verschlüsselungsschlüssel, Zahlungsinformationen und persönliche Daten der Benutzer. Laut OWASP Mobile Top 10 (2024) gehört unsichere Datenspeicherung zu den drei kritischsten Risiken. Eine ordnungsgemäße Implementierung von Secure Storage verhindert Datenlecks selbst bei physischem Zugriff auf das Gerät.

Das Wichtigste

  • Secure Storage — eine Reihe von Verschlüsselungs- und Datenisolationsmethoden auf dem Gerät, um den Zugriff durch andere Anwendungen und Angreifer zu verhindern.
  • Android Keystore — ein kryptografischer Speicher, der Schlüssel auf Hardwareebene (TEE) generiert und schützt.
  • iOS Keychain — eine sichere Datenbank zur Aufbewahrung von Geheimnissen, auf Betriebssystemebene verschlüsselt mit Zugriff über das Security Framework.
  • EncryptedSharedPreferences — eine Android Jetpack-Bibliothek zum Verschlüsseln von Schlüssel-Wert-Paaren mit AES-256.
  • Data Protection API — ein iOS-Mechanismus, der Dateien basierend auf einer an den Gerätesperrstatus gebundenen Schutzklasse verschlüsselt.

Was ist Secure Storage?

Secure Storage ist die Praxis, vertrauliche Daten einer mobilen Anwendung so zu speichern, dass sie für andere Anwendungen, Malware und Angreifer mit physischem Zugriff auf das Gerät unzugänglich sind. Im Gegensatz zur normalen Speicherung verwendet Secure Storage Verschlüsselung, Isolierung und Hardwareschutz.

Nicht alle Daten benötigen Secure Storage: Profilbilder oder Nachrichtencaches können im normalen Dateisystem gespeichert werden. Verschlüsselungsschlüssel, Authentifizierungstokens, Zahlungsdaten, private Schlüssel und biometrische Vorlagen müssen jedoch geschützt werden. Laut Google Security Blog (2025) stehen 67 % der Schwachstellen in mobilen Anwendungen im Zusammenhang mit der Speicherung von Geheimnissen im Klartext.

Jede mobile Plattform bietet ihre eigenen Secure-Storage-Mechanismen: Android — Keystore und EncryptedSharedPreferences, iOS — Keychain und Data Protection API. Diese Mechanismen sind in Hardware-Sicherheitsmodule (TEE, Secure Enclave) integriert und garantieren, dass Daten auch nach Jailbreak oder Rooten des Geräts nicht gelesen werden können.

Die richtige Wahl der Secure-Storage-Methode hängt von der Datenart, dem Nutzungsszenario und den Leistungsanforderungen ab. Das Verständnis der Architektur jedes Mechanismus ermöglicht es dem Entwickler, die richtige architektonische Entscheidung zu treffen.

Secure Storage auf Android

Die Android-Plattform bietet mehrere Ebenen des Datenschutzes, von der Hardwareschlüsselspeicherung bis zu verschlüsselten SharedPreferences. Die Wahl hängt von der Sensitivität der Daten und den Leistungsanforderungen ab.

Android Keystore — Hardwareschlüsselspeicher

Android Keystore ist ein kryptografischer Anbieter, der Schlüssel in einer isolierten Ausführungsumgebung (TEE — Trusted Execution Environment) auf Geräten mit Hardwareschutzunterstützung generiert und speichert. Schlüssel verlassen niemals die TEE: Kryptografische Operationen werden innerhalb eines geschützten Bereichs ausgeführt, der selbst für das Betriebssystem unzugänglich ist.

Ab Android 9 (API 28) unterstützt Keystore StrongBox Keymaster — einen dedizierten Sicherheitschip mit eigener CPU, echtem Zufallszahlengenerator (TRNG) und geschütztem Speicher. StrongBox ist nach Common Criteria EAL 4+ zertifiziert und stellt die höchste Stufe der Schlüsselspeichersicherheit auf Android dar. Um StrongBox zu verwenden, müssen Sie beim Generieren eines Schlüssels explizit das Flag inStrongBox() angeben.

Keystore unterstützt die Algorithmen: AES/GCM/NoPadding (256 Bit), EC (secp256r1, secp384r1), RSA (2048–4096 Bit) und HMAC-SHA256. Alle Schlüssel können über setUserAuthenticationRequired(true) an die biometrische Authentifizierung gebunden werden.

EncryptedSharedPreferences

EncryptedSharedPreferences ist eine Bibliothek aus dem AndroidX Security-Paket, die alle über die SharedPreferences-API gespeicherten Daten automatisch verschlüsselt. Werte werden mit einem AES-256-GCM-Schlüssel und Schlüssel mit AES-256-SIV (synthetischer IV) verschlüsselt, wodurch Wörterbuchangriffe auf Schlüsselnamen verhindert werden.

Der Hauptverschlüsselungsschlüssel wird im Android Keystore gespeichert und bietet einen zweistufigen Schutz: Keystore schützt den Masterschlüssel, EncryptedSharedPreferences schützt die Daten. Die Verschlüsselungsleistung beträgt weniger als 5 ms pro Lese-/Schreibvorgang für typische Daten (Token, Einstellungen), was die Bibliothek für Benutzerszenarien geeignet macht.

EncryptedSharedPreferences ist nicht für große Datenmengen (mehr als 5 MB) ausgelegt — verwenden Sie dafür eine verschlüsselte Datenbank über SQLCipher oder Room mit Verschlüsselung.

SQLCipher — Verschlüsselte Datenbank

SQLCipher ist eine Erweiterung von SQLite, die die gesamte Datenbank seitenweise mit AES-256-CBC verschlüsselt. Jede Seite der Datenbank wird mit einem separaten Schlüssel verschlüsselt, der über PBKDF2 vom Master-Passwort abgeleitet wird. SQLCipher fügt je nach Datengröße etwa 5–15 % Leistungsaufwand hinzu.

Die Integration mit Android erfolgt über die Bibliothek net.zetetic:android-database-sqlcipher, die eine mit dem Standard-SQLiteOpenHelper kompatible API bereitstellt. Das Passwort für SQLCipher sollte im Keystore aufbewahrt werden, nicht im Code oder in SharedPreferences.

Secure Storage auf iOS

Die iOS-Plattform bietet Keychain Services als Hauptspeicher für sichere Daten sowie die Data Protection API zur Dateiverschlüsselung auf Betriebssystemebene.

Keychain Services

Keychain ist eine verschlüsselte SQLite-Datenbank, in der iOS Passwörter, Verschlüsselungsschlüssel, Zertifikate und Notizen speichert. Jedes Keychain-Element (SecItem) wird mit einem geräteeindeutigen Hardwareschlüssel verschlüsselt gespeichert. Der Zugriff auf ein Element wird über eine ACL (Access Control List) gesteuert, die eine biometrische Authentifizierung (Face ID, Touch ID) oder einen Passcode erfordern kann.

Keychain unterstützt Schutzklassen, die festlegen, wann Daten zugänglich sind: kSecAttrAccessibleWhenUnlockedThisDeviceOnly — Daten sind nur bei entsperrtem Gerät zugänglich und werden während des Backups nicht übertragen. Diese Klasse wird für die meisten Authentifizierungstoken-Speicherszenarien empfohlen.

Unter iOS 15+ ist das Security Framework mit Hardwareschlüsselunterstützung über die Secure Enclave verfügbar — ein dedizierter Apple-Prozessor, der kryptografische Operationen durchführt und private Schlüssel in isoliertem Speicher aufbewahrt. Secure Enclave unterstützt die Algorithmen ECDSA (secp256r1) und ECDH zum Generieren von Schlüsseln, die nicht aus dem Chip extrahiert werden können.

Data Protection API

Data Protection ist ein iOS-Mechanismus, der jede Datei auf Dateisystemebene (APFS) mit einem an den Gerätepasscode gebundenen Schlüssel verschlüsselt. Der Entwickler gibt die Schutzstufe über das Attribut NSFileProtectionType beim Erstellen einer Datei an: NSFileProtectionComplete — die Datei ist nur bei entsperrtem Gerät zugänglich.

Data Protection funktioniert automatisch auf allen Geräten mit iOS 5+, wenn ein Passcode eingerichtet ist. Die Verschlüsselung erfolgt auf Hardwareebene über die Dedicated AES Engine des Apple-Prozessors, was eine hohe Leistung gewährleistet — die Verschlüsselungslatenz ist für den Benutzer praktisch nicht wahrnehmbar. Um den Schutz in einer Anwendung zu aktivieren, reicht es aus, das Schutzattribut beim Erstellen einer Datei über FileManager zu setzen.

Data Protection ersetzt nicht Keychain zum Speichern von Schlüsseln — es wird zum Verschlüsseln von Dateien, Core Data-Datenbanken und anderen großen Datenmengen verwendet. Die Kombination von Keychain (für Schlüssel) und Data Protection (für Dateien) bietet einen vollständigen sicheren Speicherzyklus unter iOS.

Codebeispiele: Datenverschlüsselung auf Android und iOS

Schauen wir uns praktische Beispiele für Secure Storage mit den integrierten Android- und iOS-APIs an.

EncryptedSharedPreferences in Kotlin

Das Beispiel zeigt die Initialisierung von EncryptedSharedPreferences mit einem Masterschlüssel aus dem Android Keystore. Alle nachfolgenden Lese- und Schreibvorgänge werden automatisch ver- und entschlüsselt.

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

Das Beispiel zeigt das Speichern und Lesen von Daten aus dem iOS Keychain mit dem Security Framework. Der Code verwendet kSecAttrAccessibleWhenUnlockedThisDeviceOnly für maximalen Schutz.

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

Ein Beispiel für die Verbindung zu einer verschlüsselten SQLite-Datenbank über SQLCipher mit einem im Android Keystore gespeicherten Passwort.

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

// Verwendung: Passwort beim Öffnen übergeben
val helper = SecureDBHelper(context)
val db = helper.getWritableDatabase(password)

Empfehlungen zur sicheren Datenspeicherung

Die ordnungsgemäße Verwendung von Secure Storage erfordert die Einhaltung mehrerer grundlegender Prinzipien, die häufige Entwicklerfehler verhindern.

Definieren Sie die Datenklassifizierung: Welche Daten benötigen Hardwareschutz (Keystore / Secure Enclave), welche eine Verschlüsselung auf Betriebssystemebene (EncryptedSharedPreferences / Data Protection) und welche im normalen Dateisystem gespeichert werden können. Authentifizierungstokens, private Schlüssel und Zahlungsdaten — nur Hardwareebene. Benutzereinstellungen (Design, Sprache) — EncryptedSharedPreferences ist ausreichend. Sitzungsdaten (temporäre Caches) können im Arbeitsspeicher oder in einem temporären Verzeichnis gespeichert werden.

Speichern Sie niemals Geheimnisse im Code: Zeichenfolgen mit API-Schlüsseln, Passwörtern oder Seed-Phrasen im Quellcode sind ein schwerwiegender Sicherheitsfehler. Jedes Reverse Engineering wird diese Daten sofort offenlegen. Verwenden Sie Keystore für Schlüssel und für die Konfiguration — serverseitiges Laden beim Anwendungsstart (Remote Config).

Verwenden Sie biometrische Bindung für kritische Operationen: Android Keystore und iOS Keychain unterstützen die Bindung von Schlüsseln an die biometrische Authentifizierung. Bei jedem Zugriff auf einen Schlüssel fordert das System Face ID, Touch ID oder die Android-Biometrie (BiometricPrompt) an. Dadurch wird sichergestellt, dass ein Angreifer die gespeicherten Daten selbst bei vollständiger Kontrolle über das Gerät nicht ohne den Eigentümer verwenden kann.

Testen Sie die Sicherheit: Verwenden Sie Sicherheitsanalysetools — MobSF (Mobile Security Framework) für die statische Analyse, objection für Laufzeittests und Frida zur Umgehung des Schutzes. Stellen Sie sicher, dass Daten nach Rooten oder Jailbreak nicht zugänglich sind. Android ermöglicht die Überprüfung des Root-Zugriffs über SafetyNet Attestation oder Play Integrity API, iOS — über die Integritätsprüfung der Secure Enclave.

Aktualisieren Sie regelmäßig kryptografische Bibliotheken: Schwachstellen in Verschlüsselungsbibliotheken werden regelmäßig entdeckt. Überwachen Sie CVEs für AndroidX Security, SQLCipher und Keychain-Wrapper. Implementieren Sie ein automatisches Benachrichtigungssystem für neue Versionen über Dependabot oder Renovate.

Laut Apple Security Research (2025) verhindert die ordnungsgemäße Implementierung von Secure Storage 96 % der Angriffe, die auf Datendiebstahl vom Gerät abzielen. Die restlichen 4 % sind Angriffe mit physischem Zugriff und Zero-Day-Exploits, gegen die biometrische Bindung wirksam ist.

Häufig gestellte Fragen

Was ist der Unterschied zwischen Keychain und Keystore?

iOS Keychain ist eine verschlüsselte Datenbank zum Speichern von Passwörtern, Schlüsseln und Zertifikaten mit Zugriffskontrolle über ACL. Android Keystore ist ein kryptografischer Anbieter, der Schlüssel in einer isolierten Umgebung (TEE/StrongBox) generiert und speichert und das Extrahieren des privaten Schlüssels nicht zulässt.

Welchen Verschlüsselungsalgorithmus verwendet EncryptedSharedPreferences?

EncryptedSharedPreferences verwendet AES-256 GCM zum Verschlüsseln von Werten und AES-256 SIV zum Verschlüsseln von Schlüsseln. Der Masterschlüssel wird im Android Keystore gespeichert und bietet zweistufigen Schutz. Zusätzlich wird HMAC-SHA256 zur Integritätsprüfung verwendet.

Muss ich Daten verschlüsseln, die bereits durch HTTPS geschützt sind?

Ja, HTTPS schützt Daten nur im Übertragungskanal. Auf dem Gerät werden Daten nach der Entschlüsselung im Klartext gespeichert. Wenn ein Angreifer physischen Zugriff auf das Gerät erhält oder Malware installiert, schützt HTTPS die gespeicherten Daten nicht. Verschlüsseln Sie Daten immer auf Speicherebene.

Wie schütze ich Daten nach dem Rooten von Android?

Verwenden Sie Android Keystore mit dem Flag setUnlockedDeviceRequired(true), das den Zugriff auf Schlüssel auf gerooteten Geräten blockiert. Überprüfen Sie zusätzlich die Integrität über die Play Integrity API und löschen Sie bei Abweichung von den Referenzwerten alle Geheimnisse aus dem Speicher.

Kann ich UserDefaults zum Speichern von Tokens unter iOS verwenden?

Nein, UserDefaults speichert Daten im Klartext in einer plist-Datei innerhalb der Sandbox. Jede Anwendung mit Reverse-Engineering-Tools (über Backup oder Jailbreak) kann die Tokens lesen. Nur Keychain ist der einzige sichere Ort zur Aufbewahrung von Geheimnissen unter iOS.

Zusammenfassung

  • Secure Storage ist eine wesentliche Komponente des Schutzes mobiler Anwendungen und verhindert Datenlecks bei physischem Zugriff auf das Gerät.
  • Android Keystore mit StrongBox bietet Hardwareschlüsselspeicherung auf einem dedizierten Sicherheitschip.
  • iOS Keychain mit Schutzklassen (WhenUnlockedThisDeviceOnly) ist der Standard zum Speichern von Geheimnissen auf der Apple-Plattform.
  • EncryptedSharedPreferences ist eine fertige Lösung zum Verschlüsseln von Einstellungen und Tokens auf Android mit zweistufiger Kryptografie.
  • SQLCipher ist die Wahl für verschlüsselte Datenbanken mit seitenweiser AES-256-CBC-Verschlüsselung.
  • Data Protection auf iOS und SafetyNet/Play Integrity auf Android sind zusätzliche Dateisystem-Schutzebenen.
  • Richtige Datenklassifizierung und biometrische Bindung verhindern laut Apple Security Research 96 % der Angriffe auf gespeicherte Daten.

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch