fix(format-v3): transcript versioning in HMAC and atomic upgrade MAC (F-04, F-05)
Sanctum Release / Build & Test (Windows x86_64 & Linux musl) (push) Waiting to run
Sanctum Release / Sign & Release (push) Blocked by required conditions

This commit is contained in:
2026-09-22 21:02:22 +02:00
parent 3a1a1ca6ce
commit 76c23dbfa3
15 changed files with 755 additions and 77 deletions
+25
View File
@@ -5,6 +5,31 @@ Alle nennenswerten Änderungen an diesem Projekt werden in dieser Datei dokument
Das Format basiert auf [Keep a Changelog](https://keepachangelog.com/de/1.1.0/)
und dieses Projekt folgt den Richtlinien von [Semantic Versioning](https://semver.org/lang/de/).
## [0.9.5] - 2026-09-22
### Transcript-Version & Upgrade-MAC (F-04, F-05)
Dieses Patch-Release schließt die verbliebenen Bindungs- und Zustands-Schwachstellen im Format-V3-Kryptosystem:
- **F-04 (MITTEL): Schließung des unbegrenzten LegacyValid-Rollback-Fensters**:
- *Problem*: In v0.9.4 blieb `LegacyValid` zeitlich unbegrenzt aktiv. Ein Angreifer mit Container-Schreibzugriff konnte nach einem legitimen 0.9.4-Mount einen alten 0.9.3-MAC-Blob und alte Chunk-Zeilen replizieren, was zu einem unbemerkten Content-Rollback führte.
- *Fix*: Erweiterung des HMAC-Transcript-Inputs um `transcript_ver` (Little-Endian u32):
`b"SANCTUM_META_V3\0" || metadata_gen (LE64) || transcript_ver (LE32) || canonical`.
- `transcript_ver = 2`: Format v0.9.4+ (Knoten + sortierte Chunk-Tupel `(node_id, chunk_index, generation)`).
- Verifikations-Kaskade:
1. Prüfung mit `ver=2` und aktuellem V2-Transcript -> `Valid`. (Verhindert jeglichen Legacy-Fallback, wenn V2 passt).
2. Schlägt V2 fehl und ist `transcript_ver >= 2` in SQLite hinterlegt -> strikt `Invalid` (schließt Replay alter 0.9.3-Blobs nach Rebind aus).
3. Schlägt V2 fehl und ist `transcript_ver < 2` (Altsystem):
- Prüfung gegen natives 0.9.4-Transcript (ohne Versionsfeld + V2-Transcript) -> `NeedsTranscriptVer`.
- Prüfung gegen natives 0.9.3-Transcript (ohne Versionsfeld oder ver=1 + Legacy-Transcript) -> `LegacyValid`.
4. Andernfalls -> strikt `Invalid`.
- Transparentes Rebind beim Mounten: Sowohl `NeedsTranscriptVer` als auch `LegacyValid` werden beim regulären Mounten transparent auf `transcript_ver = 2` migriert.
- Datenbankschema: Ergänzung der Spalte `transcript_ver INTEGER NOT NULL DEFAULT 1` in Tabelle `meta`.
- **F-05 (NIEDRIG / Verfügbarkeit): Atomare MAC-Persistierung & Zombie-Container-Reparatur**:
- *Problem*: `upgrade_to_v3` committete `version = 3` in der Datenbank *vor* dem Errechnen und Schreiben des initialen Metadaten-MACs. Ein Absturz in diesem Fenster hinterließ einen Zombie-Container (`version = 3`, `metadata_mac IS NULL`), der nicht mehr gemountet werden konnte.
- *Fix*: Berechnung und Schreiben des Metadaten-MACs (mit `transcript_ver = 2`, `gen = 1`) innerhalb der identischen atomaren SQLite-Transaktion wie die Chunk-Umschlüsselung vor `tx.commit()`.
- *Reparaturpfad*: Befindet sich ein Container im Zombie-Zustand (`version >= 3`, `metadata_mac IS NULL`, `restore_nonce IS NULL`), repariert `sanctum upgrade-format` diesen automatisch durch Errechnen und Persistieren des V2-MACs.
- *Fail-Closed Guard*: Ist `restore_nonce IS NOT NULL`, bricht die Reparatur strikt ab, um die Autorisierungsgarantien von F-02 (`--rebuild-mac` / interaktives `"JA"`) zu bewahren.
- *Mount-Führung*: Beim Versuch, einen Zombie-Container zu mounten, weist Sanctum den Benutzer gezielt auf `sanctum upgrade-format` hin.
## [0.9.4] - 2026-09-22
### Format-V3 Systembindung & Integritäts-Härtung (F-01, F-02, F-03)