19 KiB
Sanctum 🛡️
Verschlüsselter Ein-Datei-Container unter Windows & Linux 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 und Linux im reinen Userland verwaltet.
- 100% Userland: Keine Administratorrechte erforderlich, keine Kernel-Treiber (weder WinFsp noch Dokan).
- Windows Explorer- & Desktop-Integration: Einhängen als nativer Netzlaufwerk-Buchstabe (Z: abwärts) via lokalem WebDAV (
127.0.0.1), Explorer-Kontextmenü und System-Tray-Icon unter Windows sowiegio mount/.desktop-MIME unter Linux. - Native Synchronisation (
sanctum sync): RSync-artiger bidirektionaler Dateiabgleich (Push&Pull) mit 1-MB-Chunk-Streaming direkt in SQLite. Umgeht das fundamentale 4-GB-Dateilimit des Windows WebClient-Dienstes (0x800700DF) für Dateien beliebiger Größe (5 GB, 50 GB, 500 GB+). Inklusive--dry-runSimulation,--deleteSpiegelung und--checksumHashprüfung. - In-Place Self-Upgrade (
sanctum upgrade): Aktualisiert das laufende Binary per Knopfdruck direkt über Gitea Releases. Löst Windows File-Locking viaself-replace, verifiziert jedes Release kryptografisch via Minisign (SHA256SUMS.txt.minisig) und sperrt Drittanbieter-URLs standardmäßig ab. - 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.
- Dual-Vault / Second Safe: 2-Slot-Architektur mit Alibi-Trägerdatei (Modell A). Erlaubt die Trennung von Standard- und vertraulichen Zweittresor-Daten (z. B. Schutz vor Schulterblick im Alltag). Volle Dateinamen-Verschlüsselung im Second Safe.
- 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: Standalone-Executables ohne externe DLL-Abhängigkeiten (
sanctum.exefür Windows, statisches musl-ELF für Linux).
💡 Neu bei Sanctum? Eine kompakte Schritt-für-Schritt-Anleitung findest du in der Schnellstartanleitung (QUICKSTART.md). Hinweise zur Installation via Scoop oder Winget gibt es im Installations-Guide (INSTALL.md).
🔐 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 & VirtualLock):
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. Schlüsseldaten werden mittelsVirtualLock/mlockvor Paging geschützt. - 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. - Dual-Vault (Multi-Slot & Carrier): Konstante 2-Slot-Architektur. Slot 0 dient als Standard-/Decoy-Vault, Slot 1 als Second Safe (Hidden Vault) oder CSPRNG-Dummy. Dient dem Schutz vor neugierigen Blicken oder beiläufigem Zwang im Alltag. (Hinweis: Die Trägerdatei besitzt hohe Entropie und ist forensisch nachweisbar; kein Anspruch auf juristisch unnachweisbare Abstreitbarkeit gegen behördliche Beschlagnahme).
- Dateinamen-Verschlüsselung:
Dateinamen im Hidden Vault werden mit frischen CSPRNG-Nonces und AES-256-GCM verschlüsselt in der Datenbank gespeichert (Legacy-Kompatibilität über
--legacy-names). - Kryptografisches Chunk-Shredding (Logisches Löschen vs. Physikalische Bereinigung): Vor jedem Löschen oder Kürzen werden Chunk-Payloads, Nonces und Tags in der SQLite-Datenbank transaktional mit CSPRNG-Zufallsrauschen überschrieben. Dies verhindert zuverlässig jede logische Rekonstruktion auf Datenbank- und Dateisystemebene. Wichtiger technischer Hinweis (SA-07): Dies stellt ein logisches sicheres Löschen dar. Auf modernen Solid-State-Drives (SSD, NVMe) und Copy-on-Write-Dateisystemen (Btrfs, ZFS, APFS, ReFS) kann Software im Userland bauartbedingt keine physikalische Datenträgerbereinigung (Media Sanitization) garantieren: Der Flash Translation Layer (FTL) und Wear-Leveling-Algorithmen leiten Schreiboperationen auf neue Flash-Blöcke um; alte physikalische Zellen verbleiben bis zur SSD Garbage Collection / TRIM im Flash. Für absolute physische Bereinigung wird eine hardware- oder blockebenenbasierte Vollverschlüsselung (BitLocker, LUKS) oder ein ATA/NVMe Secure Erase empfohlen.
📦 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 Zweittresor (Dual-Vault: Decoy + Second 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). - Linux & WebDAV-Integration: Auf Linux startet Sanctum das WebDAV-VFS auf
127.0.0.1mit lokaler Session-Token-Authentifizierung. Im Terminal werden direkt die Zugangsdaten und passende Mount-Befehle ausgegeben:- Benutzer:
sanctum| Passwort: Dynamisches Session-Token (Hex) gio mount dav://sanctum@127.0.0.1:8443/mount -t davfs -o username=sanctum http://127.0.0.1:8443/ /mnt/sanctum
- Benutzer:
- 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 (passwd) & Rekeying (rekey)
# Master-Passwort ändern (Key-Rewrapping in Sekundenbruchteilen):
sanctum.exe passwd --path "C:\Pfad\tresor.sanctum"
Note
passwdverpackt den bestehenden Datenschlüssel (DEK) mit einem neuen KEK. Das zuvor notierte 24-Wort Notfallblatt bleibt weiterhin gültig!
# Master-Schlüssel erneuern & bisherige Notfallkarten entwerten (K-03):
sanctum.exe rekey --path "C:\Pfad\tresor.sanctum"
Important
rekeygeneriert einen komplett frischen DEK, verschlüsselt alle Datenblöcke um und gibt ein neues 24-Wort Notfallblatt aus. Alle bisherigen Notfallkarten werden dadurch unwiderruflich ungültig.
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
8. Native Synchronisation (sanctum sync)
Sanctum bietet eine native, rsync-ähnliche Synchronisations-Engine, die Dateien direkt auf Datenbank- und Chunk-Ebene überträgt. Dies löst das fundamentale Problem des Windows WebClient-Dienstes (mrxdav.sys), welcher beim Kopieren über gemountete WebDAV-Netzlaufwerke konstruktionsbedingt auf maximal 4 GB pro Datei beschränkt ist (FileSizeLimitInBytes / Fehler 0x800700DF).
# 1. Vorab-Simulation ausführen (Dry-Run / risikolos prüfen):
sanctum.exe sync --path "C:\Pfad\tresor.sanctum" "C:\Users\User\Downloads" /Downloads --dry-run
# 2. Ordner synchronisieren (unfertige Downloads und Temporärdateien ausschließen):
sanctum.exe sync --path "C:\Pfad\tresor.sanctum" "C:\Users\User\Downloads" /Downloads --exclude "*.crdownload" --exclude "*.tmp"
# 3. Exakte 1:1 Spiegelung (löscht verwaiste Dateien im Ziel, schont aber per --exclude ausgeschlossene Pfade):
sanctum.exe sync --path "C:\Pfad\tresor.sanctum" "C:\Users\User\Dokumente" /Dokumente --delete
# 3b. Radikales Löschen inklusive ausgeschlossener Pfade:
sanctum.exe sync --path "C:\Pfad\tresor.sanctum" "C:\Users\User\Dokumente" /Dokumente --delete --delete-excluded
# 4. Mit kryptografischer Inhaltsprüfung (SHA-256 Hashes vergleichen):
sanctum.exe sync --path "C:\Pfad\tresor.sanctum" "C:\Users\User\Projekte" /Projekte --checksum
# 5. Daten aus dem Tresor wiederherstellen (Pull / Container -> Host):
sanctum.exe sync --path "C:\Pfad\tresor.sanctum" /Downloads "D:\Wiederhergestellt\Downloads" --pull
- Dateigrößen: Dateien beliebiger Größe (5 GB, 50 GB, 500 GB+) werden in 1-MB-Streaming-Chunks mit AES-256-GCM direkt übertragen.
- Fast-Delta Check: Dateien mit identischer Größe und Modifikationszeitstempel (
mtime) werden sofort übersprungen. - Metadaten-Erhaltung: Datei-Zeitstempel (
mtime) werden in beide Richtungen exakt konserviert.
9. In-Place Self-Upgrade (sanctum upgrade)
Aktualisiert die laufende Sanctum-Executable direkt über die offizielle Gitea-Releases-API auf die neueste Version, ohne manuelle Browser-Downloads oder separate Paketmanager:
# Nur prüfen, ob ein Update verfügbar ist:
sanctum.exe upgrade --check
# oder mit dem Alias:
sanctum.exe update -c
# Interaktives Upgrade durchführen (zeigt Release-Details und fragt nach Bestätigung):
sanctum.exe upgrade
# Vollautomatisches Upgrade ohne Rückfragen (z. B. in Skripten):
sanctum.exe upgrade -y
# Upgrade erzwingen (Neuinstallation / Reinstall derselben Version):
sanctum.exe upgrade --force
- Plattformunabhängig: Löst das Windows-Dateilock (
ERROR_ACCESS_DENIED) viaself-replaceund unterstützt ebenso Linux (statisches musl ELF). - Kryptografische Integrität: Das heruntergeladene Binary wird vor dem Ersetzen zwingend gegen die offizielle
SHA256SUMS.txtvia SHA-256 verifiziert. - Paketmanager-Harmonie: Erkennt automatisch Installationen via Scoop (
scoop update sanctum) oder Winget (winget upgrade HaraldPansi.Sanctum) und warnt den Benutzer.
🛡️ 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.7.0-windows-x86_64.zip(Windows x86_64 ZIP)dist/sanctum-v0.7.0-linux-x86_64.tar.gz(Linux x86_64 musl static TAR.GZ viapackage-release-linux.ps1)dist/SHA256SUMS.txtdist/SHA256SUMS.txt.minisig(Kryptografische Minisign-Release-Signatur)
⚖️ Rechtliche Hinweise, Compliance & Exportkontrolle
- Kryptografie-Exportkontrolle (EAR & EU Dual-Use): Sanctum nutzt starke Kryptografie (AES-256-GCM, Argon2id). Da der Quellcode als freie Open-Source-Software jedermann unbeschränkt und unentgeltlich zur Verfügung steht, unterliegt er den Ausnahmetatbeständen gem. 15 C.F.R. § 742.15(b) (US EAR) sowie der General Software Note (GSN) der Verordnung (EU) 2021/821.
- Dual-Vault-Architektur & Herausgabepflichten: Sanctum bietet mit dem steganografischen Alibi-Carrier (Modell A) eine praktische Zweittresor-Funktion zum Schutz vor Schulterblick und beiläufiger Nötigung. Dies ist ein technischer Alltags-Schutzmechanismus, kein juristisches Schutzschild und keine forensisch unnachweisbare Abstreitbarkeit gegen behördliche Beschlagnahme.
- Datenschutz & Telemetrie-Freiheit (DSGVO / GDPR): Sanctum arbeitet zu 100% offline und enthält keinerlei Code für Telemetrie, Analytics, Fehlerberichterstattung oder IP-Übertragungen (Art. 25 DSGVO Privacy by Design).
- Haftungsbeschränkung (EU/DACH Recht): Die Software wird als unentgeltliche FOSS-Software bereitgestellt. Gemäß § 521 BGB (Schenkungsrecht) ist die Haftung des Entwicklers auf Vorsatz und grobe Fahrlässigkeit beschränkt. Der Anwender ist für die sichere Verwahrung von Schlüsseln und Backups selbst verantwortlich.
- Ausführliche rechtliche Erläuterungen finden sich in
LEGAL.md.
📄 Lizenz & Changelog
- Lizenziert unter der MIT License.
- Das detaillierte Bedrohungsmodell und Sicherheitsarchitektur-Dokumentation findest du in
THREAT_MODEL.md. - Vollständige Third-Party-Attributionen aller ~230 Abhängigkeiten (Apache-2.0, MIT, BSD, SQLite Public Domain) sind in
THIRD_PARTY_LICENSES.mddokumentiert. - Ausführliche rechtliche Bestimmungen und Exportkontroll-Hinweise sind in
LEGAL.mdgeregelt. - Details zu allen Versionen und Änderungen findest du im CHANGELOG.md.
