App-Entwicklung3 Min. Lesezeit

Warum wir uns bei einer Banking-App für Envelope Encryption statt SQLCipher entschieden haben

SQLCipher gilt als Standard für lokale Verschlüsselung unter Android. Warum wir für eine Banking-App Envelope Encryption wählten – und mit welchen Kompromissen.

Wenn eine mobile App sensible Daten lokal speichert, kommt der Standardrat unter Android fast automatisch: Nehmen Sie SQLCipher. Es ist ausgereift, bekannt und verschlüsselt die gesamte Datenbank.

Bei einem Sicherheitsaudit mit anschließender Behebung für die Android-App einer Retail-Bank haben wir einen anderen Weg gewählt: Envelope Encryption der sensiblen Werte selbst, mit Schlüsseln im Android Keystore. In diesem Artikel erklären wir beide Optionen, warum Envelope Encryption zu dieser App passte und worauf wir dafür verzichtet haben.


Das Problem: sensible Daten im Ruhezustand

Banking-Apps cachen Daten, um schnell zu bleiben und offline nutzbar zu sein: Kontodaten, letzte Transaktionen, Profilinformationen. Liegen diese Daten unverschlüsselt auf dem Gerät, können ein gerootetes Smartphone, ein Backup oder eine forensische Kopie sie offenlegen. In den OWASP Mobile Top 10 (2024) fällt das unter M9: Insecure Data Storage und M10: Insufficient Cryptography.


Option 1: SQLCipher

SQLCipher ist ein Fork von SQLite, der die gesamte Datenbankdatei verschlüsselt.

  • Stärke: Alles ist verschlüsselt, einschließlich Indizes und Metadaten.

  • Stärke: Verschlüsselte Daten bleiben vollständig abfragbar.

  • Kosten: native Bibliotheken für jede CPU-Architektur, die die App größer machen.

  • Kosten: Der Datenbankschlüssel muss trotzdem geschützt werden, in der Regel ohnehin über den Keystore.

Option 2: Envelope Encryption

Envelope Encryption arbeitet mit zwei Schlüsselebenen:

  1. Ein Data Encryption Key (DEK) verschlüsselt die sensiblen Werte mit einem authentifizierten Verschlüsselungsverfahren wie AES-GCM.

  2. Ein Key Encryption Key (KEK) im Android Keystore verschlüsselt („wrappt“) den DEK. Der App-Code bekommt den KEK nie zu sehen, und auf unterstützten Geräten ist er hardwaregestützt.

📌 Kernaussage:

Bei beiden Ansätzen kommt der eigentliche Schutz vom Keystore. Die Entscheidung betrifft nur, was Sie damit verschlüsseln: die ganze Datei oder nur die Werte, auf die es ankommt.


Warum Envelope Encryption zu dieser App passte

1. Die meisten gespeicherten Daten waren nicht sensibel

Ein Großteil der lokalen Datenbank enthielt UI-Konfiguration und andere nicht sensible Daten. Indem wir gezielt die sensiblen Werte verschlüsselten, schützten wir das Wesentliche, ohne die Funktionsweise der übrigen Datenbank zu verändern.

2. Die App-Größe spielte eine Rolle

Der Verzicht auf SQLCipher sparte rund 6,5 MB nativen Code. Bei einer Banking-App, die viele Nutzer über mobile Daten auf Mittelklasse-Smartphones installieren, ist das ein spürbarer Unterschied.

3. Die Performance-Kosten waren messbar und gering

Den Mehraufwand für das Entschlüsseln der Werte, die ein Bildschirm anzeigt, haben wir mit etwa 1 ms pro Bildschirm gemessen – weit unter allem, was ein Nutzer bemerken könnte.

4. Ein Schlüsselmodell für alles

Dasselbe Keystore-gestützte Schlüsselmodell kann Werte in der Datenbank, in den Preferences und in Dateien schützen, statt für jeden Speicherort einen eigenen Mechanismus zu benötigen.


Die Kompromisse, die wir akzeptiert haben

  • Keine Abfragen über verschlüsselte Felder. Sensible Werte lassen sich nicht durchsuchen, sortieren oder indizieren, daher mussten Abfragen um nicht sensible Felder herum gestaltet werden.

  • Die Klassifizierung wird zur Designaufgabe. Jemand muss entscheiden und dokumentieren, welche Werte sensibel sind. Liegt man falsch, bleiben Daten unverschlüsselt.

  • Metadaten werden nicht verschlüsselt. Die Tabellenstruktur und nicht sensible Spalten bleiben lesbar.


Direkter Vergleich

