Selective Disclosure
Also called SD, minimal disclosure, selective disclosure of claims
Selective disclosure is the ability to prove one specific fact from a larger set of facts without revealing the rest. If your ID card lists your name, birthdate, address, and a photo, and a bar only needs to know you're over 21, selective disclosure lets you prove "over 21" and reveal nothing else, no name, no address, no exact birthdate.
This matters because most digital identity today does the opposite: it shows a full ID (or a full credential) to prove one narrow fact, leaking everything else along the way. Selective disclosure is the fix, and it predates blockchains by decades. The cryptographic groundwork goes back to David Chaum's work on credential systems in the 1980s and Camenisch–Lysyanskaya anonymous credentials in the early 2000s.
How it's actually built, today
Two standardized mechanisms carry selective disclosure into W3C Verifiable Credentials:
- SD-JWT (an IETF specification, with editors including Daniel Fett, Kristina Yasuda, and Brian Campbell), the issuer salts and hashes each claim individually inside a signed JWT; the holder reveals only the disclosures a verifier asked for, and the verifier checks each revealed claim's hash against the signed set. It's simple, and ordinary JOSE tooling can do it, but it's linkable: reveal the same hash twice, and two verifiers can tell it's the same credential.
- BBS+ signatures (Boneh–Boyen–Shacham, 2004, standardized as a cryptosuite by the W3C/DIF BBS working group), a pairing-based signature scheme where the holder generates a fresh zero-knowledge proof per presentation. Two presentations from the same credential are mathematically unlinkable, nothing in the proof itself lets two verifiers correlate them.
ISO/IEC 18013-5 (the mobile driving licence standard) has its own version too: the credential is split into namespaces, and the holder discloses only the namespaces a verifier requested.
Solidus status
Solidus's BBS+ implementation is UNAUDITED: an external audit is targeted for H2 2026 via
NLnet NGI Zero, and none exists today. With that said: Solidus implements both mechanisms above,
it invented neither. The SD-JWT path is what its live testnet issuer actually speaks, its OID4VCI
metadata advertises "format":"vc+sd-jwt", confirmed live. The BBS+ (unlinkable) path runs on the
same public testnet; there is no mainnet.
A stranger can check the SD-JWT claim directly:
curl -s https://capture-api.solidus.network/.well-known/openid-credential-issuer
For the BBS+ path, the unlinkability demo ships inside the published tarball:
npm i @solidus-network/auth @solidus-network/bbs
node node_modules/@solidus-network/auth/demo/unlinkability-demo.mjs
Its own printed output states the audit-pending boundary, the demo prints its own honesty limit rather than asking you to take Solidus's word for it.
Where it comes from
Someone else specified this. Solidus assembles it.
The cryptographic groundwork goes back to David Chaum's credential systems (1980s) and Camenisch–Lysyanskaya anonymous credentials (2001). The two mechanisms that carry it into Verifiable Credentials today are IETF SD-JWT (editors including Daniel Fett, Kristina Yasuda, Brian Campbell) and the BBS+ signature scheme (Boneh–Boyen–Shacham, 2004), standardized as a cryptosuite by the W3C/DIF BBS working group. Solidus originated neither mechanism.
How to check this
Running in production today.
curl -s https://capture-api.solidus.network/.well-known/openid-credential-issuer returns "format":"vc+sd-jwt" (checked 2026-07-17), confirms the SD-JWT selective-disclosure path is live, not aspirational. For the BBS+ path: npm i @solidus-network/auth @solidus-network/bbs; node node_modules/@solidus-network/auth/demo/unlinkability-demo.mjs ships the demo inside the tarball, and its own printed output states the audit-pending boundary.