Sanctum 🛡️

Sanctum ist eine eigenständige, speichersichere und hochperformante CLI-Anwendung in Rust, die verschlüsselte Ein-Datei-Container (.sanctum) unter Windows 10/11 im reinen Userland verwaltet.

  • 100% Userland: Keine Administratorrechte erforderlich, keine Kernel-Treiber (weder WinFsp noch Dokan).
  • Windows Explorer-Integration: Einhängen als nativer Netzlaufwerk-Buchstabe (Z: abwärts) via lokalem WebDAV (127.0.0.1), Explorer-Kontextmenü und System-Tray-Icon.
  • Transparente LZ4-Kompression: Automatische Kompression von Chunks mit On-the-Fly-Dekompression und adaptivem Fallback.
  • Anti-Forensik & Storage Compaction: Inkrementelles Auto-Vacuum zur physikalischen Freigabe von Speicherplatz und kryptografisches Überschreiben (Shredding) von Datenblöcken mit CSPRNG-Rauschen vor dem Löschen.
  • Plausible Deniability (Hidden Safe): Dual-Slot-Header. Ein unbenutzter Slot enthält uniformes CSPRNG-Rauschen, das sich nicht von einem echten Hidden Vault unterscheiden lässt. Volle Dateinamen-Verschlüsselung im Hidden Vault.
  • OpSec & Explorer Anti-Leak Shield: Blockiert Explorer-Spuren (Thumbs.db, desktop.ini, *.tmp, :Zone.Identifier), automatischer Unmount bei Inaktivität oder Windows-Sitzungssperre (Win + L).
  • Disaster Recovery: 24-Wort BIP-39 Mnemonic Seed Phrases, konsistente Online-Backups via SQLite Online Backup API und kryptografische Vollprüfung (sanctum verify).
  • Statisches Single-Binary: sanctum.exe (~4.6 MB) ohne externe DLL-Abhängigkeiten.

🔐 Kryptografie & Sicherheitsarchitektur

  • Schlüsselableitung (Argon2id): Aus dem Master-Passwort wird mittels Argon2id (M=64\,\text{MB}, T=3, P=4) ein 256-Bit Key Encryption Key (KEK) abgeleitet.
  • Data Encryption Key (DEK): Zufälliger 256-Bit Schlüssel via CSPRNG (OsRng). Der DEK wird mit dem KEK via AES-256-GCM verschlüsselt und im Header abgelegt.
  • Speichersicherheit (Zeroize): Alle Schlüsselstrukturen implementieren das Zeroize-Trait (Zeroizing<[u8; 32]>), um sensible Schlüsseldaten beim Verlassen des Gültigkeitsbereichs im RAM sofort sicher zu nullen.
  • Chunk-Verschlüsselung (AES-256-GCM): Dateien werden in Blöcken von 1 MB verschlüsselt.
  • Swap-Attack-Schutz: Als Authenticated Associated Data (AAD) werden node_id (8 Bytes LE) und chunk_index (8 Bytes LE) an jeden Block gebunden. Ein Vertauschen von Chunks zwischen Dateien oder innerhalb einer Datei führt zum Authentifizierungsfehler.
  • Plausible Deniability (Multi-Slot): Konstante 2-Slot-Architektur. Slot 0 dient als Standard-/Decoy-Vault, Slot 1 als Hidden Vault oder CSPRNG-Dummy. Ein Angreifer kann mathematisch nicht feststellen, ob Slot 1 ungenutzt ist oder einen zweiten Tresor birgt.
  • Dateinamen-Verschlüsselung: Dateinamen im Hidden Vault werden mit frischen CSPRNG-Nonces und AES-256-GCM verschlüsselt in der Datenbank gespeichert.
  • Kryptografisches Chunk-Shredding: Vor jedem Löschen oder Kürzen werden Chunk-Payloads in der SQLite-Datenbank mit CSPRNG-Rauschen überschrieben.

📦 Speicher- & Kompressions-Engine

Der Container besteht aus exakt einer Host-Datei (.sanctum), die dynamisch bis über 100 GB wachsen kann:

  • SQLite3 WAL & Auto-Vacuum:
    • PRAGMA auto_vacuum = INCREMENTAL;
    • PRAGMA journal_mode = WAL;
    • PRAGMA synchronous = NORMAL;
    • PRAGMA page_size = 8192;
  • LZ4-Kompression: Chunks werden vor der Verschlüsselung via lz4_flex komprimiert. Spart die Kompression weniger als 64 Bytes (z. B. bei bereits komprimierten Bildern oder Videos), wird adaptiv die Rohform verschlüsselt.
  • Speicherplatzrückgabe: Durch PRAGMA auto_vacuum = INCREMENTAL; können freigewordene SQLite-Pages beim Aushängen oder via sanctum compact vollständig an das Windows-Hostdateisystem zurückgegeben werden.

🚀 Kompilieren

