feat: SQLCipher-Verschluesselung der pyramid.sqlite (M1) via neue Storage-Fassade app_database.dart

- AppDatabase.open()/openForPush() kapseln Factory, Schluessel (Keystore),
  Klartext->SQLCipher-Migration (Backup/Verify/atomarer Tausch) und PRAGMAs
- Android/Windows/Linux verschluesselt, iOS/macOS bewusst Klartext
- 5 neue Tests mit echter SQLCipher-DLL; Windows-Praxistest mit echter DB
  erfolgreich (23 Tabellen verifiziert, E2EE intakt); Android UNGETESTET
This commit is contained in:
Bernd Steckmeister
2026-07-06 12:31:38 +02:00
parent cead62ccb2
commit f64398d3c6
10 changed files with 787 additions and 49 deletions
+11
View File
@@ -42,6 +42,17 @@ Punkte abhaken (`[x]`), wenn erledigt UND in `PROGRESS.md` protokolliert.
+ Memory „Pyramid Push" erneut konsultieren und die dort gelisteten 3
Fallstricke der Hintergrund-Entschlüsselung gegenprüfen.
- [ ] **Sichere Speicherung von Access-Token & Krypto-DB: LÜCKE GEFUNDEN.**
**Stand 2026-07-06: UMGESETZT + auf Windows praxisgetestet** neue
Storage-Fassade `lib/core/app_database.dart` (SQLCipher auf
Android/Windows/Linux, Schlüssel im Keystore, Klartext-Migration mit
Backup/Verifikation/atomarem Tausch, Push-Isolate-Marker). Bernds echte
Windows-DB wurde erfolgreich migriert (PROGRESS.md 2026-07-06), Tests in
`test/app_database_test.dart` fahren die Migration mit echtem SQLCipher.
**Bleibt offen, weil Android UNGETESTET ist** (Migration auf Gerät,
Push-Isolate 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
prüfen!), dann abhaken.
`sqlcipher_flutter_libs` steht zwar in `pubspec.yaml`, wird aber nirgends
benutzt `matrix_client.dart` und `background_push.dart` öffnen die
`pyramid.sqlite` (Access-Token, gepickelter Olm-Account, Nachrichten) über