Mental model: A Decision Receipt is a self-describing artefact. The verifier re-derives the receipt’s cryptographic facts from the receipt bytes alone and tells you whether they hold. It runs entirely in your browser — the receipt you paste never leaves your machine. A green verdict means “these bytes are mathematically consistent and were signed by the key they claim.” It does not mean “the underlying decision was correct.” Those are different questions, and this page is careful to keep them apart.
When you’d use this
You have been handed a Decision Receipt — a JSON file, or a link — and you want to answer one question: has anyone altered it since MeshQu issued it, and did MeshQu actually issue it? The web verifier answers that without any cooperation from MeshQu at the moment you check. That independence is the entire point for a regulated buyer: the proof survives even if MeshQu’s API is down, or MeshQu no longer exists. For the deeper structure behind these checks, see Verification Bundle, Receipt Reference, and the Trust Model. This guide is the hands-on walkthrough; those pages are the reference depth.The verifier
Open verify.meshqu.com. The page has one job: take a receipt and report what it can prove about it.- Paste or upload the receipt JSON. The verifier accepts either the full record from
GET /v1/decisions/{id}(shaped{ "context": {...}, "result": {...} }) or a flat receipt that carries anintegrity_hash. - Read the verdict. The verifier reports three independent checks — integrity, signature, and (when the receipt is anchored) transparency.
Everything runs locally in your browser using the Web Crypto API. The receipt is never uploaded to MeshQu. The only network call the verifier may make is an optional lookup to the public Sigstore Rekor log — and only when the receipt carries a transparency anchor. Your receipt contents are not sent to Rekor; only an entry identifier is queried.
What the verdict means — check by check
1. Integrity
The verifier recomputes the receipt’s SHA-256integrity_hash from canonical JSON of the decision, its violations, the context fields, the policy snapshot identity, and the timestamp. It then compares that to the hash stored on the receipt.
- Valid — the recomputed hash equals the stored hash. Nothing inside the hashed payload has been altered.
- Tampered — the hashes differ. Some hashed field was changed after issuance.
2. Signature
Every signed receipt carries an Ed25519 signature and asignature_kid (key identifier, e.g. msk_v1). The verifier looks up the public key for that kid in its bundled, out-of-band trust roots and checks the signature.
- Valid — the signature verifies against a trusted public key. MeshQu (the holder of the corresponding private key) issued this exact receipt.
- Invalid — signature material is present but does not verify. Treat as tampered.
- Unknown key — the receipt names a
kidthe verifier does not have a trusted key for. It cannot vouch for the signature. - Not signed — no signature is present.
3. Transparency anchor (when present)
If the receipt was anchored, it carries atransparency_anchor referencing an entry in the public Sigstore Rekor log. The verifier surfaces one of several outcomes. The two you most need to distinguish:
- Verified — the entry exists, its inclusion proof checks out, and the entry is cryptographically bound to this receipt: the DSSE envelope’s subject digest equals the receipt’s integrity hash,
sha256(envelope)matches the logged entry body, and Rekor’s Signed Entry Timestamp (SET) verifies against a pinned Rekor log key. This binding requires the receipt to carry the full set of anchor fields. - Entry found (partial) — an entry exists at the claimed index, but the receipt predates capture of the binding fields, so the verifier can confirm that an entry exists but not that it is the entry for this receipt. This is honestly reported as a partial attestation, not a clean pass.
Anchoring happens after signing and is not part of the integrity hash. A receipt with no transparency anchor is still fully signed and verifiable — it simply has not been (or could not be) logged. The verifier reports
not_anchored in that case, which is not a failure.The tamper demo
The fastest way to build confidence in the verifier is to break a receipt on purpose and watch it get caught.- Verify a genuine receipt at verify.meshqu.com and confirm Integrity: Valid and Signature: Valid.
- Copy the receipt JSON into a text editor and change a single hashed field — flip the
decisionfromALLOWtoDENY, edit a number insidecontext.fields, or delete a violation. - Paste the modified receipt back in.
- Integrity → Tampered. The recomputed hash no longer matches the stored
integrity_hash, because you changed a field the hash covers. - Signature → Invalid. The signature was made over the original integrity hash. Your edit invalidates it, and — crucially — you cannot forge a new valid signature without MeshQu’s private key.
Why both, and why it matters. If you edit a field, you might think to also rewrite the stored
integrity_hash to match — and integrity alone would then “pass.” But the signature is computed over the original hash with a private key you do not hold, so it will still fail. To make a tampered receipt pass both checks you would need MeshQu’s signing key. That is exactly the property a regulator wants: tamper-evidence that cannot be papered over.transparency_anchor, chain linkage, evaluation_time_ms, and source-artifact metadata such as filename and byte size. Editing one of those will not flip the integrity verdict, because they were never hashed. See What Is and Isn’t Bound for the exact list. This is honest behaviour, not a gap: the verifier only claims integrity over what it actually hashed.
Receipts vs. bundles
This page covers verifying a single Decision Receipt. A Verification Bundle is the stronger artefact: a digest-addressed archive that adds the policy snapshot (so the rules can be re-run), chain proofs, and the transparency proof, all under one manifest — eight sub-claims instead of three. Use a bundle when you need to independently replay the decision, not just confirm the receipt wasn’t altered. The web verifier has a dedicated bundle mode for this. For the full sub-claim contract, see Verification Bundle.What a clean verdict still asks you to trust
Independent verification narrows what you must take on faith, but it does not eliminate it. A fully green receipt still rests on:- MeshQu’s custody of its signing private key. A valid signature proves the key signed it; it cannot prove the key was never misused.
- The authenticity of the public-key channel. You are trusting that the public keys you pinned (via the JWKS endpoint or bundled defaults) genuinely belong to MeshQu.
- The truthfulness of the submitted inputs. MeshQu hashes the context and evidence references it is given. It does not independently authenticate that
actor.id, evidence digests, orsource_artifacthashes reflect reality.
See also
- Verification Bundle — the eight sub-claims and the offline archive format.
- Receipt Reference — exactly which fields are bound into the hash and signature.
- Trust Model — the L1–L5 maturity scheme and what each level proves.