193 lines
8.0 KiB
Markdown
193 lines
8.0 KiB
Markdown
<p align="center">
|
|
<img src="assets/logo.png" alt="Sanctum Logo" width="220"/>
|
|
</p>
|
|
|
|
# Sanctum 🛡️
|
|
|
|
**Verschlüsselter Ein-Datei-Container unter Windows 10/11 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 im reinen Userland verwaltet.
|
|
|
|
- **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` (~5.3 MB) ohne externe DLL-Abhängigkeiten.
|
|
|
|
---
|
|
|
|
## 🔐 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)**:
|
|
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.
|
|
- **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.
|
|
|
|
---
|
|
|
|
## 📦 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_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.
|
|
|
|
---
|
|
|
|
## 🚀 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`.
|
|
|
|
---
|
|
|
|
## 🛠️ CLI-Referenz & Verwendung
|
|
|
|
### 1. Container initialisieren
|
|
|
|
```powershell
|
|
# 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)
|
|
|
|
```powershell
|
|
# 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
|
|
|
|
```powershell
|
|
sanctum.exe unmount --drive S
|
|
```
|
|
|
|
---
|
|
|
|
### 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.
|
|
|
|
---
|
|
|
|
### 5. Disaster Recovery & Notfallschlüssel
|
|
|
|
```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
|
|
```
|
|
|
|
Erzeugt:
|
|
- `dist/sanctum-v0.3.0-windows-x86_64.zip`
|
|
- `dist/SHA256SUMS.txt`
|
|
|
|
---
|
|
|
|
## 📄 Lizenz & Changelog
|
|
|
|
- Lizenziert unter der [MIT License](LICENSE).
|
|
- Details zu allen Versionen und Änderungen findest du im [CHANGELOG.md](CHANGELOG.md).
|
|
|