X-ATB-Credential header for reputation-gated variable pricing.
Why it exists
The bench measures whether an agent refuses adversarial payment challenges. The credential lets that measurement travel. An agent that has passed ATB at the configured threshold can:- Receive discounted payment terms on participating x402 gateways
- Be composed into
composite_trust_queryaudit chains as an evidence source - Demonstrate compliance posture to upstream orchestrators without exposing session-level data
passed=true certificate.
Recomputable, not faith-based
The ATB score is not an opaque, operator-maintained trust graph. It is a Falcon-1024-signed, JCS-canonical credential with a published score formula (see Score computation) and an expiry — recomputable from the bench events, presented by the agent (Phase 2: zero-knowledge), and used for variable pricing, never to block. Reputation here is a verifiable artifact, not a number you take on faith — the complement to the Compliance Gate’s stateless ALLOW/REFER/DENY admission. Together they keep both halves — the block and the reputation — signed and recomputable.Two-phase rollout
Both phases are deployed. Phase 2 activates when the bench has
ATB_ZKP_ENABLED=true; the gateway transparently handles both certificate versions.
Score computation
The score is derived from the agent’s session history inbench_events:
adv_challenged— number of adversarial profiles the agent was servedadv_refused— number of those it correctly refused (the primary signal)adv_paid— number of those it incorrectly paid (penalty)base_challenged/base_paid— baseline (honest) profile activity (small bonus for paying legitimate challenges)
Certificate format (Phase 1)
Signed payload
Wire encodings
The bench uses PQClean’s encoding for both the public key and the signature. PQClean prepends a 1-byte algorithm-ID header to the key; the signature is otherwise byte-identical across all conforming Falcon-1024 implementations. Public key (1793 bytes):
The signature wire format itself is interoperable across all three. The only difference is the 1-byte public-key header that PQClean adds. Verifiers using non-PQClean libraries (BouncyCastle, liboqs without the PQClean compatibility layer) strip that byte before constructing their public key object.
Phase 2 (Bulletproofs over Ristretto255) is not affected — that encoding is uniform across implementations.
Canonical form verified across 8 implementations. The live (Phase 2) certificate’s JCS preimage canonicalizes byte-identically across eight independent implementations (Python, Node.js, Ruby, PHP, Go, Rust, Java, .NET) — the same conformance corpus discipline — so the exact bytes the Falcon-1024 signature covers are reproducible in your own stack. (Phase 1 carried a cleartext decimal score; Phase 2 replaces it with an integer threshold + a ZK commitment, which is what keeps the canonical form interoperable across all eight.)
Envelope (the actual header value)
How an agent obtains a certificate
The bench session cookie is hashed by the agent locally and the hash is sent to the bench. The raw cookie value is never transmitted in the certificate request.header_name field tells you which header to use — always read this field rather than hardcoding X-ATB-Credential. When the bench is running in Phase 2 mode, cert_version is "2", score is null (not disclosed), and the envelope contains a Pedersen commitment + Bulletproofs range proof instead of the raw score.
If the agent has fewer than 10 adversarial challenges in its session, the endpoint returns 422 insufficient_data with guidance on how many more profiles to run.
How a gateway verifies a certificate
The bench’s public key is published at:- Decode the base64url envelope from the
X-ATB-Credentialheader - Check
alg == "Falcon-1024"andkidmatches the published bench key - Verify the Falcon-1024 signature over
rfc8785.dumps(payload) - Check
bench_issuer == "did:web:agent-trust-bench.algovoi.co.uk" - Check
expires_atis in the future - If
passed == true, apply the discount
Gateway integration (AlgoVoi reference implementation)
The AlgoVoi gateway applies the discount transparently in the x402 challenge construction. An agent presenting a validpassed=true cert receives a challenge with amount reduced by ATB_DISCOUNT_FACTOR (default 0.80, i.e. 20% off):
ATB_CREDENTIAL_CACHE_TTL_SECS) to avoid re-running Falcon-1024 verification on every request.
Degradation: if the gateway is missing the bench public key, or the certificate is malformed, expired, forged, or below threshold, the discount path is silently skipped and the agent receives the full list price. There are no error responses for credential failures.
Multi-hub federation
The substrate is open: any organisation can operate an ATB Pass Certificate hub. The certificate’sbench_issuer field identifies the hub, and gateways resolve trust through one of three mechanisms (in precedence order):
- Pinned hubs (
ATB_PINNED_HUBS_JSON) — operator inline override. Highest precedence. - Allowlist (
ATB_TRUSTED_HUBS) — gateway lists DIDs of hubs it trusts; auto-fetches their public keys from their/.well-known/atb-keys.json. - Adopters Registry (
ATB_REGISTRY_URL) — AlgoVoi maintains a Falcon-1024 signed registry of approved hubs. Gateways verify the registry againstATB_REGISTRY_ROOT_PK_B64and trust every hub it lists.
ATB_BENCH_ISSUER_DID + ATB_BENCH_PK_B64). Phase 1 deployments work unchanged.
Registry doc shape
Methodology versioning
Each cert carries amethodology_version (e.g. atb-v1.1). A hub being approved doesn’t auto-approve any methodology it might introduce — gateways opt in per-methodology. The current registry defines:
atb-v1.1— current AlgoVoi reference methodology (179-profile adversarial set including the resource-bounds / substrate-guard family; formula in Score computation above, threshold 0.70, minimum 10 adversarial challenges)atb-v1.0— superseded but recognised (171-profile set; certs issued under it remain valid, the signing key is unchanged)
Tiers
Becoming a hub
See ATB Hub Conformance for the full specification and application process. Short version: implement the spec, pass the conformance vectors, submit an application issue, get listed in the next signed registry refresh. The substrate is Apache 2.0. Operating outside the registry is permitted; registry inclusion is a discovery + trust-by-default convenience, not a gatekeeping mechanism.Phase 2 — zero-knowledge range proof ✅ Live
Phase 2 replaces the cleartext score with a Pedersen commitment and a Bulletproofs range proof. The Falcon-1024 envelope still wraps the credential; only what the verifier learns changes:X-ATB-ZK-Credential (a separate header from Phase 1’s X-ATB-Credential). The gateway processes both independently; if neither header triggers a discount, the full list price applies.
Why Bulletproofs:
- No trusted setup — no setup ceremony required, unlike Groth16/PLONK
- Compact — 64-bit range proof on Ristretto255 is ~672–896 bytes
- Battle-tested — production-grade
dalek-cryptographyRust crate (used by Monero, Zcash)
atb-zkp-service, a small Rust microservice wrapping the bulletproofs crate. Python-native Bulletproofs libraries are not production-quality at the time of writing; the thin Rust service is the correct deployment pattern.
Gateway verification flow for Phase 2:
- Decode the base64url envelope from the
X-ATB-ZK-Credentialheader - Check
alg == "Falcon-1024", verify the Falcon-1024 signature overrfc8785.dumps(payload)(same as Phase 1) - Check
atb_cert_version == "2",bench_issuer, andexpires_at - Extract
commitment_b64,proof_b64,threshold_milliunitsfrom the payload - Call
POST /verifyon the ZKP microservice — returns{"valid": true}or{"valid": false, "failure_reason": "..."} - If
valid == true, apply theATB_DISCOUNT_FACTORdiscount — no score needed
Composition with composite_trust_query
An ATB certificate can be presented to a composite trust query alongside compliance and settlement receipts. It maps to a synthetic receipt format:
atb_score is omitted and replaced with atb_zkp_verified: true — the verifier has already confirmed the range proof, so the trust oracle can trust the claim without seeing the score.
See composite_trust_query for the full multi-source aggregation flow.
A2A trust.signals[] discovery
The ATB Pass Certificate is declared as a provider-neutralbehavioral_attestation trust signal in the A2A trust.signals[] spec. A machine-readable descriptor is published at:
evidence_type: signed_behavioral_credential is the provider-neutral shape accepted by the A2A trust.signals[] specification. ATB specifics (issuer DID, ZKP scheme, credential header) resolve behind did:web:agent-trust-bench.algovoi.co.uk for consumers that want them.
The credential_header field reflects the bench’s active certificate version — X-ATB-ZK-Credential when Phase 2 (ZKP) is enabled, X-ATB-Credential otherwise. Gateways should read this field rather than hardcoding either header name.
IETF anchor
The certificate format and gateway processing rules are specified in a forthcoming Internet-Draft:draft-hopley-x402-atb-reputation-credential-00
draft-hopley-x402-canonicalisation-jcs-v1 for the canonicalisation discipline and composes upstream of draft-hopley-x402-composite-trust-query as an evidence-source primitive.
Security and privacy considerations
What the gateway learns from Phase 1:- The exact score (
0.0to1.0) - Number of adversarial challenges, refusals, and payments
- The agent’s
agent_id_hash(double-hash of a session cookie — not linkable to identity without the cookie) - Which profile-set version was used (
profile_set_hash)
- That score ≥ threshold. Nothing more.
- Same
agent_id_hashandprofile_set_hash.
- The raw session cookie value (the bench stores only hashes)
- IP address or User-Agent (bench stores only hashes)
- Exact sequence of profiles encountered
audience field and require a verifier nonce. This is deferred to v2.1.
Falcon-1024 choice: Falcon was selected over ML-DSA-65 for compactness (~1280 bytes signature vs ~3309 bytes). The Gaussian-sampler side-channel concern applies to software implementations on adversary-co-located hardware; the bench signing context (isolated VM, no shared tenancy) is materially different.
Reference implementation
The bench-side issuer, gateway-side verifier, Falcon-1024 wrapper, and JCS canonicalisation modules are all AlgoVoi-authored under Apache 2.0. Source code is made available to approved hub operators and acquisition counterparties via NDA; the substrate format and canonicalisation discipline are specified normatively in this document and the linked IETF I-D. The substrate-author position lives in the JCS canonicalisation discipline and the IETF-anchored credential format. Anyone implementing the spec from this page can build a conformant verifier or hub; see the hub conformance spec for the path.Operational status
Both Phase 1 and Phase 2 are deployed and live on the AlgoVoi reference bench and gateway.
With all flags disabled, the system behaves exactly as before the credential layer was added — no impact on existing payment flows.