Files
sanctum/CHANGELOG.md
T

29 KiB
Raw Blame History

Changelog

Alle nennenswerten Änderungen an diesem Projekt werden in dieser Datei dokumentiert.

Das Format basiert auf Keep a Changelog und dieses Projekt folgt den Richtlinien von Semantic Versioning.

[0.8.0] - 2026-09-19

Security Audit Remediation & Format V3 Release

Dieses Release implementiert die umfassende Härtung aus zwei Security-Audit-Runden, rüstet das Container-Format auf V3 auf und führt wesentliche Sicherheits- und Notfallfunktionen ein.

Security & Architecture (Findings S-01, V-01, V-02, K-01, K-02, K-03)

  • K-01: Kanonische Metadaten-Authentifizierung (Format V3):
    • Ergänzung einer HMAC-SHA-256 Metadaten-MAC (metadata_mac) im Header, abgeleitet aus dem DEK.
    • Verhindert unbemerkte Manipulation von Verzeichnisstrukturen, Dateigrößen oder Dateitypen.
  • K-02: Chunk-Replay- & Reordering-Schutz (Format V3):
    • Erweiterung des AAD von 16 Bytes auf 24 Bytes: Bindung an node_id (8 Bytes), chunk_index (8 Bytes) und monotone generation (8 Bytes).
    • Verhindert das Wiedereinspielen veralteter Chunks durch Angreifer mit Schreibzugriff auf die Containerdatei.
  • K-03: Notfallblatt-Lebenszyklus & rekey-Kommando:
    • sanctum passwd weist nun explizit darauf hin, dass das 24-Wörter Notfallblatt (BIP-39) weiterhin gültig bleibt.
    • Neues CLI-Kommando sanctum rekey: Generiert einen frischen DEK, verschlüsselt alle Chunks um, aktualisiert Header sowie Metadaten-MAC und entwertet das bisherige Notfallblatt unwiderruflich.
  • S-01: Sichere Löschlogik in sanctum sync:
    • --delete löscht keine ausgeschlossenen Pfade (--exclude) mehr. Für das Löschen ausgeschlossener Dateien muss explizit --delete-excluded übergeben werden (analog zu rsync).
  • V-01: CarrierFs-Dispatch im Carrier-Modus:
    • SanctumFs::copy leitet im Trägermodus Kopieroperationen korrekt an das Trägerdateisystem weiter.
  • V-02: Schutz vor stiller Dateikürzung bei fehlenden Chunks:
    • Fehlt ein Datenblock innerhalb der erwarteten Dateigröße, wird ein harter E/A-Fehler (EIO / DatabaseInconsistency) ausgelöst statt stiller Kürzung auf 0 Bytes.

[0.7.2] - 2026-09-18

Security Audit Remediation Release (Findings SA-01 to SA-07)

Dieses Release behebt alle sieben identifizierten Schwachstellen und Härtungsanforderungen (SA-01 bis SA-07) aus dem Security-Audit von v0.7.1.

Security & Architecture

  • SA-01: Container-DoS / KDF-Amplification Schutz:
    • Pre-KDF strukturelle Validierung in Database::open, read_slots, ContainerMeta::authenticate und recovery::to_meta.
    • Striktes Limit: Maximal 2 Slots (slots.len() <= 2), nur Slot-IDs 0 und 1 zulässig, Erkennung von Duplikaten, Slot 0 ist Pflicht.
    • Strikte Validierung aller BLOB-Längen (Salt: 16 B, Nonce: 12 B, Tag: 16 B, Wrapped DEK: 32/40 B für Slot 0, 32/64/72 B für Slot 1) und KDF-Parametergrenzen vor jeder Argon2id-Ableitung (derive_kek).
  • SA-02: Release-Signierung entkoppelt & CI-Secrets isoliert:
    • Trennung des CI/CD-Release-Workflows (release.yaml) in separate build- und sign-and-release-Jobs.
    • Das Secret MINISIGN_SECRET_KEY ist strikt auf den nachgelagerten Signatur-Job isoliert und für Build-/Test-Runner unzugänglich.
  • SA-03: Pinned Download-Integrität für minisign.exe:
    • SHA-256 Integritätsprüfung des offiziellen Minisign v0.11 Downloads (b9c31c2c3034f81f0e5f5d92cbcc20e67a9671b6e5455661588638848dc58031) im CI-Workflow vor dem Entpacken und Ausführen (Fail-Closed).
  • SA-04: Immutable Action-Pinning & Toolchain-Pinning:
    • Alle externen GitHub/Gitea-Actions im Release-Workflow auf unveränderliche Commit-SHAs (@<sha>) fixiert.
    • Rust-Toolchain explizit auf Version 1.85.0 gepinnt.
  • SA-05: Session-Tokens vollständig aus URIs verbannt:
    • Eingehende WebDAV-Requests, deren URI das Session-Token in Pfad oder Query-String enthalten (/<token>/... oder ?token=...), werden sofort mit 403 Forbidden abgewiesen.
    • Authentifizierung wird strikt über HTTP-Header (Authorization: Basic ... oder X-Sanctum-Token: ...) erzwungen.
  • SA-06: Constant-Time Token-Vergleich:
    • Integration von subtle::ConstantTimeEq für zeitinvariante Vergleiche von Basic-Auth-Credentials und Session-Tokens zum Schutz vor Timing-Seitenkanalangriffen.
  • SA-07: Dokumentations-Klarstellung: Logische vs. Physische Datenlöschung:
    • Präzisierung im README.md und Code-Docstrings bzgl. der Grenzen des kryptografischen Chunk-Shreddings: Auf Flash-Medien (SSDs/NVMe) können Wear-Leveling und FTL-Blöcke physisch persistieren. Empfehlung zur Nutzung von Full-Disk-Encryption (FDE).

