Verifier System
Offline verifier en bundles
Een verifier bundle is een portable evidence pack. Het bevat de proof objects die nodig zijn om een stream range zonder toegang tot de Attesto backend te verifiëren, plus een manifest dat de meegeleverde bestanden bindt.
Offline verifier
De offline verifier controleert lokaal. Online anchor re-checks zijn optioneel en expliciet, zodat een reviewer de kern van de bundle nog steeds kan verifiëren wanneer netwerktoegang beperkt is.
attesto receipts verify \
--file ./receipt.json \
--public-key-hex "$ATTESTO_RECEIPT_SIGNER_PUBLIC_KEY_HEX"
attesto bundles offline-verify --file ./attesto-bundle.json
attesto verify file --file ./receipt.attesto.json \
--public-key-hex "$ATTESTO_RECEIPT_SIGNER_PUBLIC_KEY_HEX"
attesto verify truth-package --file ./truth-package.zip
Window-, checkpoint-, anchor-, IVC- en volledige bundle-verificatie kan ook via de online verifier API vanuit dezelfde CLI draaien:
attesto windows verify --file ./window.json
attesto checkpoints verify --file ./checkpoint.json
attesto anchors verify --file ./anchor.json
attesto ivc epochs verify --file ./ivc-epoch.json
attesto bundles verify --file ./attesto-bundle.json
Portable receipts
Een portable receipt is een self-contained *.attesto.json
export rond één signed receipt. Een ontvanger kan de receipt
verifiëren met de Python SDK, TypeScript SDK, Go SDK, CLI of browser
verifier zonder de Attesto backend aan te roepen. Een gepinde public
key is het betrouwbare verificatiepad; een embedded key is alleen een
transport hint en mag het trust policy van de verifier niet vervangen.
Portable receipts zijn nuttig voor email attachments, support tickets, data-room uploads en regulator workflows waar nog geen volledige bundle nodig is. Ze falen nog steeds gesloten bij gewijzigde payload commitments, gewijzigde event hashes, verkeerde signatures of mismatched stream linkage.
Browser WASM verifier
De verifier-only WebAssembly build exposeert receipt, inclusion, checkpoint-root en completeness verification aan een browser page. Er is geen client creation flow, geen API key handling en geen background network requirement. De JavaScript shell geeft JSON door aan de WASM verifier en krijgt een JSON report terug, zodat browser verification een dunne lokale wrapper blijft rond dezelfde Go verifier semantics die de CLI gebruikt.
Verify portal
De browser Verify portal op /verify.html is bedoeld
voor snelle receipt verification door een externe ontvanger, auditor
of supportteam. Drop een receipt JSON of portable receipt file in de
pagina, plak de gepinde witness public key en verifieer lokaal. De
pagina laadt de WASM verifier uit
/assets/attesto-verify.wasm, maar uploadt de receipt,
payload, public key of verifier result niet naar Attesto.
Voor gereguleerde workflows pin je de witness public key out-of-band
en vergelijk je de WASM asset hash met het release manifest voordat
je op een browserresultaat vertrouwt. Gebruik
POST /v1/public/verify voor receipt verification in een
serverworkflow, en POST /v2/verify voor Proofstream object
en bundle verification. Browser verification, CLI verification, SDK
verification en API verification moeten dezelfde canonical JSON- en
signature-semantiek volgen.
Bundle structure
{
"manifest": {
"bundle_id": "bundle_...",
"protocol": "ATTESTO-PROOFSTREAM-001",
"created_at": "2026-06-07T12:00:00Z",
"stream_id": "str_...",
"from_seq_no": 1,
"to_seq_no": 250,
"artifact_hashes": {
"receipts.json": "sha256-hex",
"windows.json": "sha256-hex",
"checkpoints.json": "sha256-hex",
"witnesses.json": "sha256-hex",
"anchors.json": "sha256-hex"
}
}
}
Truth packages
Tenant export ZIPs zijn ook lifecycle evidence. Wanneer Attesto een
package bouwt, schrijft het attesto.truth-package.manifest.json
in de ZIP, hasht de gefinaliseerde ZIP en registreert een
truth_package.generated Proofstream event. Elke
betekenisvolle dashboard- of auditor-toegang registreert een
truth_package.accessed event met unieke access id,
timestamp, package hash, manifest hash, actor type, access method en
gehashte network metadata. Wanneer een user, auditor, SDK of CLI een
succesvolle cryptographic verifier report terugstuurt naar Attesto,
valideert de backend het report tegen de opgeslagen package- en
manifest-hashes en registreert een truth_package.verified
event.
Dit bewijst package integrity en lifecycle provenance. Het bewijst
juridische compliance niet zelfstandig en bewijst niet dat een
ontvanger de inhoud heeft gelezen of geaccepteerd. Download/access
bewijst dat het package is geserveerd; truth_package.verified
bewijst dat een verifier de ZIP- en artifact-hashes daadwerkelijk
opnieuw heeft berekend.
De finale ZIP-hash wordt bewust na ZIP-finalisatie en buiten de ZIP zelf vastgelegd. De receipt over de finale ZIP-hash in dezelfde ZIP opnemen zou een circulaire self-reference maken: het aanpassen van de ZIP om de receipt toe te voegen verandert de hash die de receipt ondertekent.
attesto verify truth-package --file ./truth-package.zip
Het commando leest de ZIP, berekent de volledige package SHA-256
opnieuw, vereist attesto.truth-package.manifest.json,
verifieert elke in het manifest genoemde artifact hash en verwerpt
verboden archive paths zoals absolute paths, parent traversal, macOS
metadata, workstation paths en lokale filesystem references. Een
gewijzigde events.csv, proofs.json of
manifest.json moet verificatie laten falen voordat het
package als betrouwbaar bewijs kan worden behandeld.
curl -X POST https://dashboard.attesto.eu/v1/exports/exp_.../truth-package/verify \
-H "Authorization: Bearer $ATTESTO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"verifierKind": "attesto-cli",
"verifierVersion": "0.4.0",
"accessId": "tpa_...",
"verificationReport": {
"ok": true,
"packageSha256": "hex...",
"manifestSha256": "hex...",
"verifiedArtifacts": 4,
"problems": []
}
}'
Verifier matrix
| Mutatie | Verwacht resultaat |
|---|---|
| Gewijzigde payload | Reject: payload hash matcht de event commitment niet meer. |
| Gewijzigd sequence number | Reject: stream ordering en head hash breken. |
| Verwijderd event | Reject: window inclusion of stream range is incompleet. |
| Ingevoegd event | Reject: sequence, previous hash of window commitment verandert. |
| Stale checkpoint | Reject: checkpoint matcht de verwachte stream progression niet. |
| Verkeerde witness signature | Reject: statement signature of key epoch is ongeldig. |
| Verkeerde anchor | Reject: anchor commitment bindt de included epoch niet. |
| Conflicterende checkpoint heads | Reject en rapporteer fork evidence. |
Public verification API
Gebruik POST /v2/verify wanneer een online service
dezelfde verifier semantics als de CLI nodig heeft.
curl -X POST https://verify.attesto.eu/v2/verify \
-H "Content-Type: application/json" \
--data-binary @attesto-bundle.json
