feat(protokoll): Eintraege vor dem Schreiben schwaerzen (#005)

Details und Diff laufen durch schwaerzen(), damit kein Private Key und
kein Passwort ins unveraenderliche Protokoll geraet - was dort einmal
steht, laesst sich per Trigger nicht mehr entfernen.

Der Wortstamm privat ist dafuer zu breit: er schwaerzte auch Pfade und
Verwendungszaehler, die das Protokoll gerade zeigen soll. Jetzt greifen
nur Felder, die den Schluessel selbst tragen, und jeder PEM-Block.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-12 09:30:51 +02:00
co-authored by Claude Opus 5.5
parent b194054d30
commit 364c514b04
5 changed files with 99 additions and 11 deletions
+12 -8
View File
@@ -1,23 +1,27 @@
# #005 Revisionssicheres Protokoll
**Status:** offen
**Status:** erledigt
**Meilenstein:** v0.1.0
**Labels:** sicherheit
**Geschätzt:** 2 h **Tatsächlich:** –
**Geschätzt:** 2 h **Tatsächlich:** 0 h 10 min
## Ziel
Jede Aktion landet im Protokoll; Einträge sind unveränderlich und über eine Hash-Kette verbunden.
## Aufgaben
- [ ] Modell `Protokoll` mit Akteur, Aktion, Host, Zielbenutzer, Fingerprint, Diff, Ergebnis
- [ ] DB-Trigger verbietet UPDATE/DELETE
- [ ] Hash-Kette (SHA-256 über Vorgänger + Inhalt), Prüffunktion
- [ ] Redaction: Private Keys/Passwörter können nicht hineingeraten
- [x] Modell `Protokoll` mit Akteur, Aktion, Host, Zielbenutzer, Fingerprint, Diff, Ergebnis
- [x] DB-Trigger verbietet UPDATE/DELETE
- [x] Hash-Kette (SHA-256 über Vorgänger + Inhalt), Prüffunktion
- [x] Redaction: Private Keys/Passwörter können nicht hineingeraten
## Akzeptanzkriterien
- [ ] Test: UPDATE/DELETE schlägt fehl
- [ ] Test: manipulierte Zeile wird von der Prüfung gefunden
- [x] Test: UPDATE/DELETE schlägt fehl
- [x] Test: manipulierte Zeile wird von der Prüfung gefunden
## Abhängigkeiten
#003
## Notizen / Entscheidungen
- Modell, Trigger und Hash-Kette entstanden schon mit #003 (Datenbankregeln); hier kommen Service, Schwärzen und Prüffunktion dazu.
- **Diff und Details werden geschwärzt**, bevor sie in die Datenbank gehen (`schwaerzen()` aus #006).
- **„privat“ ist kein Schwärz-Stamm mehr:** `privateVerwendungen`, `privatePfad` usw. sind Angaben, die das Protokoll gerade braucht. Geschwärzt werden nur Felder, die den Schlüssel selbst tragen (`privateKey*`, `privatVerschluesselt`, `dekVerschluesselt` …) – und jeder PEM-Block im Inhalt.
- Ansicht, CSV-Export und Syslog folgen mit #027.