[0.7.1] - 2026-09-18

Security Patch Release (Closing Gaps R-01 to R-06)

Dieses Release schließt sechs identifizierte Restlücken (R-01 bis R-06) aus dem Security-Review von v0.7.0 und härtet Authentifizierung, Prozessisolation, Carrier-Integrität und CI/CD-Sicherheit.

Security & Architecture

  • R-01: Bereinigung verbliebener Restbehauptungen in Doku und Code:
    • LEGAL.md: Das „100% Offline“-Versprechen wurde präzisiert. Es wird wahrheitsgemäß dokumentiert, dass keine Telemetrie oder stilles Phone-Home existiert, der Befehl sanctum upgrade (und --check) jedoch bei explizitem Nutzeraufruf die Release-API des konfigurierten Gitea-Hosts anspricht.
    • Entfernung aller verbliebenen Formulierungen über unnachweisbare Abstreitbarkeit ("Plausible Deniability") oder RIPA 49.
    • Neutralisierung der Nutzer- und Entwicklerdokumentation bezüglich der Alibi-Trägerdatei im Decoy-Vault.
  • R-02: Lückenloser Schutz der Trägerdatei in VFS und Sync:
    • SanctumFs::copy: Das Duplizieren der Trägerdatei als Quelle sowie das Überschreiben als Ziel wird nun mit FsError::Forbidden fail-closed abgewehrt.
    • sanctum sync (Pull): sync_single_file_to_host verweigert den Abzug der Trägerdatei via assert_not_carrier. Der rekursive Pull-Vorgang (collect_and_pull_dir) überspringt die Trägerdatei vollständig und spiegelt sie nicht auf den Host.
    • sanctum sync (Push): Verhindert das Überschreiben der bestehenden Trägerdatei durch Push-Operationen.
  • R-03: Vereinheitlichte Validierung von Dateinamen (Path-Traversal & Gerätenamen):
    • Auslagerung der kanonischen Prüffunktion validate_node_name in das gemeinsame Modul src/pathutil.rs.
    • Durchgängige Durchsetzung in storage.rs (create_node_in_vault, rename_node_in_vault) und vfs.rs (create_node, rename_node).
    • Strikte Zurückweisung von Pfadtrennern, Null-Bytes, Steuerzeichen, Verzeichnisreferenzen (., ..) und reservierten Windows-Gerätenamen (CON, PRN, AUX, NUL, COM1..9, LPT1..9).
  • R-04: Fail-Closed Release-Packaging und CI/CD-Signaturpflicht:
    • package-release.ps1 und package-release-linux.ps1: Das Fehlen von minisign.exe oder sanctum-release.key bricht die Paketerstellung sofort mit exit 1 ab (kein Warning-and-continue mehr).
    • publish-release.ps1: Bricht die Veröffentlichung mit Fehler ab, wenn SHA256SUMS.txt.minisig fehlt.
    • .gitea/workflows/release.yaml: Automatischer Minisign-Signaturschritt mittels Secret MINISIGN_SECRET_KEY und Pflicht-Upload von SHA256SUMS.txt.minisig zu jedem Gitea-Release.
  • R-05: Beseitigung von Session-Token im Argumentvektor (argv):
    • Windows Netzlaufwerk-Mounting: Vollständige Umstellung von externem net use Kindprozess auf die in-process Win32-APIs WNetAddConnection2W und WNetCancelConnection2W (aus mpr.dll). Das Session-Token wird als Passwort übergeben; die Remote-URL http://127.0.0.1:<port>/ enthält kein Token mehr im Prozess-Argumentvektor oder in der Prozessliste.
    • Linux: Beseitigung des Tokens aus gio mount Argumenten.
    • WebDAV HTTP-Middleware: Unterstützung von HTTP Basic Auth (Authorization: Basic <base64>), X-Sanctum-Token-Header und Pfad-Präfix-Fallback (/<token>/). Unauthentifizierte Anfragen werden mit standardkonformem 401 Unauthorized und WWW-Authenticate: Basic realm="Sanctum" beantwortet; ungültige Host-Header mit 403 Forbidden.
  • R-06: Speicher-Hygiene bei Notfallschlüsseln:
    • In src/main.rs wird die Umgebungsvariable SANCTUM_RECOVERY_KEY nach dem erfolgreichen Einlesen sofort mittels std::env::remove_var aus dem Prozessspeicher entfernt.

