Skip to content
Start with Identity
Standard · recommendation

Verifiable Credentials & SD-JWT

W3C VC Data Model 2.0; IETF SD-JWT (RFC 9901) and SD-JWT VCW3C / IETFVC Data Model 2.0 Recommendation (15 May 2025); SD-JWT published as RFC 9901; SD-JWT VC draft-24 (5 November 2026) in IESG evaluationOfficial spec ↗

What it is

A Verifiable Credential (VC) is a cryptographically signed, tamper-evident digital credential a holder keeps in a wallet and presents without the verifier calling the issuer. It is the data layer of decentralized identity: a machine-verifiable version of a diploma, a driver's license or proof of employment.

The term covers two standards families that share one model, the issuer, holder, verifier triangle:

A third family, ISO mdoc, covers mobile driver's licenses. AnonCreds persists in Hyperledger Indy based networks.

Status (November 2026)

Document Body Status Date
VC Data Model 2.0 W3C Recommendation 15 May 2025
VC Data Integrity 1.0; ECDSA and EdDSA cryptosuites 1.0 W3C Recommendations (1.1 cryptosuite drafts in progress) 15 May 2025
Bitstring Status List v1.0 W3C Recommendation (v1.1 draft 21 October 2026) 15 May 2025
Securing VCs using JOSE and COSE W3C Recommendation (current edition dated 13 October 2026)
Data Integrity BBS Cryptosuites v1.0 W3C Candidate Recommendation (draft 10 September 2026)
SD-JWT IETF RFC 9901, Proposed Standard (Fett, Yasuda, Campbell) November 2025
SD-JWT VC IETF draft-24, IESG Evaluation, "Revised I-D Needed", one DISCUSS open 5 November 2026
Token Status List IETF draft-21, RFC Editor queue 21 June 2026

Dates are from the W3C TR index and the IETF datatracker, checked 5 November 2026. SD-JWT VC was on the IESG telechat agenda for 5 November 2026; the DISCUSS must clear before it becomes an RFC. Note that HAIP deliberately pins SD-JWT VC draft-13 and Token Status List draft-14, so production EU wallets lag the latest drafts.

How it works

  1. Issuance. An issuer signs claims about a subject and delivers the credential to the holder's wallet, typically over OpenID4VCI. The credential is bound to a key the wallet holds. The issuer's key is found through a DID, an X.509 chain, or (for SD-JWT VC) issuer metadata.
  2. Presentation. A verifier requests specific claims over OpenID4VP. The wallet builds a verifiable presentation with only those claims, signed with the holder key over the verifier's nonce.
  3. Verification. The verifier checks the issuer signature, the holder binding, validity dates and status, then decides whether it trusts the issuer, typically via a trust registry or trusted list.

How SD-JWT selective disclosure works (RFC 9901). For each disclosable claim the issuer builds a disclosure, a base64url JSON array of salt, claim name and value, and puts its SHA-256 digest in an _sd array inside the JWT it signs. It may add decoy digests to hide how many claims exist. The holder sends the issuer-signed JWT followed by the disclosures it chooses, each terminated by ~, and for holder-bound credentials a key binding JWT (typ: kb+jwt) carrying iat, aud, nonce and sd_hash over the presented SD-JWT. The verifier hashes each disclosure and matches it to a signed digest. If the issuer included a boolean age claim, a request for proof of age reveals that one claim and nothing else.

What SD-JWT VC adds (draft-24). The application/dc+sd-jwt media type and typ, a required vct claim naming the credential type, type metadata retrievable from the vct URL, issuer key discovery through /.well-known/jwt-vc-issuer metadata or an inline x5c chain, and an optional status claim pointing at the IETF status list.

Revocation. The credential carries a status entry pointing to an index in a list the issuer publishes (revocation registry). Bitstring Status List serves W3C credentials and Token Status List serves SD-JWT VC; HAIP requires the latter with a unique, unpredictable index per credential.

Choosing a format

Need Format
EU wallet acceptance SD-JWT VC or mdoc, per the ARF and HAIP
Driver's license, age at a counter mdoc (ISO/IEC 18013-5)
JSON-LD vocabularies, linked data W3C VC 2.0 with Data Integrity
Unlinkable presentations without batch issuance BBS (BBS signatures) once out of CR, or AnonCreds
Plain workforce SSO None. Use OpenID Connect

