Prüfmodell

Prüfen, nicht bewerten. Jeder Schritt hat eine feste Frage, jeder Status eine feste Bedeutung, jedes Nicht-Bestehen eine Begründung.

Kurz gesagt

Zehn feste Prüfschritte mit je einer Frage. Jeder liefert einen von sechs Status, jedes Nicht-Bestehen trägt einen Begründungscode.

Die zehn Prüfschritte

#PrüfschrittPrüffrageBereich
1Format und Schema
parse_schema
Kernschritt
Ist das Format erkannt, sind die Pflichtfelder vorhanden, ist die Version unterstützt?Echtheit
2Kryptografische Integrität
cryptographic_integrity
Kernschritt
Sind Signaturen, Disclosures, Hash-Ketten und Manifest unverändert?Echtheit
3Aussteller
issuer_resolution
Ist der Schlüssel an den Aussteller gebunden – über eine DID oder weil die prüfende Stelle ihm vertraut?Echtheit
4Agent und Auftraggeber
subject_agent_binding
Kernschritt
Nennen alle Teile denselben Agenten, ist der Auftraggeber benannt, hält der Agent den gebundenen Schlüssel?Identität und Auftrag
5Gültigkeit des Mandats
mandate_validity
Kernschritt
War das Mandat zum Zeitpunkt der Handlung gültig?Befugnis
6Umfang der Handlung
intent_scope
Liegt die Handlung innerhalb von Handlungstyp, Betragsgrenze, Währung und Gegenpartei des Mandats?Befugnis
7Delegationskette
delegation_provenance
Ist jede Stufe signiert, lückenlos verbunden und nicht breiter als die vorherige?Identität und Auftrag
8Widerruf
revocation
Kernschritt
Ist das Mandat laut Statusliste weder widerrufen noch suspendiert?Befugnis
9Ausführungsbeleg
execution_binding
Verweist der Beleg auf genau diesen Entscheid und dieses Mandat?Beweis
10Zeitstempel
timestamp_assurance
Ist der RFC-3161-Zeitstempel gültig, an den Inhalt gebunden und auf einen Anker der prüfenden Stelle rückführbar?Beweis

Die fünf Kernschritte bilden die Kernaussage. Ohne sie ist kein Gesamturteil «gültig» möglich. Der Widerruf gehört dazu, weil die Frage lautet, ob eine Handlung zulässig war – nicht nur, ob das Mandat einmal ausgestellt wurde.

Sechs Status

StatusBezeichnungBedeutung
VALIDbelegtGeprüft und belegt.
INVALIDwiderlegtGeprüft und widerlegt.
NOT_CHECKEDnicht geprüftNicht ausgeführt, weil eine Voraussetzung fehlt.
NOT_PRESENTnicht vorhandenDer Nachweis enthält das Element nicht.
UNKNOWNunbestimmtAusgeführt, aber ohne belastbares Ergebnis.
RECOGNIZEDerkanntFormat erkannt, bewusst nicht vollständig geprüft.

Es gibt keinen impliziten Erfolg. Ein nicht ausgeführter Schritt ist nicht bestanden, und jeder Status ausser «belegt» trägt einen Begründungscode.

Drei Urteile

UrteilBezeichnungBedingung
INVALIDUngültigMindestens ein Prüfschritt ist widerlegt.
INDETERMINATEUnbestimmtNichts ist widerlegt, aber die Kernaussage ist nicht vollständig belegt oder ein Schritt ist unbestimmt.
VALIDGültigAlle Kernschritte sind belegt und kein Schritt ist unbestimmt.

Der Unterschied zwischen «ungültig» und «unbestimmt» ist die wichtigste Aussage des Modells: Widerlegt und nicht überprüfbar sind verschiedene Dinge und fallen nie zusammen.

Zeitbasis

Enthält der Nachweis einen Entscheid mit Ausstellungszeitpunkt, wird die Gültigkeit des Mandats zu diesem Zeitpunkt beurteilt – also zum Moment der Handlung. Ohne Entscheid gilt der Prüfzeitpunkt. Der Bericht nennt immer, welche Zeitbasis verwendet wurde. Eine Toleranz von 60 Sekunden fängt Uhrenabweichungen ab, nicht mehr.

Statuslisten spiegeln den Stand zum Zeitpunkt ihrer Ausstellung. Ein Widerruf nach der Handlung macht eine damals zulässige Handlung nicht nachträglich unzulässig; der Bericht weist den Ausstellungszeitpunkt der Liste deshalb mit aus.

Schlüsselherkunft

HerkunftBedeutungBelegt den Aussteller
didaus der Aussteller-DIDja
trustedvon der prüfenden Stelleja
embeddedim Token selbst (selbst behauptet)nein
bundleddem Paket beigelegt (selbst behauptet)nein

Nur «aus der Aussteller-DID» und «von der prüfenden Stelle» belegen den Aussteller. Die beiden anderen Herkünfte belegen Integrität, aber nicht, wer ausgestellt hat.

Begründungscodes

Jeder Code ist stabil und in beiden Sprachen gleich definiert. Er steht im maschinenlesbaren Bericht und wird in der Oberfläche übersetzt.