[0.7.0] - 2026-09-18

Security Hardening Release

Dieses Release behebt alle 11 identifizierten Sicherheitsprobleme (S-01 bis S-11) aus dem Sicherheits-Review von v0.6.0 umfassend und implementiert ein striktes Fail-Closed-Design.

Security & Architecture

  • S-01: Ehrliche Neuklassifizierung des Dual-Vault (Second Safe):
    • Beseitigung aller unhaltbaren Behauptungen über "Plausible Deniability", "RIPA-49-Konformität" und "mathematische Ununterscheidbarkeit".
    • Klarstellung in Dokumentation und CLI: Das Dual-Vault-Design (Modell A mit Alibi-Carrier) bietet Schutz vor Schulterblick und erzwungener Herausgabe im Alltag, ist jedoch durch forensische Entropieanalyse der Trägerdatei detektierbar und stellt keinen rechtlichen Schutz gegen Beschlagnahme dar.
  • S-02: Minisign-Signaturprüfung & Härtung des Update-Mechanismus:
    • Integration von minisign-verify zur kryptografischen Prüfung der SHA256SUMS.txt.minisig gegen den offiziellen Ed25519 Release-Schlüssel (RWSsVphPgr8157M9rTPkWDw3c0qIjc7xi28Gmw+cIWbMipOy4L6ToJEU) vor jedem Binary-Austausch.
    • Sichere Erstellung von Zwischendateien mittels tempfile::Builder mit restriktiven Dateirechten und RAII-Bereinigung im Fehlerfall.
    • Sperrung von Drittanbieter-URLs: Inoffizielle Server erfordern zwingend das Flag --insecure-url und eine interaktive Benutzerbestätigung (nicht durch --yes umgehbar).
  • S-03: Carrier-Schutz vor Beschädigung und Korruption:
    • Einführung der Datenbankspalte is_carrier INTEGER NOT NULL DEFAULT 0 in der nodes-Tabelle zur präzisen Identifikation der Alibi-Trägerdatei ohne False Positives auf Benutzerdateien.
    • Fail-Closed Schutzschranke assert_not_carrier: Löschung (delete_node), Kürzung (truncate_chunks_after), Umbenennung (rename_node_in_vault) oder VFS-Überschreibung der Trägerdatei sowie das Löschen enthaltender Ordner wird strikt verboten.
    • Schutz der Trägerdatei bei sanctum sync: Die Alibi-Datei wird bei --delete (delete_orphans_in_vault) niemals entfernt.
  • S-04: Schutz vor nicht vertrauenswürdigen Containern & KDF-DoS:
    • Database::open prüft vor Ausführung von Pragmas, VACUUM oder Schema-Upgrades, ob fremde SQLite-Datenbanken vorliegen und lehnt diese sofort fail-closed ab.
    • Strikte Bereichsprüfung aller KDF-Parameter (validate_kdf_params): Memory Cost 19 MiB bis 256 MiB, Time Cost 2 bis 8, Parallelität 1 bis 8.
    • Strikte Validierung aller Header-Slot-Feldlängen (Salt 16B, Nonce 12B, Tag 16B, Wrapped DEK 40B/32B in Slot 0, 72B/64B/32B in Slot 1).
  • S-05: Eliminierung unkontrollierter Panics in der Kryptografie:
    • Beseitigung aller potenziellen Panics in encrypt_node_name und decrypt_chunk (LZ4-Größenvalidierung und unkomprimierte Chunks geben nun kontrollierte Result-Fehler zurück).
    • Umstellung des Release-Profils in Cargo.toml auf panic = "unwind" zur Vermeidung von Process-Aborts bei unerwarteten Fehlern.
  • S-06: WebDAV-Loopback-Härtung & Unmount-Bereinigung:
    • Robuste Host-Header-Prüfung in is_loopback_host (exakter Abgleich gegen 127.0.0.1, localhost, [::1], ::1 samt Port-Validierung) zur Abwehr von DNS-Rebinding- und Host-Header-Injection-Angriffen.
    • Beseitigung der Session-Token-Ausgabe im Terminal.
    • Zwingende Überprüfung und Löschung von temporären SQLite -wal und -shm Dateien nach Aushängen des Containers.
  • S-07: Härtung der KDF-Parameter & Passwort-Validierung:
    • Anhebung der KDF-Untergrenzen auf RFC 9106 Mindeststandards (Memory 19.456 KiB, Time Cost 2).
    • Mindestpasswortlänge von 12 Zeichen bei init und passwd.
    • Verbot identischer Passwörter oder Präfix-Kollisionen zwischen Standard- und Hidden-Vault.
  • S-08: Path-Traversal-Schutz & Dateinamen-Validierung:
    • Umfassende Dateinamenprüfung validate_node_name in sanctum sync und VFS: Verbot von Pfadtrennern (/, \), Null-Bytes, Steuerzeichen (< 0x20), . / .. sowie reservierten Windows-Gerätenamen (CON, PRN, AUX, NUL, COM1..9, LPT1..9).
    • Strenge Pfadausbruchsprüfung bei sync pull.
  • S-09: Sichere Einlesung von Wiederherstellungsschlüsseln:
    • CLI-String-Übergabe von 24-Wort Notfallschlüsseln via --recovery-key <PHRASE> ist veraltet (Deprecation Warning).
    • Unterstützung für interaktive maskierte Eingabe (kein History-Leak), Stdin (--recovery-key -) und Umgebungsvariable SANCTUM_RECOVERY_KEY.
  • S-10: SHA-256 Checksummenprüfung in Sync & WAL-Sicherheit:
    • Echte SHA-256 Hash-Vergleiche bei sanctum sync --checksum.
    • Atomare SQLite-Transaktionen und garantierte WAL-Bereinigung.
  • S-11: Sichere Trennung bei Dateinamen-Entschlüsselung:
    • Unsicherer statischer Fallback-Schlüssel (b"SANCTUM_NODE_NAME") ist standardmäßig deaktiviert.
    • Abwärtskompatibilität für Alttresore nur noch bei expliziter Angabe des globalen CLI-Flags --legacy-names.

