wcaf verify-evidence
Vollständige externe Verifikation eines WINDI Evidence-Pakets: PDF-Signatur, WCAF-Kette, Merkle-Log, STH-Signatur und Inklusionsbeweis.
Zweck
wcaf verify-evidence führt eine vollständige externe Verifikation eines WINDI Evidence-Pakets durch. Entwickelt für Auditoren, Banken, Compliance-Teams, Streitbeilegung, Gerichte und Regulierungsbehörden.
Befehl
Grundlegende Verwendung
wcaf verify-evidence bundle.json report.pdf report.sig audit-key.pem
Benutzerdefinierte Merkle-Log-URL
wcaf verify-evidence bundle.json report.pdf report.sig audit-key.pem \ --merkle-url=http://localhost:4051
Eingaben
| Datei | Beschreibung |
|---|---|
bundle.json | WCAF-Bundle mit document_id, timeline[], combined_root_hash |
report.pdf | Menschenlesbarer Audit-Bericht, generiert von windi-audit-report |
report.sig | Base64-Signatur der PDF-Bytes |
audit-key.pem | Öffentlicher Schlüssel zur Verifikation der PDF-Signatur (RSA PEM) |
Ausgabe
Das Tool gibt einen schrittweisen Verifikationsbericht aus und endet mit:
Exit Codes
| Code | Bedeutung |
|---|---|
| 0 | Verifikation OK |
| 1 | CLI-Nutzungsfehler (fehlende Argumente, ungültige Flags) |
| 2 | PDF-Signatur ungültig |
| 3 | Bundle-Chain-Integrität fehlgeschlagen |
| 4 | Merkle-Log-Suche fehlgeschlagen (Hash nicht gefunden / Netzwerkfehler) |
| 5 | STH-Signatur ungültig |
| 6 | Inklusionsbeweis ungültig |
| 7 | Konsistenzbeweis / Pinning-Fehler (Phase 3B.2+) |
Exit-Codes sind eine stabile API für Automatisierungspipelines.
Verifikationsschritte (Normativ)
PDF Signature
Algorithm: RSA-SHA256
Input: Rohe PDF-Bytes + Signatur (Base64) + Öffentlicher Schlüssel (PEM)
Output: valid / invalid
Fehlschlag bedeutet: Bericht ist nicht authentisch oder wurde nach der Signierung modifiziert.
Bundle Chain Integrity
WCAF-Kette von prev_hash → event_hash über Timeline-Events verifizieren. Sicherstellen, dass keine Manipulation oder fehlende Events vorliegen.
Fehlschlag bedeutet: Bundle wurde modifiziert, gekürzt oder gefälscht.
Merkle Log Lookup
combined_root_hash aus Bundle bestimmen und abfragen:
GET /lookup?combined_root_hash=<hash> → Must return found=true and leaf_index
Fehlschlag bedeutet: Anker wurde nicht öffentlich veröffentlicht, falscher Hash, oder Log-Endpoint nicht erreichbar.
STH Signature Verification
Aktuellen STH und öffentlichen Schlüssel des Logs abrufen. Ed25519-Signatur über kanonisches JSON {tree_size, timestamp, root_hash} verifizieren.
GET /sth GET /pubkey
Fehlschlag bedeutet: Log-Betreiber-Signatur ungültig oder falscher Schlüssel / key_id-Nichtübereinstimmung.
Inclusion Proof Verification
Inklusionsbeweis abrufen, Leaf-Hash rekonstruieren und mit sth.root_hash vergleichen:
leaf_hash = SHA256(0x00 || canonical_json(leaf_payload)) → Combine with audit_path → Reconstruct root → Compare with sth.root_hash
Fehlschlag bedeutet: Anker ist nicht tatsächlich im festgeschriebenen Baum enthalten, oder Beweis/Log-Manipulation.
Evidence Pack Format
bundle.json
report.pdf
report.sig
merkle-proof.json
pubkeys/
audit_pub.pem
merkle_log_pub.pem
merkle-proof.json
{
"combined_root_hash": "<hex>",
"leaf_index": 42,
"leaf_payload": { ... },
"sth": {
"tree_size": 12345,
"timestamp": "ISO-8601",
"root_hash": "<hex>",
"signature_alg": "Ed25519",
"signature": "<base64>",
"key_id": "hub-log-2026"
},
"inclusion_proof": {
"leaf_index": 42,
"tree_size": 12345,
"audit_path": ["<hex>", "..."]
}
}
Wenn vorhanden, kann die CLI Netzwerkaufrufe überspringen und offline verifizieren.
Flags
| Flag | Beschreibung |
|---|---|
--merkle-url | Basis-URL des Merkle-Log-Dienstes |
--strict | Aktiviert Pinning + Konsistenzbeweis-Verifikation (Phase 3B.2+) |
--pin-file | Speicherort für STH-Cache |
--offline | Erfordert merkle-proof.json, überspringt Netzwerk |
Sicherheitshinweise
- Immer PDF-Signatur verifizieren, bevor Textaussagen im Bericht vertraut werden.
- Immer WCAF-Kette verifizieren, bevor
combined_root_hashvertraut wird. - In Produktion HTTPS zum Merkle-Log-Endpoint verwenden.
- Strikten Modus (Pinning + Konsistenz) verwenden, um Split-View/Rollback-Angriffe zu mindern.
Compliance Statement
Wenn alle Schritte bestanden werden, kann der Verifizierer feststellen: Der Audit-Bericht ist authentisch (signiert), die WCAF-Beweiskette ist intakt, und der Evidenzanker ist öffentlich in einem CT-Stil Merkle Transparency Log durch einen signierten Tree Head festgeschrieben. Daher existierte der Dokumentenbeweis zu oder vor dem Transparency-Log-Zeitstempel und wurde seit der Verankerung nicht modifiziert.