CodeBedeutung
format_unknownDas Format ist nicht bekannt.
format_recognized_not_supportedDas Format ist erkannt, wird in dieser Version aber nicht geprüft.
not_evidence_key_materialDas ist Schlüsselmaterial, kein Nachweis. Fügen Sie es unter «Vertrauen der Prüfstelle» ein.
malformedDie Eingabe ist strukturell fehlerhaft.
required_claim_missingEin Pflichtfeld fehlt.
format_not_supportedNicht geprüft, weil das Format nicht unterstützt ist.
signature_invalidDie Signatur passt nicht zum Inhalt.
no_keyKein Schlüssel verfügbar. Ergänzen Sie den Schlüssel des Ausstellers unter «Vertrauen der Prüfstelle».
unsupported_algDer Signaturalgorithmus ist in dieser Umgebung nicht verfügbar. Aktualisieren Sie den Browser (Chrome oder Edge ab 137, Firefox ab 129, Safari ab 17).
disclosure_digest_mismatchEine Disclosure passt nicht zu ihrem Hash.
disclosure_unreferencedEine Disclosure ist im signierten Inhalt nicht referenziert.
disclosure_duplicateEine Disclosure kommt doppelt vor.
kb_jwt_invalidDas Key-Binding-JWT ist ungültig: Der Vorlegende hält den gebundenen Schlüssel nicht nachweislich.
chain_hash_mismatchEin Beleg wurde nach dem Verketten verändert.
chain_link_brokenDie Beleg-Kette hat eine Lücke oder eine falsche Reihenfolge.
binding_mismatchEine Schicht ist nicht an die vorherige gebunden: Hash-Bindung stimmt nicht.
manifest_mismatchDer Paketinhalt stimmt nicht mit dem Manifest überein.
no_crypto_materialDer Nachweis enthält kein kryptografisches Material.
tsa_signature_invalidDie Signatur des Zeitstempels ist ungültig.
issuer_key_not_trustedDer Schlüssel stammt aus dem Nachweis selbst und ist nicht an den Aussteller gebunden.
kid_issuer_mismatchDie Schlüsselkennung zeigt auf eine andere Identität als der Aussteller.
no_signed_artifactKein signiertes Artefakt vorhanden.
agent_mismatchDie Teile des Nachweises nennen verschiedene Agenten.
principal_missingDer Auftraggeber ist nicht benannt.
agent_missingDer Agent ist nicht benannt.
no_credentialKein Mandat und kein Agent Passport vorhanden.
credential_is_not_a_mandateDas vorgelegte Credential ist kein Mandat.
expiredAbgelaufen zum Prüfzeitpunkt.
not_yet_validZum Prüfzeitpunkt noch nicht gültig.
mandate_not_includedDas Mandat liegt nicht bei.
action_not_in_scopeDer Handlungstyp liegt ausserhalb des Mandats.
amount_exceeds_limitDer Betrag überschreitet die Grenze des Mandats.
currency_mismatchDie Währung weicht vom Mandat ab.
counterparty_not_allowedDie Gegenpartei ist im Mandat nicht zugelassen.
mandate_without_scopeDas Mandat hat keinen Umfang. Eine unbegrenzte Vollmacht ist nicht prüfbar.
constraint_not_supportedEine Bedingung des Mandats ist ohne weitere Angaben nicht maschinell prüfbar, etwa ohne Schlüssel des Händlers.
no_actionKeine Handlung im Nachweis.
no_delegationKeine Delegationskette: Der Auftraggeber hat direkt mandatiert.
delegation_brokenDie Delegationskette ist unterbrochen oder abgelaufen.
delegation_scope_widenedEine Delegationsstufe erweitert den Umfang.
delegation_key_missingFür eine Delegationsstufe fehlt ein gebundener Schlüssel.
revokedDas Mandat ist widerrufen.
suspendedDas Mandat ist suspendiert.
status_value_unknownDie Statusliste meldet einen unbekannten Wert.
status_list_not_providedKeine passende Statusliste vorgelegt.
status_list_unverifiedDie Statusliste ist nicht nachweislich vom Aussteller.
status_list_invalidDie Statusliste ist fehlerhaft.
no_status_referenceDas Mandat nennt keinen Widerrufsmechanismus.
receipt_decision_mismatchDer Beleg verweist auf einen anderen Entscheid.
receipt_mandate_mismatchDer Beleg verweist auf ein anderes Mandat.
no_receiptKein Ausführungsbeleg vorhanden.
no_decision_referenceDer Beleg nennt keinen Entscheid.
tsa_malformedDer Zeitstempel ist nicht lesbar.
tsa_imprint_mismatchDer Zeitstempel gilt für einen anderen Inhalt.
tsa_anchor_not_providedKein Zeitstempel-Anker angegeben. Ergänzen Sie ihn unter «Vertrauen der Prüfstelle».
tsa_not_trustedDer Zeitstempel führt zu keinem der angegebenen Anker.
tsa_target_unknownUnklar, welchen Inhalt der Zeitstempel belegt.
no_timestampKein Zeitstempel vorhanden.
prerequisite_failedNicht geprüft, weil eine vorherige Prüfung gescheitert ist.

Determinismus

Der Bericht kya-report/1 enthält Eingabe-Hash, Options-Digest, Prüfzeitpunkt, Version des Prüfkerns und Policy-Version. Sein reportDigest ist der SHA-256 über das kanonische JSON des Berichts. Gleiche Eingabe, gleiche Optionen und gleicher Prüfzeitpunkt ergeben denselben Digest – im Browser, auf der Kommandozeile und in CI.