2.8 KiB
2.8 KiB
Sanctum 🛡️
Sanctum ist eine eigenständige, speichersichere und hochperformante CLI-Anwendung in Rust, die einen verschlüsselten Ein-Datei-Container (.sanctum) unter Windows (10/11) im reinen Userland verwaltet.
- Keine Administratorrechte erforderlich
- Keine Kernel-Treiber (weder WinFsp noch Dokan)
- Transparenter Windows Explorer-Zugriff über einen integrierten lokalen WebDAV-Server (
127.0.0.1) via Windows-Bordmittel (net use) - Statisches Single-Binary (
sanctum.exe, ~4.6 MB) ohne externe DLL-Abhängigkeiten
🔐 Kryptografie & Sicherheitsarchitektur
- Key Derivation (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):
Ein 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. - RAM-Schutz:
Alle Schlüsselstrukturen implementieren das
Zeroize-Trait (Zeroizing<[u8; 32]>), um sensible Schlüsseldaten beim Verlassen des Gültigkeitsbereichs im Arbeitsspeicher sicher zu nullen. - Chunk-Verschlüsselung (AES-256-GCM): Dateien werden in Blöcken von 1 MB verschlüsselt.
- Schutz vor Swap-Angriffen:
Als Associated Data (AAD) werden
node_id(8 Bytes LE) undchunk_index(8 Bytes LE) fest eingebunden. Dadurch wird verhindert, dass Chunks zwischen Dateien oder innerhalb einer Datei vertauscht werden können.
📦 Storage Engine (SQLite3 im VFS-Container)
Der gesamte Container besteht aus exakt einer Datei auf der Host-Festplatte (.sanctum), die dynamisch bis über 100 GB wachsen kann.
- Pragmas:
PRAGMA journal_mode = WAL;PRAGMA synchronous = NORMAL;PRAGMA page_size = 8192;PRAGMA foreign_keys = ON;
- Tabellen:
meta: Container-Header mit Magic Bytes (SANCTUM\0), Version 1, Salt, KDF-Parametern und Wrapped DEK.nodes: Verzeichnis- und Dateiknoten mit Hierarchiebaum und Zeitstempeln.chunks: Verschlüsselte Nutzdatenblöcke mit Nonce und Authentifizierungstag.
🚀 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.
🛠️ Verwendung
1. Neuen Container anlegen
sanctum.exe init --path "C:\Users\username\Documents\safe.sanctum"
2. Container als Windows-Laufwerk einbinden
sanctum.exe mount --path "C:\Users\username\Documents\safe.sanctum" --drive S
Das Netzlaufwerk S: steht sofort im Windows Explorer zur Verfügung.
Zum Beenden und sicheren Trennen einfach Ctrl+C im Terminal drücken.
3. Laufwerk manuell trennen
sanctum.exe unmount --drive S