Protokoll-Spezifikation
Das Veil-Protokoll
Ein Veil-Zertifikat ist eine signierte, zeitgestempelte und extern verankerte Attestierung, dass eine einzelne KI-Anfrage Identitätsdaten und KI-Verarbeitung entlang der gesamten Pipeline isoliert gehalten hat. Diese Seite beschreibt das Protokoll: was das Zertifikat enthält, wie es erzeugt wird, die fünf Konsistenzprüfungen des Witness und wie ein bereits erhaltenes Zertifikat Ende-zu-Ende gegen öffentliche Standards verifiziert wird, ohne unserem Code vertrauen zu müssen.
Zuletzt aktualisiert: April 2026
Das Veil-Protokoll deckt Isolationsnachweiseab — den pro-Anfrage-Nachweis, dass die Split-Knowledge-Grenze gehalten hat. Die Evidenzschicht deckt Entscheidungsherkunftab — Entscheidungsaufzeichnungen mit Begründung und Output. Beide Oberflächen verwenden dieselben kryptographischen Primitive (Ed25519, SHA-256-Hash-Ketten, RFC 3161, Sigstore Rekor), bezeugen aber unterschiedliche Dinge. Diese Seite ist die Protokoll-Referenz; die Evidenzschicht hat ihre eigene Seite.
Was ein Veil-Zertifikat ist
Für jede Inferenzanfrage, die durch das Gateway läuft, erzeugt das Protokoll einen signierten Umschlag, der Folgendes enthält: einen fail-closed Gateway-Claim, Best-Effort-Claims der vier nachgelagerten Pipeline-Dienste (dsa-bridge, dsa-sanitizer, dsa-ai, dsa-audit), das Witness-Urteil über fünf Konsistenzprüfungen, ein RFC-3161-Zeitstempel-Token und — auf einem asynchronen Best-Effort-Retry-Pfad — einen Verweis auf einen Sigstore-Rekor-Eintrag.
Das Zertifikat ist über drei Gateway-Endpunkte abrufbar, einen je Ansicht: /api/v1/veil/certificate/{request_id} (vollständiger Umschlag, technischer Nachweis), /api/v1/veil/certificate/{request_id}/summary (DPO-Zusammenfassung) und /api/v1/veil/certificate/{request_id}/regulatory (regulatorische Zuordnung). Es ist keine Zugangsberechtigung und keine Lizenz. Es ist eine Attestierung über eine konkrete Anfrage, unabhängig gegen externe Vertrauensanker verifizierbar.
Umfang der Attestierung
Bezeugt:
- +Das Gateway hat einen Ed25519-signierten Veil-Claim auf Request-Ebene protokolliert.
- +Der Witness hat seine fünf Konsistenzprüfungen gegen das Claim-Set ausgeführt.
- +Der Umschlag wurde seit der Witness-Signierung nicht verändert.
- +Wenn anchor_status == ANCHORED: Der Umschlag existierte nicht später als der RFC-3161-Zeitstempel, und der Umschlag-Hash erscheint im Sigstore-Rekor-Transparenzprotokoll.
Bezeugt nicht:
- −Was die KI ausgegeben hat — das ist Aufgabe der Evidenzschicht.
- −Die rechtliche Korrektheit Ihres Anwendungsfalls.
- −Die Fehlerfreiheit Ihres eigenen Anwendungscodes nach dem Gateway.
Die fünf Konsistenzprüfungen
Ein Veil-Zertifikat trägt zwei Label-Achsen, die der Witness unabhängig voneinander berechnet:
completenessFULL, wenn alle vier erwarteten nachgelagerten Dienste (dsa-bridge,dsa-sanitizer,dsa-ai,dsa-audit) einen Claim emittiert haben;PARTIAL, wenn einer fehlt. Der Gateway-Claim selbst wird durch eine separate fail-closed-Invariante am Edge garantiert — kann das Gateway ihn nicht protokollieren, wird die Anfrage abgewiesen, bevor überhaupt ein Zertifikat entsteht.overall_verdictDas kombinierte Urteil des Witness über alle Prüfungen:VERIFIED, wenn alles auf einemFULL-Claim-Set passt;PARTIAL, wenn Signaturen, Datensichtbarkeit und Isolationsprüfung alle passen, aber entweder die VollständigkeitPARTIAList oder eine zeitliche Prüfung fehlschlägt;FAILED, wenn Signaturen ungültig sind, die Datensichtbarkeit verletzt ist oder die Isolationsprüfung nichtVERIFIEDist.FAILED-Zertifikate werden persistiert und mit diesem Urteil ausgeliefert — sie werden nicht unterschlagen.
Die fünf Prüfungen, die der Witness ausführt, in der Reihenfolge des Codes:
- 1
Signaturgültigkeit
Jede Ed25519-Signatur eines Claims muss gegen den veröffentlichten öffentlichen Schlüssel des Dienstes verifizieren. Zusätzlich werden die typisierten Proto-Felder des Dienstes (
IsolationProbe,QiScore,ModelUsedusw.) mit dem signierten kanonischen Payload abgeglichen — eine Abweichung bedeutet, dass die äußeren Felder nach der Signierung manipuliert wurden. Jede Abweichung ist fatal →FAILED. - 2
Claim-Vollständigkeit
Alle vier erwarteten nachgelagerten Dienste müssen vorhanden sein, um
completeness = FULLzu erhalten; sonstPARTIAL, mit Auflistung der fehlenden Dienste. Unvollständigkeit allein degradiertoverall_verdictnur aufPARTIAL— außer der fehlende Dienst istdsa-ai, dann hat die Isolationsprüfung keinen Claim zum Konsumieren undoverall_verdictfällt aufFAILED. - 3
Zeitliche Konsistenz
Die Zeitstempel der Claims müssen innerhalb eines 120-Sekunden-Fensters liegen und in der erwarteten Pipeline-Reihenfolge eintreffen (
dsa-bridge→dsa-sanitizer→dsa-ai→dsa-audit). Fällt eine dieser Teilprüfungen, degradiertoverall_verdictaufPARTIAL. - 4
Datensichtbarkeit
Sandbox B (
dsa-ai) darf nicht behaupten, PII-Feldnamen aus der fest eingebauten Musterliste gesehen zu haben (customer_id,email,name,first_name,last_name,phone,address,ssn,dob,date_of_birth,identity_id). Eine Verletzung ist fatal →FAILED. - 5
Isolationsprüfung
Der Claim von Sandbox B trägt einen
IsolationProbe-Status. NurVERIFIEDbesteht die Prüfung;BREACHED,LOCKEDundUNKNOWNschlagen fehl →FAILED.
Der Signierprozess
Jedes Zertifikat wird durch eine vierstufige Pipeline erzeugt. Die ersten beiden Stufen laufen synchron auf dem Inferenzpfad; die externe Verankerungsstufe läuft asynchron nach der Witness-Signierung. Jede Stufe ist unabhängig verifizierbar.
- 1
Pro-Dienst-Ed25519-Claim
Jeder Pipeline-Dienst besitzt ein eigenes Ed25519-Schlüsselpaar. Beim Verarbeiten einer Anfrage emittiert er einen Claim: seine Dienst-ID, die Request-ID, eine strukturierte Zusammenfassung der gesehenen Daten und seinen Zeitstempel. Er signiert den Claim mit seinem privaten Schlüssel und erzeugt einen kanonischen Payload, der an die typisierten Proto-Felder gebunden ist. Schlüssel werden über den Secret Manager des Deployments verwaltet (HashiCorp Vault, AWS KMS oder Azure Key Vault).
- 2
Witness-Verifizierung und Umschlagsignatur
Der Witness sammelt die während der Anfrage emittierten Claims, führt die fünf Konsistenzprüfungen aus und setzt den Zertifikats-Umschlag zusammen: alle Claims, die Verdiktachsen (
completeness,overall_verdict), die Liste fehlender Dienste (falls vorhanden) und die signierende Schlüssel-ID. Der Umschlag wird mit dem Ed25519-Schlüssel des Witness signiert; diese Signatur ist der primäre Vertrauensanker des Zertifikats. - 3
Externe Verankerung (RFC-3161-TSA + Sigstore Rekor, asynchron, Best-Effort)
Nachdem der Witness den Umschlag signiert hat, übermittelt ein Attestor einen Hash des Zertifikats an zwei externe Dienste. Das Eingabe-Artefakt ist für beide Anker dieselbe Protobuf-Binary-Serialisierung des
VeilCertificate-Protos zum Zeitpunkt der Witness-Signierung — bevor der Attestor drei bestimmte Felder befüllt:attestation.timestamp,attestation.transparency_logund das oberste Feldanchor_status. Zu beachten:attestation.notaryverhält sich anders — der Assembler befüllt es zum Signierzeitpunkt mit der kanonisch-JSON-Signatur des Witness als wiederholte Metadaten, es gehört also zu den gehashten Bytes. Ein Verifier, der den Hash rekonstruiert, muss daher genau diese drei Felder (attestation.timestamp,attestation.transparency_log,anchor_status) am abgerufenen Zertifikat vorproto.Marshalzurücksetzen undattestation.notarybeibehalten. Der Attestor schickt diesen Hash an eine externe Zeitstempelstelle gemäß RFC 3161 (die ein signiertes Zeitstempel-Token liefert und damit belegt, dass der Umschlag nicht später als dasgenTimedes Tokens existierte) als auch an Sigstore Rekor alshashedrekord-Eintrag. Beide Einreichungen laufen auf demselben asynchronen Retry-Pfad; das Ergebnis wird alsanchor_statusausgewiesen:PENDING_ANCHOR, solange Retries laufen,ANCHORED, wenn auf dem persistierten Zertifikat sowohl das TSA-Token als auch ein Rekor-Inklusionsbeweis gesetzt sind, undANCHOR_FAILED, wenn das Retry-Fenster ohne vollständige Bestätigung abläuft. Ein Zertifikat mitANCHOR_FAILEDbleibt gegen seine Witness-Ed25519-Signatur gültig; nur die externen öffentlichen Anker haben nicht bestätigt. - 4
Schlüssel-Lebenszyklus
Pro-Dienst-Ed25519-Schlüssel rotieren nach einem vom Betreiber konfigurierbaren Zeitplan. Claims halten keine
key_idfest; dasVeilClaim-Proto trägt nur dieservice_iddes signierenden Dienstes und seinesignature. Ein Verifier schlägt den aktuellen öffentlichen Schlüssel des Dienstes über dieservice_idim unten beschriebenen Schlüsselmanifest nach. Der Zertifikats-Umschlag protokolliert separat diewitness_key_id— diese Kennung gilt ausschließlich für die Witness-Umschlagsignatur. Die Rotation erfolgt je Dienst unabhängig, sodass ein Schlüsselkompromiss eingegrenzt bleibt. Da Claims keine konkrete Schlüsselversion festhalten, verlässt sich ein:e Prüfer:in bei einem historischen Zertifikat darauf, dass das Manifest den zum Claim-Zeitstempel gültigen öffentlichen Schlüssel weiterhin veröffentlicht (oder dass der Betreiber historische Schlüssel nach einer Rotation beibehält). Betreiber, die Schlüssel rotieren, müssen ein Manifest ausliefern, das den historischen öffentlichen Schlüssel neben dem aktuellen veröffentlicht; andernfalls werden Zertifikate, die unter dem stillgelegten Schlüssel signiert wurden, unverifizierbar. Betreiber, die historische Schlüssel nicht vorhalten können, sollten Zertifikate unter dem alten Schlüssel vor der Rotation aus den Verifikationspfaden herausnehmen.
Der Gateway veröffentlicht das Schlüsselmanifest unterGET /.well-known/veil-keys.json— öffentlich, ohne Authentifizierung. Das Manifest liefert{ issuer, version, supported_protocol_versions, keys[], signed_at }, wobei jeder Eintrag inkeys[]die Form{ service_id, key_id, public_key, purpose, algorithm: "Ed25519" }hat. Ist der Gateway mit einem Manifest-Signaturschlüssel konfiguriert (VEIL_MANIFEST_SIGNING_KEY-Env-Var), wird das Manifest Ed25519-signiert über seine kanonische JSON-Form und trägt zusätzlichsignature,signing_key_idundsigning_algorithm. Fehlt diese Env-Var, wird das Manifest unsigniert ausgeliefert — Konsumenten, die Manifest-Integrität benötigen, sollten einen signierten Spiegel (typischerweise im DPA-Anhang) pinnen und vor Vertrauen abgleichen.
Die drei Ansichten
Jedes Zertifikat ist in drei Ansichten abrufbar. Der zugrundeliegende signierte Umschlag ist identisch; die Ansichten unterscheiden sich nur in dem, was sie rendern. Jede Ansicht ist ein deterministisches Rendering desselben kanonischen JSON — das Rendering selbst ist gegen den signierten Umschlag verifizierbar.
| Ansicht | Zielgruppe | Rendert |
|---|---|---|
| DPO-Zusammenfassung | Datenschutzbeauftragte:r | Klartext: was getrennt wurde, was die KI gesehen hat, was nicht, und die regulatorische Zuordnung. Keine kryptographischen Details. |
| Technischer Nachweis | Sicherheitsingenieur:in | Vollständiger Umschlag: jeder Claim mit Ed25519-Signatur, das TSA-Token, der Rekor-Eintragsverweis (bei ANCHORED), Schlüssel-IDs und kanonische Hashes. |
| Regulatorische Zuordnung | Prüfer:in | Artikelweise: welcher Claim DSGVO Art. 25/32 und KI-VO Art. 10/15 stützt. Nachweis-Mapping, keine gehaltene Zertifizierung. |
So verifizieren Sie ein Veil-Zertifikat unabhängig
Ein Veil-Zertifikat ist so entworfen, dass die Verifizierung eines bereits erhaltenen Zertifikats kein Vertrauen in unseren Code verlangt. Der Abruf des Zertifikats erfordert hingegen einen authentifizierten Aufruf gegen den tier-gated Endpunkt /api/v1/veil/certificate/{request_id} (x-api-key, Pro- oder Enterprise-Tarif) — das ist unser Transport. Ist das Zertifikat einmal abgerufen, lässt es sich Ende-zu-Ende gegen öffentliche Standards (Ed25519, RFC 3161, Sigstore Rekor) und gegen die Schlüssel, die wir unter /.well-known/veil-keys.json (ohne Authentifizierung) veröffentlichen, verifizieren. Zwei Wege existieren: ein bequemer Pfad über das TypeScript-SDK und ein protokollagnostischer Pfad mit Standardwerkzeugen. Ehrliche Lage: Zertifikats-Abruf und Witness-Signatur-Verifizierung funktionieren heute Ende-zu-Ende; die vollständige Mehr-Claim-Verifizierung über eine unabhängige Go-Oracle ist auf der Roadmap. Wo die aktuelle Toolchain noch nicht vollständig ist, sagen wir es.
Bequemer Pfad (TypeScript-SDK)
Das @dsaveil/theveil-SDK liefert einen Zertifikats-Abruf und einen Helfer zur Witness-Signatur-Verifizierung. Der Verifier vertraut dem Zertifikat nicht, sich selbst als Unterzeichner auszuweisen — die Aufruferin liefert den erwarteten Witness-Schlüssel out-of-band.
import { TheVeil, TheVeilCertificateError, TheVeilHttpError } from "@dsaveil/theveil";
const client = new TheVeil({ apiKey: process.env.VEIL_API_KEY });
// 1) Abruf. Ein noch nicht assembliertes Zertifikat erscheint als
// 202-HTTP-Fehler, damit der Happy-Path eng typisiert bleibt.
let cert;
try {
cert = await client.getCertificate("req_4f3a1b2c8d9e");
} catch (err) {
if (err instanceof TheVeilHttpError && err.status === 202) {
// Retry nach err.body.retry_after_seconds
}
throw err;
}
// 2) Witness-Ed25519-Signatur über die kanonischen 7 Felder prüfen.
// Wirft bei Fehlschlag TheVeilCertificateError — kein Boolean-Return.
try {
const result = await client.verifyCertificate(cert, {
witnessKeyId: "witness_v1", // erwartetes Label
witnessPublicKey: process.env.VEIL_WITNESS_PUBKEY!, // base64 oder Uint8Array (32 Byte)
});
// result.overallVerdict — VERDICT_UNSPECIFIED | VERDICT_VERIFIED | VERDICT_PARTIAL | VERDICT_FAILED
// result.anchorStatus — ANCHOR_STATUS_UNSPECIFIED | ANCHOR_STATUS_PENDING | ANCHOR_STATUS_ANCHORED | ANCHOR_STATUS_FAILED
// result.witnessAssertedIssuedAt — Date (Millisekunden-Präzision)
if (result.overallVerdict === "VERDICT_VERIFIED") {
// Alle fünf Witness-Prüfungen erfolgreich, vollständiges Claim-Set
}
} catch (err) {
if (err instanceof TheVeilCertificateError) {
// err.reason ist einer von:
// malformed | unsupported_protocol_version | witness_mismatch
// witness_signature_missing | invalid_signature
}
throw err;
}verifyCertificate führt heute vier Prüfungen durch: Protokollversion (protocol_version === 2), Witness-Identität (cert.witness_key_id stimmt mit dem vom Aufrufer erwarteten Label überein), Signatur-Vorhandensein und Ed25519-Verifikation über den kanonischen 7-Feld-Ausschnitt. Die externe RFC-3161-Zeitstempel-Verifikation und die Rekor-Inklusionsbeweis-Verifikation werden heute nicht im SDK durchgeführt — anchorStatus und overallVerdict sind im Ergebnis Durchreich-Metadaten. Die vollständige Mehr-Claim-Verifizierung (jede Pro-Dienst-Signatur, die TSA-Token-Kette, der Rekor-Inklusionsbeweis) ist der Roadmap-Schritt; sobald ausgeliefert, läuft sie ohne zusätzliche Konfiguration im SDK.
Hinweis zu den Enum-Formen. Ihr Code vergleicht gegen die oben gezeigten protojson-Full-Name-Literale: VERDICT_VERIFIED, VERDICT_PARTIAL, VERDICT_FAILED, ANCHOR_STATUS_ANCHORED usw. Genau diese Werte liefert das SDK, weil der Gateway das Zertifikat als protojson mit UseProtoNames: trueausliefert. An anderen Stellen dieser Seite schreiben wir die kürzeren Formen — VERIFIED, PARTIAL, ANCHORED—, wenn wir das Protokollverhalten erläutern, weil genau diese Strings der Go-Witness intern verwendet und kanonisch signiert. Gleiche Werte, zwei Kodierungen. In Ihrem Code vergleichen Sie immer gegen die Full-Name-Form.
Protokollagnostischer Pfad (Standardwerkzeuge)
Fünf explizite Schritte. Keine DSA-spezifischen Abhängigkeiten.
- 1
Umschlag abrufen
curldie Zertifikats-URL aus dem Feldveil.certificate_urlder Inferenz-Antwort oder direkt den Endpunkt/api/v1/veil/certificate/{request_id}(authentifiziert:x-api-key-Header, Pro- oder Enterprise-Tarif). Der Antwort-Body istprotojson-Ausgabe desVeilCertificate-Proto — JSON mit der protojson-Konvention, dass Enum-Felder Full-Name-String-Werte tragen (z. B.anchor_status.status=ANCHOR_STATUS_ANCHORED,verification.overall_verdict=VERDICT_VERIFIED) und ungesetzte Felder mit Zero-Values serialisiert werden. Für die Anzeige als JSON parsen, für Signatur- und Hash-Rekonstruktion anschließend nach dem Proto-Schema unterproto/veil/v1/veil.proto(im öffentlichen DSA-Repo) in Protobuf-Binary re-enkodieren. - 2
Witness-Umschlagsignatur prüfen
Extrahieren Sie den Umschlagrumpf und dessen Ed25519-Signatur. Beziehen Sie den öffentlichen Witness-Schlüssel aus dem Schlüsselmanifest des Gateways:
GET /.well-known/veil-keys.json(öffentlich, ohne Authentifizierung). Suchen Sie den Eintrag mitservice_id == "dsa-witness", dessenkey_idderwitness_key_iddes Zertifikats entspricht (das Manifest liefert heutewitness_v1für diese Rolle). Ist der Gateway mit einem Manifest-Signaturschlüssel konfiguriert, prüfen Sie zuerst die eigene Ed25519-Signatur des Manifests; andernfalls pinnen und vergleichen Sie einen signierten Spiegel aus dem DPA-Anhang des Betreibers, bevor Sie dem Manifest vertrauen. Der signierte Payload ist der kanonische 7-Feld-Ausschnitt des Zertifikats (certificate_id,request_id,protocol_version,claim_idsin Reihenfolge,issued_at,overall_verdictin der Witness-Short-Form (VERIFIED/PARTIAL/FAILED) undwitness_key_id) — die exakte Kanonisierung liefert der Witness-Assembler. Verifizieren mit einer beliebigen Ed25519-Bibliothek (RFC 8032) —openssl pkeyutl -verify, ein PyNaCl-Aufruf oder Äquivalent. - 3
Pro-Dienst-Claim-Signaturen prüfen
Der Umschlag enthält einen Claim je Pipeline-Dienst, der einen emittiert hat. Wiederholen Sie für jeden Claim Schritt 2 gegen den veröffentlichten Schlüssel des Dienstes — nachgeschlagen über die
service_iddes Claims im selben Manifest unter/.well-known/veil-keys.json(heute ein aktuellerkey_idjeservice_id). DasVeilClaim-Proto trägt keinkey_id-Feld: Claims exponieren nurservice_idundsignature, die Rotations-Logik lebt daher im Manifest (siehe den Schlüssel-Lebenszyklus-Unterabschnitt in Abschnitt 3). Fehlende Best-Effort-Claims unterdsa-bridge/dsa-sanitizer/dsa-ai/dsa-auditsind beiPARTIAL-Zertifikaten normal; ein fehlender Gateway-Claim ist nicht möglich (die Anfrage wäre abgewiesen worden). - 4
RFC-3161-Zeitstempel-Token prüfen (nur bei anchor_status == ANCHORED)
Bei
anchor_status == ANCHOREDträgt das Feldattestation.timestampdas TSA-Token (Rohbytes unterattestation.timestamp.timestamp_token). Verifizieren Sie die Signatur des Tokens gegen die veröffentlichte CA-Kette der TSA und prüfen Sie, dassmessageImprint.hashedMessagedes Tokens gleichSHA-256(proto.Marshal(cert))ist, wobeicertdas abgerufeneVeilCertificateist, bei dem drei Felder auf ihren ungesetzten Zustand zurückgesetzt wurden:attestation.timestamp,attestation.transparency_logund das oberste Feldanchor_status.attestation.notarybleibt erhalten — es wurde zum Signierzeitpunkt befüllt und gehört zu den gehashten Bytes (ein Leeren erzeugt eine Hash-Abweichung bei einem legitimen Zertifikat). Der Wert vonmessageImprint.hashAlgorithmmussid-sha256sein (OID2.16.840.1.101.3.4.2.1). Werkzeuge:openssl ts -verify, dessen-data-Argument auf die rekonstruierten Bytes zeigt, oder eine beliebige TSP-Bibliothek. BeiPENDING_ANCHORoderANCHOR_FAILEDentfällt dieser Schritt — das Feldattestation.timestampkann fehlen oder unvollständig sein; das Zertifikat bleibt gegen die Witness-Ed25519-Signatur gültig, aber die externe Zeitstempel-Verankerung hat nicht bestätigt. - 5
Rekor-Eintrag prüfen (nur bei anchor_status == ANCHORED)
Bei
anchor_status == ANCHOREDenthält das Feldattestation.transparency_logden Rekor-Eintrag:log_index(int64),inclusion_proof(Bytes),signed_entry_timestamp(Bytes) undlog_url(der Rekor-Endpunkt, der den Beweis ausgestellt hat). Holen Sie den Eintrag über die Rekor-REST-API oderrekor-cli. Der Eintrag ist einhashedrekordmitdata.hash.algorithm == "sha512"— bestätigen Sie, dassdata.hash.valuegleichhex(SHA-512(proto.Marshal(cert)))ist, wobeicertdas abgerufeneVeilCertificateist, bei dem drei Felder auf ihren ungesetzten Zustand zurückgesetzt wurden:attestation.timestamp,attestation.transparency_logund das oberste Feldanchor_status.attestation.notarybleibt erhalten — es wurde zum Signierzeitpunkt befüllt und gehört zu den gehashten Bytes (ein Leeren erzeugt eine Hash-Abweichung bei einem legitimen Zertifikat). Beachten Sie: Die Signatur des Eintrags ist Ed25519ph(Pre-Hash; RFC 8032 §5.1), also nichtdieselbe Konstruktion wie die Witness-Umschlagsignatur — Rekor verifiziert sie intern gegen den öffentlichen Schlüssel, der im Eintragsfeldspec.signature.publicKey.contenteingebettet ist (PEM-umhüllter X.509-SPKI des öffentlichen Witness-Schlüssels). BeiPENDING_ANCHORoderANCHOR_FAILEDentfällt dieser Schritt — das Transparenz-Log-Feld kann fehlen oder unvollständig sein.# log_index ist ein Feld von attestation.transparency_log im abgerufenen Cert. rekor-cli get --log-index <attestation.transparency_log.log_index>
Die fünf Schritte oben sind eine vollständige manuelle Verifizierung gegen das Protokoll. Sie erfordern weder Vertrauen in unsere Infrastruktur noch in unseren Code — jedes Artefakt wird gegen öffentliche Standards (Ed25519, RFC 3161, Sigstore Rekor) oder gegen Schlüssel geprüft, die wir unter /.well-known/veil-keys.json (oder gepinnten signierten Spiegeln davon) veröffentlichen.
Regulatorische Zuordnung
Das Veil-Protokoll ist ein Mechanismus, mit dem ein Verantwortlicher bestimmte Artikel der DSGVO und der KI-VO erfüllen kann. Es handelt sich um Nachweis- und Architekturzuordnungen — keine gehaltene Zertifizierung unter einer der beiden Verordnungen.
| Regulierung | Anforderung | Was das Veil-Zertifikat beiträgt |
|---|---|---|
| DSGVO Art. 25 | Datenschutz durch Technikgestaltung und datenschutzfreundliche Voreinstellungen | Pro-Anfrage-Nachweis, dass Pseudonymisierung der Standard-Verarbeitungsmodus war und Identitätsfelder nicht in die KI-Umgebung gelangten. |
| DSGVO Art. 32 | Sicherheit der Verarbeitung | Kryptographische Attestierung, signiert auf der Infrastrukturebene. Die Signaturkette ist manipulationssicher; externe TSA-Zeitstempel und Rekor-Verankerung machen Manipulationen über Custody-Grenzen hinweg erkennbar. Die unabhängige Verifizierung eines bereits erhaltenen Zertifikats erfordert keine Mitwirkung des Verantwortlichen (die Verifizierung nutzt nur öffentliche Standards und das nicht-authentifizierte Manifest unter /.well-known/veil-keys.json). Der Zertifikats-Abruf erfordert den eigenen authentifizierten Aufruf des Kunden gegen den tier-gated Gateway-Endpunkt. |
| KI-VO Art. 10 | Daten-Governance für Hochrisiko-KI-Systeme | Der Isolationsprüfungs-Claim belegt, dass das KI-System für die konkrete Anfrage keine Identitätsdaten erhalten hat. Das Zertifikat ist ein pro-Anfrage prüfbares Governance-Artefakt. |
| KI-VO Art. 15 | Genauigkeit, Robustheit und Cybersicherheit | Das Zertifikat ist ein extern verankertes Robustheitssignal: jede Veränderung des Umschlags nach der Signierung ist erkennbar. Die unabhängige Verifizierung eines bereits erhaltenen Zertifikats nutzt nur öffentliche Standards und das nicht-authentifizierte Manifest unter /.well-known/veil-keys.json; der Zertifikats-Abruf erfordert den eigenen authentifizierten Aufruf des Kunden gegen den tier-gated Gateway-Endpunkt. |
Was das Protokoll nicht leistet
Das Veil-Protokoll beweist, dass die Isolation für eine bestimmte Anfrage stattgefunden hat. Es beweist nicht — für sich allein —, dass die Ausgabe der KI korrekt war, dass Ihre Anwendung die Ausgabe sicher interpretiert hat oder dass Ihre eigenen Systeme hinter dem Gateway gleichermaßen isoliert sind. Infrastruktur-Durchsetzung (Kubernetes NetworkPolicies, Docker-Netzwerksegmentierung) ist das, was die Isolation erzwingt; das Protokoll ist das, was sie beweist. Keines ersetzt das andere.
FAQ
- Was passiert, wenn anchor_status dauerhaft auf PENDING_ANCHOR bleibt?
PENDING_ANCHORbedeutet, dass die asynchrone Retry-Schleife noch nicht beide externen Attestierungen (den RFC-3161-TSA-Zeitstempel und den Sigstore-Rekor-Inklusionsbeweis) auf dem persistierten Zertifikat gesetzt hat. Die Witness-Ed25519-Signatur über den Umschlag wird synchron erzeugt und ist bereits gültig; beide externen Anker sind der asynchrone Teil und genau das, woraufPENDING_ANCHORwartet. Wechselt der Status nicht innerhalb des Retry-Fensters aufANCHORED, wird er aufANCHOR_FAILEDgesetzt; Prüfer:innen, die für ein bestimmtes Zertifikat einen Transparenz-Log-Anker benötigen, können den Abruf wiederholen oder einen erneuten Lauf anfordern. Ein länger andauerndesPENDING_ANCHORjenseits des konfigurierten Fensters ist ein operationelles Signal, dass der Attestor-Dienst die externen TSA- oder Rekor-Endpunkte nicht erreicht — prüfen Sie die Attestor-Logs und Retry-Metriken des Deployments.- Wie verifiziere ich ein Zertifikat, nachdem mein API-Schlüssel rotiert oder widerrufen wurde?
- Ihr API-Schlüssel hat nichts mit der Zertifikatsverifizierung zu tun. Zertifikate werden mit dem Ed25519-Schlüssel des Witness-Dienstes signiert und durch die RFC-3161-TSA sowie Sigstore Rekor extern verankert. Der Umschlag protokolliert die
witness_key_idund wird mit dem Ed25519-Schlüssel des Witness signiert. Pro-Dienst-Claims tragen nurservice_idundsignature— es gibt keinkey_id-Feld auf Claim-Ebene. Der öffentliche Schlüssel, der einen Claim verifiziert, wird über dieservice_idim Manifest unter/.well-known/veil-keys.jsonnachgeschlagen. Betreiber, die Dienstschlüssel rotieren, müssen die stillgelegten öffentlichen Schlüssel neben den aktuellen im Manifest veröffentlichen — sonst werden vor der Rotation signierte Claims unverifizierbar. Der Widerruf des API-Schlüssels verhindert neue Inferenzanfragen unter diesem API-Schlüssel, hat aber keinen Einfluss auf bereits erzeugte Zertifikate. - Kann ich ein altes Zertifikat heute erneut vorlegen, um etwas zu beweisen?
- Ein Veil-Zertifikat ist an eine konkrete
request_id, Claim-Kette und TSA-Zeitstempelung gebunden. Seine Ed25519-Signaturen decken genau diesen Umschlag ab — dasselbe Zertifikat als Nachweis einer anderen Anfrage oder einer aktuellen Entscheidung vorzulegen, scheitert bereits an der Bindung an dierequest_id. Was das Zertifikat dauerhaft belegt, ist, dass die ursprüngliche Anfrage zur im TSA-Token festgehaltenen Zeit durch die isolierte Pipeline gelaufen ist. Replay auf die ursprüngliche Anfrage ist ein Feature; Replay auf irgendetwas anderes ist keine Bedrohung, die das Protokoll abzuwehren versucht, weil die Bindung sie mechanisch unmöglich macht.