Files
sanctum/README.md
T

3.5 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) 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:

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

4. Master-Passwort ändern

sanctum.exe passwd --path "C:\Users\username\Documents\safe.sanctum"

Ändert das Master-Passwort über Key-Wrapping in Sekundenbruchteilen, ohne dass Nutzdatenblöcke neu verschlüsselt werden müssen.


📦 Release Packaging

Um ein vollständiges Release-Paket mit Tests, komprimiertem ZIP-Archiv und SHA-256 Prüfsummen zu erstellen:

powershell -ExecutionPolicy Bypass -File .\scripts\package-release.ps1

Das fertige Paket liegt in dist/ bereit:

  • dist/sanctum-v0.1.0-windows-x86_64.zip
  • dist/SHA256SUMS.txt

📄 Lizenz & Changelog