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:
+53
@@ -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) + 2–8 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)
|
## 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
|
**Erledigt:** Vierte PC-Session, zuerst der Pflicht-Check der Vorsession
|
||||||
|
|||||||
+7
-3
@@ -48,9 +48,13 @@ Punkte abhaken (`[x]`), wenn erledigt UND in `PROGRESS.md` protokolliert.
|
|||||||
Backup/Verifikation/atomarem Tausch, Push-Isolate-Marker). Bernds echte
|
Backup/Verifikation/atomarem Tausch, Push-Isolate-Marker). Bernds echte
|
||||||
Windows-DB wurde erfolgreich migriert (PROGRESS.md 2026-07-06), Tests in
|
Windows-DB wurde erfolgreich migriert (PROGRESS.md 2026-07-06), Tests in
|
||||||
`test/app_database_test.dart` fahren die Migration mit echtem SQLCipher.
|
`test/app_database_test.dart` fahren die Migration mit echtem SQLCipher.
|
||||||
**Bleibt offen, weil Android UNGETESTET ist** (Migration auf Gerät,
|
**Nachtrag 2026-07-06 (vierte PC-Session): Android-EMULATOR-Test grün**
|
||||||
Push-Isolate liest verschlüsselte DB, secure_storage im
|
(API 36: Neuanlage verschlüsselt, Klartext-Migration beim ersten Start,
|
||||||
Background-Isolate) – Testplan Punkt 4 in `docs/SQLCIPHER_MIGRATION.md`;
|
Neustart mit Keystore-Schlüssel ohne Re-Migration – Details im
|
||||||
|
Status-Kopf von `docs/SQLCIPHER_MIGRATION.md`). **Bleibt offen:**
|
||||||
|
echtes ARM-Gerät mit eingeloggter Session + Push-Isolate-Test
|
||||||
|
(FCM liest verschlüsselte DB, secure_storage im Background-Isolate) –
|
||||||
|
Testplan Punkt 4 in `docs/SQLCIPHER_MIGRATION.md`;
|
||||||
erst nach grünem Gerätetest Release + Utas Gerät (vorher ihr Key-Backup
|
erst nach grünem Gerätetest Release + Utas Gerät (vorher ihr Key-Backup
|
||||||
prüfen!), dann abhaken.
|
prüfen!), dann abhaken.
|
||||||
`sqlcipher_flutter_libs` steht zwar in `pubspec.yaml`, wird aber nirgends
|
`sqlcipher_flutter_libs` steht zwar in `pubspec.yaml`, wird aber nirgends
|
||||||
|
|||||||
@@ -1,2 +1,6 @@
|
|||||||
org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
|
org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
|
||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
|
# This builtInKotlin flag was added automatically by Flutter migrator
|
||||||
|
android.builtInKotlin=false
|
||||||
|
# This newDsl flag was added automatically by Flutter migrator
|
||||||
|
android.newDsl=false
|
||||||
|
|||||||
@@ -4,9 +4,22 @@
|
|||||||
> Windows mit Bernds echter 14-MB-DB praxisgetestet** (Migration gelaufen,
|
> Windows mit Bernds echter 14-MB-DB praxisgetestet** (Migration gelaufen,
|
||||||
> 23 Tabellen verifiziert, Login/E2EE danach intakt, Neustart öffnet die
|
> 23 Tabellen verifiziert, Login/E2EE danach intakt, Neustart öffnet die
|
||||||
> verschlüsselte DB, `flutter test` deckt Migration/Fehlpfade mit echtem
|
> verschlüsselte DB, `flutter test` deckt Migration/Fehlpfade mit echtem
|
||||||
> SQLCipher ab). **Android bleibt UNGETESTET** (Punkt 4 des Testplans unten:
|
> SQLCipher ab).
|
||||||
> Migration auf Gerät, Push-Isolate + secure_storage) – erst danach Release
|
> **Android-Emulator-Test 2026-07-06 (API 36, x86_64, Debug-APK) GRÜN:**
|
||||||
> und Uta. **Abweichung vom Plan unten:** Die Annahme „keine Desktop-Binaries"
|
> (a) frische Installation legt die DB direkt verschlüsselt an
|
||||||
|
> (Header = Zufallsbytes, per run-as verifiziert), kein Cipher-Fallback im
|
||||||
|
> auth_log; (b) Update-Szenario nach `pm clear` + untergeschobener
|
||||||
|
> Klartext-DB (synthetisch, 2 Tabellen/550 Zeilen): Migration lief beim
|
||||||
|
> ersten Start („2 Tabellen verifiziert" im auth_log), `.premigration`
|
||||||
|
> liegt da, DB danach verschlüsselt; (c) Neustart öffnet mit dem
|
||||||
|
> Keystore-Schlüssel OHNE Re-Migration, App rendert normal den
|
||||||
|
> Login-Screen. Damit sind openCipherOnAndroid, sqlcipher_export und
|
||||||
|
> flutter_secure_storage auf Android (Haupt-Isolate) real belegt.
|
||||||
|
> **Offen bleibt (deshalb Punkt 4 NICHT voll abgehakt):** echtes
|
||||||
|
> ARM-Gerät, Migration einer ECHTEN eingeloggten Session auf Android und
|
||||||
|
> der Push-Test (FCM-Isolate liest verschlüsselte DB, secure_storage im
|
||||||
|
> Background-Isolate) – braucht ein Testgerät mit eingeloggtem Account.
|
||||||
|
> Erst danach Release und Uta. **Abweichung vom Plan unten:** Die Annahme „keine Desktop-Binaries"
|
||||||
> ist seit sqlcipher_flutter_libs 0.6.x überholt – das Plugin baut SQLCipher
|
> ist seit sqlcipher_flutter_libs 0.6.x überholt – das Plugin baut SQLCipher
|
||||||
> auf Windows/Linux als `sqlite3.dll`/`libsqlite3.so` mit (im Build-Output
|
> auf Windows/Linux als `sqlite3.dll`/`libsqlite3.so` mit (im Build-Output
|
||||||
> verifiziert). Deshalb ist Phase 1 NICHT Android-only: Windows/Linux
|
> verifiziert). Deshalb ist Phase 1 NICHT Android-only: Windows/Linux
|
||||||
|
|||||||
Reference in New Issue
Block a user