Aspekt SQLCipher Envelope Encryption
Was verschlüsselt wird Gesamte Datenbankdatei Ausgewählte sensible Werte
Abfragen auf verschlüsselten Daten Ja Nein
Auswirkung auf die App-Größe Zusätzliche native Bibliotheken Rund 6,5 MB weniger in dieser App
Laufzeitkosten Verschlüsselung jeder Datenbankseite Gemessen etwa 1 ms pro Bildschirm
Designaufwand Gering Datenklassifizierung erforderlich
Am besten geeignet für Überwiegend sensible, abfragbare Daten Wenige sensible Werte in einem größeren Datenbestand

Wie Mobian solche Entscheidungen angeht

Bei Mobian wurde jede Sicherheitsänderung in diesem Audit von einem kurzen schriftlichen Entscheidungsmemo begleitet: das Risiko, die Optionen, was wir gewählt und was wir verworfen haben. Diese Dokumentation ermöglicht es dem Sicherheitsteam einer Bank – oder ihrem Auditor –, nachzuvollziehen, warum die App so funktioniert, wie sie funktioniert. Bei einer App, in der die meisten lokalen Daten sensibel sind, würden wir uns genauso bereitwillig für SQLCipher entscheiden.

Fazit

SQLCipher und Envelope Encryption verlassen sich beide auf den Android Keystore, wenn es um echten Schutz geht. Bei einer App, in der nur ein Teil der lokalen Daten sensibel ist, sparte die direkte Verschlüsselung dieser Werte 6,5 MB und kostete etwa 1 ms pro Bildschirm – im Gegenzug für eine sorgfältige Datenklassifizierung und den Verzicht auf Abfragen über verschlüsselte Felder. Die richtige Antwort hängt von Ihren Daten ab, und die Entscheidung verdient es, schriftlich festgehalten zu werden.

Häufige Fragen

Was ist Envelope Encryption?

Envelope Encryption arbeitet mit zwei Schlüsselebenen. Die Daten werden mit einem Data Encryption Key (DEK) verschlüsselt, und der DEK selbst wird von einem Key Encryption Key (KEK) verschlüsselt, also „eingewickelt“ (Key Wrapping). Unter Android kann der KEK im Android Keystore liegen, wo er dem App-Code nie offengelegt wird.

Ist SQLCipher eine schlechte Wahl?

Nein. SQLCipher ist ausgereift und verschlüsselt die gesamte Datenbankdatei, einschließlich Indizes und Metadaten. Es passt gut, wenn der Großteil der Datenbank sensibel ist oder verschlüsselte Daten abfragbar bleiben müssen. Allerdings fügt es der App native Bibliotheken hinzu und verändert die Funktionsweise der Datenbankschicht.

Was hat Envelope Encryption in diesem Projekt eingespart?

Der Verzicht auf SQLCipher sparte rund 6,5 MB nativen Code in der App – bei gemessenen Kosten von etwa 1 ms pro Bildschirm für das Ver- und Entschlüsseln der angezeigten sensiblen Werte.

Was ist der größte Nachteil von Envelope Encryption auf Feldebene?

Verschlüsselte Felder können von der Datenbank nicht durchsucht, sortiert oder indiziert werden. Sie müssen sorgfältig entscheiden, welche Werte sensibel sind, und Abfragen um nicht sensible Felder herum gestalten. Die Verschlüsselung der gesamten Datenbank erspart diese Designarbeit.

Erfüllt Envelope Encryption die OWASP-Anforderungen?

Richtig umgesetzt – mit hardwaregestützten Schlüsseln, wo verfügbar, und einem authentifizierten Verschlüsselungsverfahren wie AES-GCM – adressiert sie die Kategorien unsichere Datenspeicherung und unzureichende Kryptografie der OWASP Mobile Top 10 (2024). Ob sie ein bestimmtes Audit besteht, hängt von dessen Anforderungen ab.

Kostenlose Einschätzung · unverbindlich

Sie planen ein Projekt mit diesem Stack?

Wir haben mit den Tools gearbeitet, über die wir schreiben. Erzählen Sie uns von Ihrem Projekt und holen Sie sich eine Zweitmeinung von Engineers, die damit Produkte ausgeliefert haben.

  • 1Wir sehen uns Ihr Produkt, Ihren Tech-Stack und Ihre Roadmap an
  • 2Wir benennen Risiken, die wir aus ähnlichen Projekten kennen
  • 3Innerhalb von 48 Stunden erhalten Sie eine Teamaufstellung und einen groben Zeitplan

Erzählen Sie uns von Ihrem Projekt

Lieber zuerst sprechen? 30-Minuten-Gespräch buchen