94 lines
3.3 KiB
Markdown
94 lines
3.3 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
|
|
```
|
|
|
|
---
|
|
|
|
## 📦 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).
|