• v0.8.0 ca6d54d5ca

    Sanctum v0.8.0 (Windows x86_64)
    Sanctum Release / Build & Test (Windows x86_64) (push) Waiting to run
    Sanctum Release / Sign & Release (push) Blocked by required conditions
    Stable

    harald released this 2026-09-19 10:17:19 +02:00 | 36 commits to main since this release

    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 vollständige Behebung aller 33 identifizierten Schwachstellen und Härtungsanforderungen aus zwei umfassenden Security-Audit-Runden, rüstet das Container-Format auf V3 auf (mit kanonischer Metadaten-Authentifizierung und Generation-gebundenem Chunk-Replay-Schutz) und führt wesentliche Sicherheits- und Notfallfunktionen ein.

    Kryptografie & Container-Format V3 (K-01, K-02, K-03, M-01, M-05)

    • K-01: Kanonische Metadaten-Authentifizierung (Format V3):
      • Ergänzung einer HMAC-SHA-256 Metadaten-MAC (metadata_mac) im Header, kryptografisch abgeleitet aus dem DEK via HKDF-SHA256 (SANCTUM_META_MAC_V3).
      • Verhindert unbemerkte Manipulation von Verzeichnisstrukturen, Knotennamen, Dateigrößen oder Dateitypen. sanctum verify erkennt jegliche Abweichung sofort.
      • Neuer CLI-Befehl sanctum upgrade-format --path <container> zur unterbrechungsfreien Migration von V1/V2 auf V3.
    • K-02: Chunk-Replay- & Reordering-Schutz (Format V3):
      • Erweiterung des AAD für AES-256-GCM von 16 Bytes auf 24 Bytes: Bindung an node_id (8 Bytes), chunk_index (8 Bytes) und monotone generation (8 Bytes).
      • Verhindert das Wiedereinspielen älterer gültiger Ciphertexts durch Angreifer mit Container-Dateizugriff.
    • K-03: Notfallblatt-Lebenszyklus & rekey-Kommando:
      • sanctum passwd weist nun unmissverständlich 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, schreddert alte Datenblöcke und gibt eine neue 24-Wort Notfallphrase aus.
    • M-01: Erhöhung der Argon2id-Standardparameter:
      • Neue Container verwenden standardmäßig m = 256 MiB (262.144 KiB), t = 4 Iterationen und p = 4 Lanes für maximalen Schutz gegen Brute-Force-Angriffe.
    • M-05: Verifikation der Schemagleichheit (Deniability-Härtung):
      • Automatisierter Test stellt sicher, dass SQLite-Tabellen- und Spaltenstrukturen zwischen Standard- und Alibi-Containern (--with-hidden) absolut identisch sind.

    Sync-Engine & Advisory Locking (S-01 bis S-09)

    • 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).
    • S-02: Plattformunabhängiger Pfadzusammenbau:
      • Robuste Zerlegung und Zusammenfügung relativer Pfade verhindert Path-Traversal auf Windows- und Unix-Systemen.
    • S-03: Symlink-Erkennung & Zyklenschutz:
      • Symlinks werden beim Sync erkannt, gezählt (files_skipped_symlinks) und nicht rekursiv verfolgt, um Endlosschleifen zu verhindern.
    • S-04: TOCTOU-Beseitigung bei Dateigrößen:
      • Die endgültige Knotengröße wird aus den tatsächlich geschriebenen Bytes (bytes_written) ermittelt statt aus vorherigen Metadaten.
    • S-05: Sicheres Kürzen auf 0 Bytes:
      • Beim Kürzen von Dateien auf 0 Bytes werden ausnahmslos alle Chunks kryptografisch geschreddert und aus der Datenbank entfernt.
    • S-06: Container Advisory Lock:
      • Verhindert gleichzeitiges Mounten und kollidierende Schreibzugriffe durch sync. Lock wird in Metadaten persistiert; Override via --force.
    • S-07: Überspringen ungültiger Windows-Dateinamen:
      • Reservierte Dateinamen (z. B. aux.txt, con.dat) werden im Sync übersprungen und gezählt (files_skipped_invalid), ohne den Vorgang abzubrechen.
    • S-08: Präzisierung des Glob- und Pfad-Matchings:
      • Vollständig dokumentiertes und gehärtetes Glob-Matching für Ausschlussregeln.
    • S-09: Pull-Overwrite-Schutz & Konfliktsicherheit:
      • Warnung und Schutzmechanismen vor unbeabsichtigtem Überschreiben lokaler Daten bei sync pull.

    VFS, Anti-Leak Shield & Carrier (V-01 bis V-09, Z-04)

    • V-01: CarrierFs-Dispatch im Carrier-Modus:
      • SanctumFs::copy delegiert Kopieroperationen im Alibi-/Trägermodus korrekt an das steganografische CarrierFs.
    • V-02: Fehlerbehandlung bei fehlenden Chunks:
      • Fehlt ein Datenblock innerhalb der erwarteten Dateigröße, wird ein harter E/A-Fehler (FsError::GeneralFailure) geworfen statt stiller Datenkürzung.
    • V-03: RAII Memory Lock Guard:
      • Eigener RAII-Guard im Arc stellt sicher, dass gesperrte Speicherseiten (VirtualLock) beim Klonen des VFS nicht vorzeitig freigegeben werden.
    • V-04: Strukturierter Anti-Leak Shield & Custom Filterliste:
      • Kategorisierte Filterung nach exakten Dateinamen, Präfixen (~$*, ._*), Suffixen (.tmp, .temp, .crdownload, .part, ~*), NTFS Alternate Data Streams (:) und .trash*.
      • Neues CLI-Flag sanctum mount --anti-leak-list <FILE> für anwenderspezifische Filterregeln sowie Statistik über gefilterte Dateien beim Unmount.
    • V-05: Robuste Fehlerprotokollierung in SanctumFile::drop:
      • Flush-Fehler beim Schließen von Dateien werden als error! geloggt und Flush wird bei close erzwungen.
    • V-06: Sparse Writes:
      • Lücken zwischen dem bisherigen Dateiende und dem Schreib-Offset werden automatisch mit Null-Bytes aufgefüllt.
    • V-07: RFC-4918 konforme Overwrite-Semantik:
      • Korrekte Behandlung von Overwrite-Headern und Verzeichnis-Konfliktprüfungen in copy.
    • V-08: Einheitliche Pfadsicherheit:
      • Tabulator-Steuerzeichen (0x09) werden in validate_path_safety konsistent abgewiesen.
    • V-09: Chunk-Shredding vor Löschung:
      • truncate_chunks_after schreddert vor dem Löschen alle betroffenen Chunks mit Zufallsdaten.
    • Z-04: WebDAV Quota-Report:
      • SanctumFs::get_quota meldet korrekte Containerbelegung und verfügbaren Host-Speicher.

    Upgrade & Signaturprüfung (U-01 bis U-03)

    • U-01: Striktes Pre-Hashing für Minisign:
      • Minisign-Verifikation akzeptiert ausschließlich pre-gehashte Signaturen (allow_legacy = false).
    • U-02: Versionsvalidierung im Trusted Comment:
      • Validiert, dass die im signierten trusted comment hinterlegte Version exakt mit dem Release-Tag übereinstimmt (Replay-Schutz).
    • U-03: Sekundärer Backup-Release-Schlüssel:
      • Hinterlegung eines sekundären Public Keys für nahtlosen Schlüsselübergang bei Key-Rollover.

    Plattform, Speichersicherheit & Dokumentation (M-02, M-03, M-04, Z-01, Z-02, Z-03)

    • M-02: Ganzzahl-Überlaufschutz:
      • overflow-checks = true im Release-Profil zur Abwehr von Integer-Overflows.
    • M-03: Linux-Mount-Instruktionen:
      • Transparente Ausgabe von WebDAV-Zugangsdaten und manuelle Mount-Befehle unter Linux.
    • M-04: Bedrohungsmodell für Session-Tokens:
      • Umfassende Dokumentation des Userland-Sicherheitsmodells und Prozessgrenzen in THREAT_MODEL.md und README.md.
    • Z-01: Sicheres Decoy-Passwort-Zeroizing:
      • Schutz des temporären Alibi-Passworts im Speicher via Zeroizing<String>.
    • Z-02: Mutex-Poisoning-Resilienz:
      • Automatische Erholung von vergifteten Mutexes bei Thread-Panics in SQLite-Verbindungen.
    • Z-03: WAL- und SHM-Forensik-Dokumentation:
      • Dokumentation über die flüchtige Existenz verschlüsselter WAL-/SHM-Dateien und Schredder-Mechanismen.

    [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).
    Downloads