# 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) und `chunk_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: ```powershell cargo build --release ``` Das fertige Binary befindet sich unter `target/release/sanctum.exe`. --- ## 🛠️ Verwendung ### 1. Neuen Container anlegen ```powershell sanctum.exe init --path "C:\Users\username\Documents\safe.sanctum" ``` ### 2. Container als Windows-Laufwerk einbinden ```powershell 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 ```powershell sanctum.exe unmount --drive S ```