Voraussetzungen: Rust (>= 1.85) mit GCC/MinGW-Toolchain für SQLite:

cargo build --release

Das fertige Binary befindet sich unter target/release/sanctum.exe.


🛠️ CLI-Referenz & Verwendung

1. Container initialisieren

# Standard-Container anlegen:
sanctum.exe init --path "C:\Pfad\tresor.sanctum"

# Container mit Plausible Deniability (Decoy + Hidden Safe) anlegen:
sanctum.exe init --path "C:\Pfad\tresor.sanctum" --with-hidden

(Gibt nach Passworteingabe eine 24-Wort BIP-39 Notfall-Wiederherstellungskarte aus).


2. Container einbinden (Mount)

# Automatische Wahl des nächsten freien Laufwerksbuchstabens (z. B. Z:):
sanctum.exe mount --path "C:\Pfad\tresor.sanctum"

# Bestimmten Laufwerksbuchstaben erzwingen:
sanctum.exe mount --path "C:\Pfad\tresor.sanctum" --drive S

# Mit Inaktivitäts-Timeout (in Sekunden):
sanctum.exe mount --path "C:\Pfad\tresor.sanctum" --idle-timeout 300
  • Automatischer Slot-Unlock: Sanctum prüft das eingegebene Passwort gegen alle Slots und bindet automatisch den entsprechenden Tresor ein (Slot 0 Decoy oder Slot 1 Hidden Vault).
  • Windows Explorer: Das gemountete Laufwerk wird automatisch im Explorer geöffnet.
  • System-Tray: Ein Schild-Icon im Windows Infobereich erlaubt Statusabfrage und direktes Aushängen.
  • Beenden: Ctrl+C im Terminal oder Rechtsklick im Tray -> "Aushängen & Beenden" führt einen sauberen Unmount, Speicher-Compaction und WAL-Checkpoint durch.

3. Container manuell trennen

sanctum.exe unmount --drive S

4. Master-Passwort ändern

sanctum.exe passwd --path "C:\Pfad\tresor.sanctum"

Ändert das Passwort über Key-Rewrapping in Sekundenbruchteilen, ohne die Nutzdaten neu verschlüsseln zu müssen.


5. Disaster Recovery & Notfallschlüssel

# 24-Wort BIP-39 Notfallschlüssel anzeigen:
sanctum.exe recovery-key --path "C:\Pfad\tresor.sanctum"

# Konsistentes Online-Backup erstellen (auch während Mount möglich):
sanctum.exe backup --path "C:\Pfad\tresor.sanctum" --output "D:\Backup\tresor_backup.sanctum"

# Container aus Backup wiederherstellen:
sanctum.exe restore --path "D:\Backup\tresor_backup.sanctum" --output "C:\Pfad\tresor_restored.sanctum"

# Vollständige Integritätsprüfung (B-Tree, Knoten und AEAD-Tags aller Chunks):
sanctum.exe verify --path "C:\Pfad\tresor.sanctum"

6. Storage Compaction (Speicherbereinigung)

# Freelist-Pages an Windows freigeben und Container verkleinern:
sanctum.exe compact --path "C:\Pfad\tresor.sanctum"

# Nur eine begrenzte Anzahl Pages freigeben:
sanctum.exe compact --path "C:\Pfad\tresor.sanctum" --pages 500

7. Windows Explorer Kontextmenü-Integration

# .sanctum-Dateien für Rechtsklick ("In Sanctum öffnen") in HKCU registrieren (ohne Adminrechte):
sanctum.exe register

# Registrierung wieder rückstandslos entfernen:
sanctum.exe unregister

🛡️ OpSec & Explorer Anti-Leak Shield

Sanctum schützt vertrauliche Daten vor unbeabsichtigten Windows-Spuren:

  1. Anti-Leak Dateifilter: Unterdrückt das Anlegen von Thumbs.db, desktop.ini, Office-Sperrdateien (~$*), temporären Dateien (*.tmp) und NTFS Alternate Data Streams (:Zone.Identifier).
  2. Inactivity Auto-Lock: Erkennt Inaktivität anhand echter Lese-/Schreibzugriffe und trennt den Container automatisch nach Erreichen des Timeouts.
  3. Session Lock Detection: Reagiert über WTSRegisterSessionNotification sofort auf Windows-Sitzungssperren (Win + L) oder Abmeldungen und schließt den Container blitzschnell ab.

📦 Release Packaging & Distribution

Um ein Distributionspaket mit Release-Binary, Checksummen und Dokumentation zu bauen:

powershell -ExecutionPolicy Bypass -File .\scripts\package-release.ps1

Erzeugt:

  • dist/sanctum-v0.2.0-windows-x86_64.zip
  • dist/SHA256SUMS.txt

📄 Lizenz & Changelog

S
Description
No description provided
Readme MIT
4.2 MiB
2026-09-16 12:40:37 +02:00
Languages
Rust 96.7%
PowerShell 3.3%