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) 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
- 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+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.
📦 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.zipdist/SHA256SUMS.txt
📄 Lizenz & Changelog
- Lizenziert unter der MIT License.
- Details zu allen Versionen und Änderungen findest du im CHANGELOG.md.