Repository navigation
v0.4.0 - VOPRF-gated disclosure (the privacy layer)
The privacy layer. v0.4.0 adds VOPRF-gated disclosure on top of the v0.3.0 receipt format.
What's new
The open receipt format proves what ran. v0.4.0 demonstrates the ScopeBlind layer that lets authorized people verify it privately.
npm run voprf-demo— Full BRASS/VOPRF-gated disclosure flow against the real Phoenix receipt. Researcher receives an issuer-blind VOPRF token, verifies the recommender receipt, presents the token to unlock a tiered disclosure (top-10 structured ranked items). Verifier confirms: receipt signature valid + VOPRF token valid + DLEQ issuer proof valid + DLEQ client proof valid + disclosed rows match the signedranked_items_root.npm run unlinkability-demo— Issuer view vs verifier view of two token issuances for the same approved researcher. Demonstrates scope-specific nullifiers and contrasts against a naive signed-bearer-token scheme (which would carry a stable subject and link redemptions by default).- New profile:
scopeblind.recommender.gated-disclosure-attestation.v1. Cryptographically binds the disclosure to the source receipt viareceipt_id+receipt_signature_hash. - Signed disclosure attestation verifies offline against
@veritasacta/verify@0.6.1. No production server contacted.
The precise privacy claim
The issuer cannot link token issuance to later verification/redemption from the cryptographic transcript alone. Inside one verifier scope, two redemptions by the same researcher remain linkable by nullifier (intentional, for rate limiting). Across scopes they are unlinkable.
This is exactly the property a naive signed bearer token cannot provide.
What it's not
- Not a regulatory artifact. Whether a deployment satisfies DSA / AI Act requirements depends on retention, access control, the auditor's authority, and the regulator's view.
- Not production. The shipped demos are local; they generate BRASS-style P-256 VOPRF tokens with DLEQ proofs and verify them locally. They do not call the production ScopeBlind issuer at
api.scopeblind.com. The cryptographic property is identical; the operational separation between issuer and verifier is what production deployment delivers. - Not "verifier-blind." The verifier sees the redemption event. The privacy property is that the issuer cannot link issuance to redemption.
See LIMITATIONS.md for the full caveat list.
Run it
git clone https://github.com/VeritasActa/x-algorithm-receipts
cd x-algorithm-receipts && npm install
npm run voprf-demo
npm run unlinkability-demo
# Verify the resulting attestation with the production verifier:
npx @veritasacta/verify examples/voprf-gated-disclosure/gated-disclosure.attestation.json \
--jwks examples/voprf-gated-disclosure/gated-disclosure.jwksWhy this matters commercially
The receipt format is open. Anyone can ship signed receipts. Issuer-blind verification with selective disclosure is the patent-protected (Patent #2 verifier nullifiers, Patent #4 configurable disclosure) ScopeBlind layer. v0.4.0 makes the moat visible.
Related
- IETF: draft-farley-acta-signed-receipts
- Verifier on npm:
@veritasacta/verify(Apache-2.0) - Previous release: v0.3.0 (structured Phoenix parser)