Files
sanctum/README.md
T

101 lines
3.5 KiB
Markdown

# 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
```
### 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.
---
## 📦 Release Packaging
Um ein vollständiges Release-Paket mit Tests, komprimiertem ZIP-Archiv und SHA-256 Prüfsummen zu erstellen:
```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`
- `dist/SHA256SUMS.txt`
---
## 📄 Lizenz & Changelog
- Lizenziert unter der [MIT License](LICENSE).
- Details zu allen Versionen und Änderungen findest du im [CHANGELOG.md](CHANGELOG.md).