test: SQLCipher auf Android-Emulator verifiziert (Neuanlage verschluesselt, Klartext-Migration, Neustart ohne Re-Migration)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Bernd Steckmeister
2026-07-06 18:28:25 +02:00
parent 9693174de9
commit f2b9afbfea
4 changed files with 80 additions and 6 deletions
+53
View File
@@ -13,6 +13,59 @@ Schritt (und beim Abbruch mitten im Schritt den Zwischenstand). Format:
---
## 2026-07-06 SQLCipher auf ANDROID getestet (Emulator API 36): Neuanlage, Migration und Neustart grün
**Erledigt:** Der größte offene Teil von Testplan Punkt 4
(`docs/SQLCIPHER_MIGRATION.md`) ist jetzt real auf Android belegt kein
Gerät angeschlossen, aber der vorhandene Emulator (Medium Phone API 36.1,
x86_64, MIT Play Services) reicht für die DB-Schicht:
- **Szenario A frische Installation:** Debug-APK installiert, App
gestartet → `pyramid.sqlite` wird von Anfang an VERSCHLÜSSELT angelegt
(Header = Zufallsbytes statt „SQLite format 3", per `run-as`/`od`
verifiziert); auth_log ohne Cipher-Fallback oder Fehler.
- **Szenario B Update-Szenario (Utas Fall):** `pm clear` (auch der
Keystore-Eintrag weg) + synthetische Klartext-DB (2 Tabellen, 550
Zeilen) VOR dem ersten Start in `files/` gelegt → beim Start lief die
echte Migration: auth_log „Klartext-DB erfolgreich nach SQLCipher
migriert (2 Tabellen verifiziert)", `.premigration`-Backup liegt da,
DB danach verschlüsselt, App lief normal weiter (Login-Screen,
Screenshot geprüft). **Bewusst NICHT mit Bernds echter DB getestet**
die enthält seine Session/Olm-Account, ein Duplikat auf einem zweiten
„Gerät" würde den E2EE-State korrumpieren.
- **Szenario C Neustart:** force-stop + Relaunch → verschlüsselte DB
öffnet mit dem Schlüssel aus dem Android-Keystore, KEINE zweite
Migration, kein Fehler. Damit sind `openCipherOnAndroid`,
`sqlcipher_export` und flutter_secure_storage auf Android
(Haupt-Isolate) praktisch belegt.
- Doku nachgezogen: Status-Kopf `docs/SQLCIPHER_MIGRATION.md`,
ROADMAP-M1-Vermerk. Emulator danach heruntergefahren. Nebenbei:
`android/gradle.properties` bekam beim APK-Build automatisch zwei
Flutter-Migrator-Flags (`builtInKotlin=false`, `newDsl=false` pinnt
bestehendes Verhalten), mit committet.
**UNGETESTET bleibt (ROADMAP-Punkt weiter NICHT abgehakt):** echtes
ARM-Gerät, Migration einer ECHTEN eingeloggten Session auf Android und
der Push-Test (FCM-Background-Isolate liest verschlüsselte DB,
secure_storage im Background-Isolate) braucht ein Testgerät mit
eingeloggtem Account (Login-Daten hat nur Bernd). Erst danach Release
und Utas Gerät.
**Offen/Nächster Schritt:** auth_log-Check des weiterlaufenden
Windows-Beobachtungslaufs (Einträge seit 2026-07-06 18:19). Für Bernd
unverändert: PC_TESTPLAN 1 (Rest) + 28 durchklicken; fürs
SQLCipher-Finale ein echtes Android-Gerät anstecken (Debug-Build reicht,
Ablauf wie hier im Emulator).
**Stolperfallen:** (1) Ein Dart-Skript außerhalb des Repos kann
`package:`-Imports nicht auflösen Hilfsskripte kurz ins Repo legen
(`tool/`, untracked) und nach dem Lauf löschen. (2) Für Datei-Zugriff im
App-Sandbox-Verzeichnis braucht es eine DEBUG-APK (`run-as` geht nur bei
debuggable); das Emulator-Image hat kein `sqlite3`-Binary Test-DBs
also am PC bauen und pushen.
---
## 2026-07-06 auth_log-Check 17:43-Fenster: echter ~7-min-Netzausfall OHNE Logout überstanden (stärkster Positiv-Befund bisher)
**Erledigt:** Vierte PC-Session, zuerst der Pflicht-Check der Vorsession