[0.6.0] - 2026-09-16

Added

  • sanctum upgrade (Alias: sanctum update) - In-Place Self-Upgrade Engine:
    • Ermöglicht das direkte Aktualisieren der laufenden Sanctum-Binary ohne externe Paketmanager oder manuelle Download-Schritte.
    • Plattformunabhängiger In-Place-Austausch: Löst das Windows-Dateilock-Problem (ERROR_ACCESS_DENIED) via self-replace (Umbenennen der laufenden Executable und verzögerte Bereinigung). Auf Linux/Unix wird ein sauberer atomarer Tausch mit Ausführungsrechten (0o755) durchgeführt.
    • Kryptografische Integritätsprüfung: Vor dem Austausch wird jedes heruntergeladene Binary zwingend gegen die offizielle SHA256SUMS.txt des Gitea-Releases via SHA-256 verifiziert. Bei Abweichungen bleibt die bestehende Installation vollständig unberührt.
    • Prüfmodus (--check / -c): Schneller Abgleich mit der Gitea-Releases-API zur Feststellung, ob ein Update vorliegt, ohne Downloads durchzuführen.
    • Automatisierungsmodus (--yes / -y): Führt das Upgrade ohne interaktive Bestätigung durch ideal für geplante Aufgaben und Skripte.
    • Force-Option (--force / -f): Erlaubt das Erzwingen einer Neuinstallation / Aktualisierung auch bei gleicher Version oder erkannter Paketmanager-Umgebung.
    • Paketmanager-Erkennung: Erkennt automatisch, ob Sanctum über Scoop oder Winget ausgeführt wird, und empfiehlt den entsprechenden Paketmanager-Befehl (scoop update sanctum bzw. winget upgrade HaraldPansi.Sanctum).
  • Testsuite:
    • tests/upgrade_test.rs: 5 neue Tests zur Verifikation von Checksum-Parsing, SemVer-Vergleich, Paketmanager-Erkennung, SHA-256 Hash-Validierung und Gitea Release API-JSON-Deserialisierung.

