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>
28 lines
1.3 KiB
Markdown
28 lines
1.3 KiB
Markdown
# #005 Revisionssicheres Protokoll
|
||
**Status:** erledigt
|
||
**Meilenstein:** v0.1.0
|
||
**Labels:** sicherheit
|
||
**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
|
||
- [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
|
||
- [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.
|