Who implements it

Rankings: best verifiable credential platforms, best decentralized identity for KYC.

Security and privacy pitfalls

  • Signature-only verification. A valid issuer signature without a holder binding check accepts a stolen or copied credential. Always verify the key binding JWT or Data Integrity presentation proof against your nonce.
  • Correlation by signature. Showing the same SD-JWT VC twice reveals the same issuer signature and digests, so colluding verifiers can link the user. Use batch issuance and one presentation per copy, or an unlinkable scheme.
  • Weak salts. RFC 9901 relies on salts to stop verifiers guessing undisclosed values from their digests and recommends at least 128 bits of randomness. Use a vetted library, not a hand-rolled one.
  • Status list privacy and freshness. Cache status lists sensibly; fetching per credential leaks timing, and stale lists accept revoked credentials.
  • Trusting the issuer field. Anyone can mint a DID and sign a credential. Trust comes from your issuer allowlist or trust registry.
  • Version mismatch. SD-JWT VC draft numbers, VC 1.1 versus 2.0, and status list versions all break interop silently. Pin versions per verifier.

Guides: what is decentralized identity, verifiable credentials implementation guide, reusable identity and KYC with verifiable credentials. Articles: verifiable credentials use cases. Standards: DID, OpenID4VC, mDL, eIDAS 2 / EUDI Wallet. Glossary: verifiable credential, SD-JWT, verifiable presentation, JWT, zero-knowledge proof. Vendors: decentralized identity. Directory: digital IDs by country.

Who wrote it

Manu Sporny kickstarted the W3C work behind verifiable credentials and co-created JSON-LD underneath it. Selective disclosure rests on Daniel Fett's SD-JWT and on BBS signatures, co-edited by Tobias Looker and built on the BLS scheme co-authored by Dan Boneh. More in the experts directory.

Verifiable Credentials & SD-JWT: frequently asked questions

When did VC Data Model 2.0 become a W3C Recommendation?
Verifiable Credentials Data Model v2.0 was published as a W3C Recommendation on 15 May 2025, together with companion Recommendations including Verifiable Credential Data Integrity 1.0, the ECDSA and EdDSA cryptosuites, Bitstring Status List v1.0 and Controlled Identifiers v1.0. Securing Verifiable Credentials using JOSE and COSE is also a Recommendation. The BBS cryptosuite is still a Candidate Recommendation.
What is the difference between SD-JWT and SD-JWT VC?
SD-JWT, published as RFC 9901, is a general mechanism for selective disclosure in JSON Web Tokens: the issuer signs digests of claims and the holder reveals chosen claims as separate disclosures, optionally with a key binding JWT. SD-JWT VC (draft-ietf-oauth-sd-jwt-vc) builds a credential format on top of it, defining the dc+sd-jwt media type, the vct credential type claim, issuer key discovery and status. As of 5 November 2026 it is at draft-24 and in IESG evaluation.
Is SD-JWT VC the same as a W3C Verifiable Credential?
No. They share the issuer, holder and verifier model, but SD-JWT VC is an IETF JWT-based format with its own claims, while W3C VC 2.0 is a JSON-LD data model secured with Data Integrity proofs or JOSE and COSE. The EU wallet framework requires SD-JWT VC and ISO mdoc, and treats W3C VC 2.0 as optional.
How does a verifier know a credential has not been revoked?
The issuer publishes a status list and the credential points to an index in it. W3C credentials use Bitstring Status List v1.0, a W3C Recommendation. SD-JWT VC and mdoc use the IETF Token Status List, which is in the RFC Editor queue as draft-21. The verifier fetches the whole list rather than asking the issuer about one credential.
Which credential format should I choose?
Choose by verifier. For EU wallet interoperability, SD-JWT VC or mdoc under HAIP. For driver's licenses and age checks, mdoc. For JSON-LD ecosystems that need unlinkable proofs, W3C VC with Data Integrity and, once stable, BBS. AnonCreds remains common in Hyperledger Indy based networks.
Last reviewed By SWI Community TeamSuggest a correctionHow we research
Independent, community-driven reference. Always confirm details against the official specification linked above.