[0.5.0] - 2026-09-16

Added

  • sanctum sync - Native rsync-ähnliche Synchronisation:
    • Bidirektionale Synchronisation (Push: Host -> Tresor, Pull: Tresor -> Host) direkt auf SQLite- und VFS-Ebene unter vollständiger Umgehung des WebDAV-Layers.
    • Beseitigung des 4-GB-Dateilimits: Löst das fundamentale Problem des Windows WebClient-Dienstes (mrxdav.sys), welcher systembedingt auf 32-Bit Dateigrößen (~4 GB - 1 Byte / Fehler 0x800700DF) beschränkt ist. Sanctum streamt nun Dateien beliebiger Größe (5 GB, 50 GB, 500 GB+) in 1 MB Chunks mit AES-256-GCM direkt in/aus den Tresor.
    • Dry-Run-Simulation (--dry-run / -n): Ermöglicht die risikolose Vorschau aller auszuführenden Aktionen (Hinzufügen, Aktualisieren, Löschen, Überspringen) samt Datenmengen-Berechnung, ohne tatsächliche Änderungen am Ziel durchzuführen.
    • Spiegelung & Verwaiste Dateien bereinigen (--delete): Unterstützt das automatische Löschen von Dateien im Ziel, die in der Quelle nicht mehr existieren, für exakte Ordnerspiegelungen.
    • Inhaltsbasierte Hash-Prüfung (--checksum / -c): Optionaler byteweiser SHA-256 Inhaltsvergleich anstelle des schnellen Größen-/mtime-Prüfverfahrens.
    • Ausschlussmuster (--exclude <PATTERN>): Unterstützung für flexible Glob-Muster zum Ignorieren temporärer Dateien, Downloads oder System-Metadaten (z. B. *.crdownload, *.tmp, Thumbs.db).
    • Quiet-Modus (--quiet / -q): Ermöglicht lautlose Ausführung für Skripte und geplante Aufgaben mit knapper Zusammenfassungsstatistik.
    • Metadaten-Konservierung: Erhaltung und Übertragung präziser Datei-Modifikationszeitstempel (mtime) in beide Richtungen.
  • Integrationstests:
    • tests/sync_test.rs: Umfassende automatisierte Testabdeckung für Push/Pull, Multi-Chunk Großdateien, Fast-Delta-Check, Dry-Run-Invarianz, --delete und --exclude.

[0.4.1] - 2026-09-14

Fixed

  • Linux Mount-Stabilität & Signal-Handling:
    • Behebung eines sofortigen automatischen Aushängens direkt nach erfolgreichem Mount unter Linux: Windows-spezifische Kontrollkanäle (Console-Close, Session-Lock, System-Tray) wurden auf Nicht-Windows-Systemen sofort geschlossen, wodurch tokio::select! über None vorzeitig ausgelöst wurde.
    • Plattform-spezifische Aufteilung der tokio::select!-Ereignisschleife: Unter Linux/Unix wird nun sauber auf POSIX-Terminierungssignale (SIGINT, SIGTERM, SIGHUP) gelauscht.
    • Defensives Pattern-Matching mit Some(()) = rx.recv() stellt sicher, dass geschlossene Kanäle keine unberechtigten Shutdowns mehr auslösen können.
    • Automatisches Öffnen via xdg-open auf Linux vorerst unterdrückt.

[0.4.0] - 2026-09-10

