Bedrohungsmodell, Whole-DB vs. pro User, Methoden (SQLCipher/Volume/LUKS), Schluesselmanagement (Start-Injektion/TPM), Off-Site-Backups, Heim-Server-Delta. Diskussionsgrundlage, kein Code. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
8.9 KiB
Verschlüsselungs-Analyse — Datenbank & Backups
Stand: Entwurf / Diskussionsgrundlage. Betrifft die SQLite-DB mit Userdaten, Gesprächsverläufen, Erinnerungen und Notfall-Profilen (Name, Adresse, Geburtsdatum, medizinische Notizen, Telefon). Ziel: Schutz der Daten at rest gegen Diebstahl von DB-Datei, Backups oder Datenträger.
Leitsatz: Der Cipher ist der einfache Teil — entscheidend ist das Schlüsselmanagement und das Bedrohungsmodell.
1. Bedrohungsmodell — wogegen schützt at-rest-Verschlüsselung überhaupt?
| Szenario | Hilft Verschlüsselung? |
|---|---|
| Gestohlenes Backup (kopiert, geleakt, alter USB/Cloud-Ordner) | Ja — wahrscheinlichster & am leichtesten zu schließender Fall |
| Gestohlene/ausgemusterte Platte (Box aus, Disk-Image) | Ja — nur wenn der Schlüssel NICHT auf derselben Platte liegt |
| Live-Kompromittierung (root/App-Zugriff auf dem laufenden Server) | Nein — die App muss entschlüsseln können → Schlüssel im RAM |
| Hypervisor / Rechenzentrum (RAM- & Disk-Snapshot durch Betreiber) | Kaum — RAM-Snapshot greift den Schlüssel ab |
Kernfalle: Liegt der Schlüssel als Datei/.env auf derselben Platte wie
die DB, bekommt ein Disk-/Backup-Dieb beides → die Verschlüsselung ist wertlos.
2. Ganze DB einmal verschlüsseln vs. jeden User einzeln?
Empfehlung: ganze DB (eine Verschlüsselung), NICHT pro User.
- Pro-User-Verschlüsselung bringt nur dann Mehrwert, wenn die User-Schlüssel nicht serverseitig verfügbar sind (aus User-Geheimnis abgeleitet, nur bei aktiver Sitzung).
- Der Assistent ist aber ein autonomer, immer-laufender Server: er verarbeitet Userdaten ohne anwesenden Nutzer (Auto-Erinnerungs-Extraktion, LLM-Kontext, Safety, Admin). Er muss also jederzeit entschlüsseln können → hält/leitet alle Schlüssel ab → ein Dieb des Schlüsselmaterials bekommt trotzdem alles.
- Authelia/SSO liefert keinen stabilen pro-User-Krypto-Schlüssel. Echte Client-seitige Verschlüsselung würde den LLM-Assistenten unmöglich machen.
- Pro-Feld-Verschlüsselung zerstört zudem Indizes/Suche/SQL, leakt Metadaten (wer/wann/wie viel) und lässt WAL-/Temp-Dateien im Klartext.
→ Pro-User = sehr hoher Aufwand, kaum Sicherheitsgewinn in dieser Architektur (Security-Theater). Whole-DB ist richtig und ausreichend.
3. Methoden für Whole-DB
- (a) SQLCipher (verschlüsseltes SQLite): App öffnet die DB mit
PRAGMA key, verschlüsselt DB + WAL transparent. Aufwand: Dependency (pysqlcipher3) +store._connect+ Einmal-Migration. App-contained. - (b) Verschlüsseltes Volume (LUKS-Loopback, gocryptfs userspace, fscrypt)
fürs
data/: app-transparent (kein Code), deckt DB + WAL + Temp + dort liegende Backups ab. Aufwand: OS-Setup + Entsperren beim Boot. - (c) LUKS Full-Disk-Encryption (ganze Platte): deckt zusätzlich Logs, Swap, OS ab; ideal gegen physischen Diebstahl (s. Heim-Szenario).
Der eigentliche Hebel — Schlüssel-Ort: nicht auf der Datenplatte. Optionen:
Passphrase beim Service-Start injizieren (systemd-ask-password), Schlüssel
beim Start extern holen (nur im RAM halten), oder TPM (s. u.). Trade-off:
bricht den unbeaufsichtigten Auto-Neustart — bei einem Always-On-Care-System
ein echter Betriebsnachteil.
4. Aufwand vs. Sicherheit
| Maßnahme | Aufwand | Sicherheitsgewinn |
|---|---|---|
Backups off-host/-site + age/GPG |
niedrig | hoch (häufigstes Leck) |
| Whole-DB, Schlüssel auf gleicher Platte | mittel | niedrig (nur „nackte .db-Kopie") |
| Whole-DB, Schlüssel off-disk / Start-Injektion | mittel–hoch (Ops) | mittel–hoch (echter Disk-Diebstahl) |
| LUKS-FDE + TPM2 (Heim-PC) | mittel | hoch (deckt alles, löst Key-Problem) |
| Pro-User-Feldverschlüsselung | sehr hoch | marginal hier, bricht Features |
5. Empfohlenes Vorgehen (vHost), nach ROI sortiert
- Backups verschlüsselt & off-host — sofort, größter Nutzen, kleinster Aufwand.
Jedes Backup mit
age/GPG (Public-Key); privater Schlüssel nur offline/Heim-Host. Backups weg vom Server. - Live-DB verschlüsseln (SQLCipher oder gocryptfs/LUKS).
- Schlüssel vom Datenträger trennen (Start-Injektion) — macht Stufe 2 erst wirksam.
- Datensparsamkeit/Retention: alte Verläufe automatisch löschen (Tools vorhanden) — weniger Daten = weniger Schaden.
6. Was leicht vergessen wird
- Backups liegen aktuell NEBEN der DB auf demselben Datenträger (inkl. der
…bak-*-Dateien) → ein Disk-Dieb bekommt DB und Backups. Größte aktuelle Schwachstelle → auslagern. - WAL/-shm/-journal & SQLite-Temp enthalten Klartext-Fragmente → spricht für Whole-DB/Volume statt Feld-Ebene.
- Logs / journald: Gesprächsinhalte können in App-Logs landen → Log-Level prüfen.
- Swap: Schlüssel & Klartext können in den Swap geraten → verschlüsselter Swap.
- Schlüsselverlust = Datenverlust: Für ein Care-System ist Verfügbarkeit teils kritischer als Vertraulichkeit → Key-Escrow/sicheres Backup des Schlüssels.
- Sensibelste Daten = Notfall-Profil (DSGVO-Gesundheitsdaten) — Hauptziel; evtl. zusätzliche Feldverschlüsselung als Defense-in-Depth (nur Stufe 2).
- Realismus vHost: Gegen bösartigen RZ-Betreiber (RAM-Snapshot) schützt at-rest mit auto-verfügbarem Schlüssel nicht — ehrlich kommunizieren.
7. Wenn der Server LOKAL (zuhause) läuft — wie ändert sich das Bild?
Der Standortwechsel verschiebt das Bedrohungsmodell überwiegend zugunsten der Sicherheit:
7.1 Der schwierigste Gegner verschwindet
Kein Rechenzentrums-Betreiber/Hypervisor mehr, der RAM und Disk snapshotten kann. Du kontrollierst die physische Hardware → at-rest-Verschlüsselung liefert nahezu ihren vollen Wert. Wichtigste Änderung.
7.2 Neuer Hauptgegner: physischer Diebstahl / Einbruch
Vorher abstrakt, jetzt konkret: Einbruch, Mitnahme von Rechner/Platten, Reparatur-/ Besuchszugriff, Platten-Entsorgung. LUKS-Full-Disk-Encryption ist dagegen das natürliche, starke Mittel: gestohlener Heim-PC mit LUKS = Briefbeschwerer.
7.3 Schlüsselmanagement wird einfacher UND besser: TPM
Ein echter Heim-PC hat meist ein TPM 2.0 (der vHost nicht). LUKS an das TPM binden →
- entsperrt automatisch, nur auf genau dieser Maschine (kein Key auf Platte, keine manuelle Eingabe) → unbeaufsichtigter Neustart funktioniert wieder;
- Platte ausbauen & woanders auslesen scheitert;
- Trade-off: ganze Maschine gestohlen und eingeschaltet → TPM entsperrt. Wer das abdecken will: TPM + PIN (wieder Eingabe nötig — Verfügbarkeit vs. Diebstahlschutz).
→ Zuhause empfohlene Primärmaßnahme: LUKS-FDE mit TPM2-Auto-Unlock (optional +PIN) — deckt alles ab (DB, WAL, Logs, Swap, Temp), OS-nativ, löst zugleich das Schlüssel-/Neustart-Problem.
7.4 Backups: aus „off-host" wird „off-SITE"
Zweites Laufwerk im selben Raum nützt wenig — Einbruch/Brand nimmt alles mit.
→ verschlüsselte Off-Site-Backups (age/GPG, Schlüssel getrennt) an einen
zweiten Ort. Deckt Vertraulichkeit und Disaster-Recovery (Totalverlust) ab.
7.5 Was zuhause schwieriger wird / auf dich übergeht
- Physische Sicherheit: abschließbarer Raum, gesperrter Bildschirm, Haushalts-/Gästevertrauen.
- Verfügbarkeit: kein redundanter Strom/Kühlung/Remote-Hands → USV (auch gegen DB-Korruption bei Stromausfall).
- Netzwerk-/Live-Kompromittierung kann GRÖSSER werden: Heim-LAN heterogen (IoT, schwache Segmentierung). Ist der Server internet-exponiert, kann ein gekapertes Gerät seitlich angreifen. Verschlüsselung hilft hier nicht → Netz-Härtung: möglichst nur per VPN/Tunnel, Reverse-Proxy, fail2ban, minimale Ports, SSO behalten, eigenes VLAN weg von IoT.
- Platten-Entsorgung wird durch FDE unkritisch.
7.6 Unverändert
- Whole-DB schlägt weiter Pro-User.
- Live-Kompromittierung bleibt der Fall, den Verschlüsselung nicht abdeckt — durch mögliche Heim-Internet-Exposition evtl. das dominante Restrisiko → Netz-Härtung mindestens so ernst nehmen wie Verschlüsselung.
8. Fazit
- Whole-DB-Verschlüsselung reicht; pro User lohnt sich nicht.
- vHost: Fokus auf (1) verschlüsselte Off-Host-Backups, (2) Live-DB (SQLCipher/Volume), (3) Schlüssel vom Datenträger trennen.
- Heim-Server (besser & einfacher): LUKS-FDE + TPM2 (optional +PIN) + verschlüsselte Off-Site-Backups + Netz-Härtung gegen Live-Angriffe + physische Sicherheit & USV. Der TPM löst zugleich Verschlüsselung und das Schlüssel-/Neustart-Dilemma.
Offene Entscheidung
Soll der Heim-Server internet-exponiert oder nur per VPN/Tunnel erreichbar sein? Davon hängt das Gewicht des Live-Kompromittierungs-Risikos ab — der einzige große Punkt, den Verschlüsselung nicht abdeckt.