diff --git a/README.md b/README.md index e9777b6..6af7fad 100644 --- a/README.md +++ b/README.md @@ -1,42 +1,52 @@ # 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. +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. -- **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 +- **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 -- **Key Derivation (Argon2id)**: +- **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)**: - 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. + 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. -- **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. +- **Swap-Attack-Schutz**: + Als Authenticated Associated Data (AAD) werden `node_id` (8 Bytes LE) und `chunk_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. --- -## 📦 Storage Engine (SQLite3 im VFS-Container) +## 📦 Speicher- & Kompressions-Engine -Der gesamte Container besteht aus exakt **einer** Datei auf der Host-Festplatte (`.sanctum`), die dynamisch bis über 100 GB wachsen kann. +Der Container besteht aus exakt **einer** Host-Datei (`.sanctum`), die dynamisch bis über 100 GB wachsen kann: -- **Pragmas**: +- **SQLite3 WAL & Auto-Vacuum**: + - `PRAGMA auto_vacuum = INCREMENTAL;` - `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. +- **LZ4-Kompression**: + Chunks werden vor der Verschlüsselung via `lz4_flex` komprimiert. 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 via `sanctum compact` vollständig an das Windows-Hostdateisystem zurückgegeben werden. --- @@ -52,44 +62,119 @@ Das fertige Binary befindet sich unter `target/release/sanctum.exe`. --- -## 🛠️ Verwendung +## 🛠️ CLI-Referenz & Verwendung + +### 1. Container initialisieren -### 1. Neuen Container anlegen ```powershell -sanctum.exe init --path "C:\Users\username\Documents\safe.sanctum" -``` +# 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) -### 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. +# 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+C` im Terminal oder Rechtsklick im Tray -> "Aushängen & Beenden" führt einen sauberen Unmount, Speicher-Compaction und WAL-Checkpoint durch. + +--- + +### 3. Container manuell trennen -### 3. Laufwerk manuell trennen ```powershell sanctum.exe unmount --drive S ``` -### 4. Master-Passwort ändern -```powershell -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. +--- +### 4. Master-Passwort ändern + +```powershell +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. --- -## 📦 Release Packaging +### 5. Disaster Recovery & Notfallschlüssel -Um ein vollständiges Release-Paket mit Tests, komprimiertem ZIP-Archiv und SHA-256 Prüfsummen zu erstellen: +```powershell +# 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) + +```powershell +# 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 + +```powershell +# .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: + +1. **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`). +2. **Inactivity Auto-Lock**: Erkennt Inaktivität anhand echter Lese-/Schreibzugriffe und trennt den Container automatisch nach Erreichen des Timeouts. +3. **Session Lock Detection**: Reagiert über `WTSRegisterSessionNotification` sofort 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 powershell -ExecutionPolicy Bypass -File .\scripts\package-release.ps1 ``` -Das fertige Paket liegt in `dist/` bereit: -- `dist/sanctum-v0.1.0-windows-x86_64.zip` +Erzeugt: +- `dist/sanctum-v0.2.0-windows-x86_64.zip` - `dist/SHA256SUMS.txt` --- @@ -98,3 +183,4 @@ Das fertige Paket liegt in `dist/` bereit: - Lizenziert unter der [MIT License](LICENSE). - Details zu allen Versionen und Änderungen findest du im [CHANGELOG.md](CHANGELOG.md). +