Added

  • Distribution & Package Ecosystem:
    • Offizielles Scoop-Manifest (packages/scoop/sanctum.json) für One-Click CLI-Installation und nahtlose Upgrades unter Windows.
    • Windows Package Manager (Winget) Manifest (packages/winget/HaraldPansi.Sanctum.yaml) zur systemweiten Paketverwaltung.
    • Vollständiger Installations-Leitfaden (INSTALL.md) für Scoop, Winget, Standalone-Binaries und cargo install.
  • Cross-Platform Architektur (Linux & macOS Vorbereitung):
    • Neues Plattform-Abstraktionsmodul src/platform/mod.rs für OS-unabhängiges Speicherschutz- und Mount-Handling.
    • POSIX-Memory-Hardening mit mlock und munlock Systemaufrufen für Unix-Systeme.
    • Plattformübergreifendes Datei- und Ordneröffnen (explorer.exe unter Windows, xdg-open unter Linux, open unter macOS).
    • Native WebDAV-VFS-Einbindung für Linux GNOME/KDE via gio mount.
  • Chaos Engineering & Live-Crash-Resilienz:
    • tests/live_crash_resilience_test.rs: Umfassende automatisierte Stresstests mit Multi-Worker Schreibabbrüchen, asynchronen Panic-Simulationen und Validierung der SQLite WAL-Konsistenz (Null Korruption).
  • Legal, Compliance & Software Bill of Materials (SBOM):
    • LEGAL.md: Rechtliche Leitlinien, US EAR § 742.15(b) & EU Dual-Use Exportkontroll-Klassifizierung, DSGVO Art. 25 Zero-Data-Erklärung und Haftungsausschluss nach § 521 BGB.
    • THIRD_PARTY_LICENSES.md: Lückenloses Lizenzaudit aller 231 Abhängigkeiten (100% permissive Lizenzen, 0% Copyleft) zur strikten Compliance mit Apache-2.0 Section 4.
    • Aufnahme von LEGAL.md und THIRD_PARTY_LICENSES.md in das offizielle Release-Distributionsarchiv (package-release.ps1).
  • Statisches Linux Single-Binary (x86_64-unknown-linux-musl):
    • 100% statisch gelinktes Linux-Binary ohne GLIBC-Abhängigkeiten via Zig-Cross-Toolchain.
    • Neues Linux-Distributionsarchiv sanctum-v0.4.0-linux-x86_64.tar.gz inklusive Dokumentation und Prüfsummen.
    • Native Freedesktop .desktop-Datei und MIME-Type-Integration (application/x-sanctum) via sanctum register.
  • OpSec & Disaster Recovery UX:
    • QUICKSTART.md: Druckbare 24-Wörter BIP-39 Notfallkarte zur sicheren analogen Verwahrung des Notfallschlüssels (Air-Gapped Vault Paper Backup).

[0.3.1] - 2026-09-10

Added

  • Human Factors & OpSec-UX (HF-01 bis HF-04):
    • Maskierte interaktive Notfallschlüssel-Eingabe: --recovery-key ohne CLI-Argument liest die 24 BIP-39-Wörter via rpassword ein, ohne Klartextspuren in der PowerShell-Historie (ConsoleHost_history.txt) zu hinterlassen.
    • BIP-39 Resilienz & Tippfehler-Diagnose: Automatische String-Normalisierung (Kleinschreibung, Whitespace- und Satzzeichenbereinigung) sowie Levenshtein-Kandidatenvorschläge (\le 2 Distanz) bei Eingabefehlern.
    • Stealth-Mount Modus (--stealth / -s): Vollständig lautloser Betrieb ohne Banner, Token-Ausgabe, Mount-Pfade oder Box-Rahmen.
    • VFS Carrier-Schutz im Decoy-Vault: Umfassender Lösch-, Schreib-, Truncate- und Umbenennungsschutz der Alibi-Trägerdatei (FsError::Forbidden) bei Zugriff über Slot 0.
  • Chaos Engineering & Crash-Resilienz (CHAOS-01 bis CHAOS-03):
    • Transaktionale Crash-Consistency (CHAOS-01): Bündelung von Chunk-Write und Dateigrößen-Aktualisierung (write_chunk_and_update_size) in einer einzigen atomaren SQLite-Transaktion (tx.commit()) für vollständige Resilienz gegen plötzlichen Stromausfall.
    • Path Fuzzing & Injection Guard (CHAOS-02): Strikte Validierung aller VFS-Pfade und Knotennamen gegen Null-Bytes (\0) und ASCII-Steuerzeichen (< 0x20).
    • Fault Recovery bei Disk Full (CHAOS-03): Sofortige Invalidierung des In-Memory-Chunk-Caches bei Schreibfehlern zur Vermeidung kaskadierender Drop-Panics bei vollem Zieldatenträger.
  • DFIR & Windows Host-Memory Hardening:
    • Win32 VirtualLock Speicherschutz: Physische Verriegelung des Root-DEK im RAM zur Unterbindung von Auslagerungen in pagefile.sys oder swapfile.sys.
    • Windows Defender Controlled Folder Access (CFA / Ransomware-Schutz) Diagnose mit gezielter Hilfestellung.

Changed

  • Visuelle Parität & Plausible Deniability beim Mounten (HF-01):
    • Beseitigung verräterischer Konsolenausgaben (magenta hervorgehobene Hinweise auf Hidden Vault / Slot 1) und Harmonisierung des Explorer-Verhaltens für beide Safes.
    • Vereinheitlichung der Ausgaben von sanctum verify und sanctum recovery-key zur Vermeidung von Rückschlüssen auf vorhandene Hidden-Vault-Slots.
  • Interaktiver Assistent für sanctum restore-header bei Aufruf ohne CLI-Parameter.

