Sanctum 🛡️
Verschlüsselter Ein-Datei-Container unter Windows 10/11 im reinen Userland
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(~5.3 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) undchunk_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_flexkomprimiert. 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 viasanctum compactvollstä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
# Lautloser Stealth-Modus (keine Banner/Token-Ausgabe, kein Explorer-Auto-Open):
sanctum.exe mount --path "C:\Pfad\tresor.sanctum" --stealth
# Explorer-Auto-Open gezielt unterdrücken (maximale ShellBag-OpSec):
sanctum.exe mount --path "C:\Pfad\tresor.sanctum" --no-open
- 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 standardmäßig im Explorer geöffnet (abschaltbar via
--no-openoder--stealth). - System-Tray: Ein Schild-Icon im Windows Infobereich erlaubt Statusabfrage und direktes Aushängen.
- Beenden:
Ctrl+Cim 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:
- 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). - Inactivity Auto-Lock: Erkennt Inaktivität anhand echter Lese-/Schreibzugriffe und trennt den Container automatisch nach Erreichen des Timeouts.
- Session Lock Detection: Reagiert über
WTSRegisterSessionNotificationsofort auf Windows-Sitzungssperren (Win + L) oder Abmeldungen und schließt den Container blitzschnell ab. - RAM-Paging-Schutz (
VirtualLock): Verriegelt sensible Schlüsselstrukturen (DEK) im physischen RAM, um das Auslagern inpagefile.sysoderswapfile.sysdurch den Windows Memory Manager zu verhindern. - ShellBag & Forensik-OpSec: Über die Optionen
--no-openoder--stealthkann das automatische Öffnen des Windows Explorers vollständig unterdrückt werden, um zu verhindern, dass Ordnernamen persistent im ShellBag-Cache (UsrClass.dat) protokolliert werden. - VFS Carrier-Schutz: Die im Decoy-Tresor sichtbare Alibi-Trägerdatei wird im VFS gegen versehentliches Löschen, Überschreiben oder Umbenennen geschützt.
- Power-Loss Crash-Consistency: Atomare Bündelung von Block-Schreiboperationen und Metadaten-Größenaktualisierungen in einer SQLite-Transaktion verhindert Datenkorruption bei plötzlichem Stromausfall.
🔧 Windows-Kompatibilität & AV/EDR-Tuning
Windows Defender SmartScreen ("Unbekannter Herausgeber")
Wird die Binärdatei über einen Webbrowser heruntergeladen, versieht Windows sie mit dem Mark-of-the-Web (MotW). Da Open-Source-Projekte über kein kostenpflichtiges EV-Code-Signing-Zertifikat verfügen, zeigt Windows beim ersten Start den blauen SmartScreen-Dialog:
- Einmalige Freigabe im Dialog: Klick auf "Weitere Informationen"
\to"Trotzdem ausführen". - Schnellfreigabe via PowerShell:
Unblock-File .\sanctum.exe
Windows Defender "Überwachter Ordnerzugriff" (Controlled Folder Access - CFA)
Ist der erweiterte Ransomware-Schutz von Windows aktiv, kann Defender den Schreibzugriff auf Containerdateien in Standard-Benutzerordnern (Dokumente, Desktop) mit Fehler 5 (Zugriff verweigert) blockieren:
- Abhilfe: Erlauben Sie
sanctum.exein den Windows-Sicherheitseinstellungen (Viren- & Bedrohungsschutz\toRansomware-Schutz verwalten\toApp durch überwachten Ordnerzugriff zulassen), oder speichern Sie Container in einem separaten Verzeichnis (z. B.C:\Sanctum\).
I/O-Performance-Tuning
Windows Defender scannt standardmäßig jeden modifizierten 1-MB-Chunk in Echtzeit. Durch das Hinzufügen der Dateiendung *.sanctum zu den Defender-Ausschlüssen lässt sich der I/O-Durchsatz bei großen Kopiervorgängen um 30–50% steigern.
📦 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.3.1-windows-x86_64.zipdist/SHA256SUMS.txt
📄 Lizenz & Changelog
- Lizenziert unter der MIT License.
- Details zu allen Versionen und Änderungen findest du im CHANGELOG.md.