[0.3.0] - 2026-09-09

Added

  • Modell A: Steganografischer Carrier & Plausible Deniability Phase 2:
    • Zwei-Schichten-AEAD (DEK_0 + DEK_1) zur vollständigen Abwehr von Chunks-Accounting-Angriffen.
    • Physische Dateigrößen-Invarianz: Versteckte Schreibvorgänge verändern die Host-Dateigröße um exakt 0 Bytes.
    • Virtuelles Carrier-Dateisystem (CarrierFs) mit reserviertem Block 0 für Manifest und Block-Allokationsbitmap.
    • Schreib-, Lösch- und Umbenennungsschutz der Alibi-Trägerdatei im Decoy-Mount (FsError::Forbidden).
  • CLI & Disaster Recovery Erweiterungen:
    • sanctum backup & sanctum restore: Dedizierte CLI-Befehle für konsistente Online-Sicherungen.
    • sanctum restore-header --slot <0|1>: Gezielte Wiederherstellung für Decoy- oder Hidden-Vault-Header.
    • sanctum init --carrier-file <NAME> --carrier-size <MB>: Frei konfigurierbare Alibi-Trägerdatei mit forensischen Sicherheitsprüfungen.
  • SRE & Production Resilience:
    • Nativer Win32 SetConsoleCtrlHandler: Synchrones Aushängen und WAL-Checkpointing bei Schließen des Konsolenfensters (CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT, CTRL_SHUTDOWN_EVENT).
    • Stale Mount Self-Healing: Automatische Erkennung und Bereinigung verwaister Windows-Netzlaufwerke (Systemfehler 85).
    • Automatische Erkennung und Diagnosehilfe für den Windows WebClient-Dienst (Fehler 67).
  • Red Team & Threat Model Hardening:
    • WebDAV Loopback Protection: Dynamisches 128-Bit Session-Token im URL-Pfad (Schutz vor unprivilegierten lokalen Prozessen & CSRF).
    • Anti-DNS-Rebinding & Anti-Spoofing: Strikte Fail-Closed Host-Header-Validierung.
    • Anti-Slowloris & Connection Limiting: Begrenzung auf maximal 64 gleichzeitige WebDAV-Verbindungen und 15s Header-Read-Timeout.
    • Decompression-Bomb-Schutz: Strikter 1-MB-Größen-Guard vor LZ4-Dekomprimierung zur Vermeidung von Speichererschöpfung (CWE-400).
    • Verzeichnis-Hijacking-Schutz: Dynamische Bindung verschlüsselter Knotennamen an die parent_id via AEAD-AAD.
    • Vollständige RAM-Zeroization: Schutz sensibler Daten im Heap via zeroize::Zeroize bei Puffer-Swaps und Drop.

Changed

  • Standardname der Trägerdatei auf forensisch plausiblen Typ system_backup.dat geändert.
  • Heap- und Schreiboptimierung: Reduzierung der CSPRNG-Padding-Generierung auf den tatsächlichen Slack-Bereich (~30-fache Schreibbeschleunigung).
  • Inaktivitäts-Tracking: self.touch() reagiert nur noch auf echte I/O-Interaktionen (open, read, write) und ignoriert passive Explorer-Hintergrundabfragen (metadata, read_dir).
  • LZ4-Kompression: Schwellenwert von mindestens 64 Bytes Ersparnis eingeführt (compressed.len() + 64 <= plaintext.len()).

[0.2.0] - 2026-09-08

Added

  • Transparente LZ4-Kompression:
    • lz4_flex Integration mit Frame-Format vor der AEAD-Verschlüsselung.
    • Adaptiver Fallback: Chunks werden nur komprimiert, wenn mindestens 64 Bytes gespart werden.
    • Transparente On-the-Fly Dekompression bei Leseoperationen.
  • Disaster Recovery & Integrität:
    • BIP-39 Mnemonic Seed Phrases (24 Wörter) für Master-Key Recovery.
    • sanctum recovery-key: Export und Anzeige des BIP-39 Notfallschlüssels.
    • sanctum backup & sanctum restore: Konsistente Online-Sicherungen via SQLite Backup API mit WAL-Flush.
    • sanctum verify: Vollständige kryptografische Integritätsprüfung aller AEAD-Chunks und B-Tree-Validierung.
  • Windows Explorer Integration & Bedienkomfort:
    • sanctum register & sanctum unregister: Windows-Kontextmenü im Explorer (HKCU\Software\Classes\.sanctum, "In Sanctum öffnen", Icon-Zuordnung).
    • Intelligente Erkennung freier Laufwerksbuchstaben (von Z: abwärts).
    • Automatisches Öffnen des gemounteten Laufwerks im Windows Explorer.
    • System-Tray Icon (tray-icon) im Windows Infobereich mit Status und schnellem Unmount.
  • Explorer Anti-Leak Shield & OpSec:
    • Windows Anti-Leak Filter: Blockiert thumbs.db, desktop.ini, *.tmp, Office-Lockfiles (~$*) und NTFS Alternative Data Streams (:Zone.Identifier).
    • Activity Tracking & Inaktivitäts-Timeout: Automatischer Unmount bei Leerlauf.
    • Windows Session Lock Monitor: Registrierung für WTS_SESSION_LOCK mit sicherem Auto-Unmount beim Sperren des PCs.
  • Storage Compaction & Anti-Forensics:
    • SQLite Incremental Auto-Vacuum (PRAGMA auto_vacuum = INCREMENTAL;) zur physikalischen Freigabe ungenutzter Dateiseiten an das Host-Dateisystem.
    • Kryptografisches Chunk-Shredding: Chunks werden vor dem Löschen/Abschneiden mit CSPRNG-Zufallsrauschen überschrieben.
    • sanctum compact: Manuelles oder beim Aushängen automatisches Freigeben von Freelist-Pages.
    • Plausible Deniability (Hidden Vault): Dual-Slot Header-Architektur. Unbenutzte Slots enthalten ununterscheidbares CSPRNG-Rauschen.
    • sanctum init --with-hidden: Erstellung zweier getrennter Safes (Decoy & Hidden) mit individuellen Passphrasen und BIP-39 Recovery-Karten.
    • Vollständige Dateinamen-Verschlüsselung für den Hidden Vault.
  • Passwort-Verwaltung (sanctum passwd):
    • Sofortiges Ändern des Master-Passworts über DEK-Rewrapping mit neuem Argon2id-Salt und KEK-Parametern ohne Neuverschlüsselung der Nutzdaten. Multi-Slot fähig.

[0.1.0] - 2026-09-07

Added

  • Sanctum CLI (sanctum.exe): Eigenständige, hochperformante Userland-Anwendung zur Verwaltung verschlüsselter Ein-Datei-Container unter Windows 10/11.
  • Kryptografie & Schlüsselableitung:
    • Argon2id KDF (M=64\,\text{MB}, T=3, P=4) zur Ableitung des KEK aus dem Master-Passwort.
    • AES-256-GCM DEK-Wrapping mit Nonce und Authentifizierungs-Tag.
    • 1-MB Chunk AEAD-Verschlüsselung mit AAD (node_id || chunk_index) zum vollständigen Schutz gegen Swap- und Block-Vertauschungsangriffe.
    • Speichersicherheit: Verwendung von zeroize::Zeroizing für sensible kryptografische Schlüssel im RAM.
  • Speicherschicht:
    • SQLite3-Container im WAL-Modus (PRAGMA journal_mode = WAL;, PRAGMA synchronous = NORMAL;, PRAGMA page_size = 8192;).
    • Automatische Checkpoints (PRAGMA wal_checkpoint(TRUNCATE)).
    • Dynamisches Wachstum bis über 100 GB in exakt einer Host-Datei (.sanctum).
  • WebDAV & Windows Explorer Integration:
    • Eingebetteter WebDAV-Server auf 127.0.0.1 (dav-server + hyper).
    • Automatisches Einhängen über Windows-Bordmittel (net use <DRIVE>: http://127.0.0.1:<PORT>/ /persistent:no) ohne Administratorrechte und ohne Treiber (kein WinFsp, kein Dokan).
    • Volle Unterstützung für DavFileSystem, DavFile, Metadaten und symlink_metadata für WebDAV MOVE/Rename-Operationen im Explorer.
    • Saubere URL-Decodierung bei Pfaden mit Leerzeichen, Kommas und Umlauten.
  • CLI & UX:
    • Automatische Windows-Konsolen-Initialisierung auf UTF-8 (CP 65001) und Virtual Terminal Processing.
    • Strukturierte Statusausgabe (init, mount, unmount) mit Status-Boxen und Fortschrittsanzeige.
    • Automatischer Shutdown-Handler (Ctrl+C) mit sicherem Aushängen des Netzlaufwerks und WAL-Checkpointing.
  • Release Management:
    • Automatisches Packaging-Skript scripts/package-release.ps1 mit SHA-256 Checksummen.
    • Gitea Actions CI/CD Pipeline (.gitea/workflows/release.yaml).