Mo Tawfik Khalifa · Product leader and builder
All notes

"Verifiable credentials: what they are, how they work, and how to build one"

8 min read · Mo Tawfik Khalifa
Try it below

A verifiable credential is a digital version of a licence, diploma or ID card, signed by whoever issued it, so anyone you show it to can check in seconds that it is real, unchanged and still valid. You keep it in a wallet on your phone and choose which parts to show.

The standard is settled. The W3C published Verifiable Credentials Data Model 2.0 as a Recommendation on 15 May 2025, and Europe’s member states must offer every citizen a digital identity wallet that holds credentials like these by 2026.

I’ve built identity products three times around one rule: prove the fact, not the person. The long version, with all three builds, is in How to prove who someone is without seeing who they are. This page is the plain guide to the format underneath.

What are verifiable credentials?

A verifiable credential is a set of claims about someone, such as “Hannah Clarke is a registered nurse, licence active until March 2027”, with a digital signature from the body that made those claims. Three parties are involved, and the W3C standard names them:

  1. The issuer makes the claims and signs them: a nursing board, a university, a government.
  2. The holder keeps the credential, usually in a wallet app, and decides when to show it: the nurse.
  3. The verifier receives it and checks it: the hospital.

The verifier never has to phone the issuer. The signature carries the proof.

How does a verifiable credential work?

Four steps, from issue to check.

  1. Issue. The nursing board checks Hannah’s licence against its own register, puts the facts into a credential and signs it with its private key. Only the board has that key.
  2. Hold. The credential lands in a wallet on Hannah’s phone.
  3. Present. A hospital asks for her licence. Her wallet shows what is asked for, and she picks the fields to send.
  4. Verify. The hospital runs three checks. Is the signature valid against the board’s public key? Is the board on the list of issuers the hospital trusts? Has the board revoked the licence since?

The third check is the clever one. Under the W3C Bitstring Status List, a Recommendation since 15 May 2025, the issuer publishes one long list of bits, at least 131,072 of them, and each credential points at one position. A 0 means fine, a 1 means revoked. The verifier downloads the whole list, so the issuer never learns whose credential was checked.

The hospital finds the board’s public key through a decentralised identifier, a DID: an identifier that needs no central registry, a W3C Recommendation since 19 July 2022. did:web:nursing-board.example simply points at a file on the board’s own website.

Try it below. Pick what the hospital sees, then try to cheat: change the expiry date, sign it with your own key, or have the board suspend the licence. Each one breaks a different check.

Share a nursing licence with a hospital, then try to fake one.

Tick what the hospital sees. Its screen checks three things: the board’s signature, that it trusts the board, and that the licence hasn’t been revoked.

This demo needs JavaScript. In short: the nurse’s wallet sends only the ticked fields, the hospital checks the nursing board’s signature against the board’s public key, checks the board is on its trusted list, and looks up one bit in the board’s published revocation list. Change a field, sign it yourself, or have the board revoke the licence, and one of those checks fails.

Wallet
Kirkgate General Hospitalwants to see your licence · sample
    The nurse’s phone: a wallet holding the licence

    Try to cheat

    Each one breaks a different check on the hospital’s screen.

    Kirkgate GeneralStaff credentialing

    New starters / Licence check

    Waiting for a licence

    The hospital’s screen: the verifier

    Sample people and places. The keys, fingerprints and signatures are made for real in your browser with Web Crypto, and nothing is sent anywhere. The format is simplified from SD-JWT selective disclosure and the W3C Bitstring Status List.

    What does a verifiable credential look like?

    It is a small JSON file. This example comes from the W3C specification, unchanged:

    {
      "@context": [
        "https://www.w3.org/ns/credentials/v2",
        "https://www.w3.org/ns/credentials/examples/v2"
      ],
      "id": "http://university.example/credentials/58473",
      "type": ["VerifiableCredential", "ExampleAlumniCredential"],
      "issuer": "did:example:2g55q912ec3476eba2l9812ecbfe",
      "validFrom": "2010-01-01T00:00:00Z",
      "credentialSubject": {
        "id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
        "alumniOf": {
          "id": "did:example:c276e12ec21ebfeb1f712ebc6f1",
          "name": "Example University"
        }
      }
    }

    issuer is who signed it, credentialSubject is who it is about and what is claimed, and validFrom is when it starts. The signature is added on top. To make it revocable, the issuer adds a status entry, as in the Bitstring Status List spec:

    "credentialStatus": {
      "id": "https://example.com/credentials/status/3#94567",
      "type": "BitstringStatusListEntry",
      "statusPurpose": "revocation",
      "statusListIndex": "94567",
      "statusListCredential": "https://example.com/credentials/status/3"
    }

    What is selective disclosure?

    Selective disclosure lets the holder show some fields and keep the rest back, while the verifier can still check that each shown field was signed by the issuer. In the common formats, the issuer signs a list of sealed fingerprints, one per field, and the holder opens only the ones the verifier needs. That is how the hospital in the demo gets name, licence, status and expiry, and never sees the date of birth or home address.

    Prove the fact, not the person has a hands-on sealed envelope demo, and how to prove you’re over 18 without showing your ID covers SD-JWT and zero-knowledge proofs, where the verifier learns only “yes”.

    How is a verifiable credential different from a PDF certificate or a database lookup?

    Verifiable credentials vs KYC software: which do you need?

    KYC software and identity verification software check a person from scratch, usually with a document scan, a liveness check and a face match, priced per check: list prices for a full ID check ran from $0.33 to $1.89 when I compared vendors in the age verification guide. A verifiable credential is what can come out of a check like that: the result, signed by whoever did it, so the next verifier checks a signature instead of running the whole check again. So the two fit together. Use KYC software where you must know the person for the first time, such as when money moves, and issue or accept a credential so they do not repeat it at every stop. I build the credential side, the issuer, the wallet and the verifier; I do not sell KYC software.

    Which standards matter in 2026?

    Where are verifiable credentials used now?

    How do you build a verifiable credentials system?

    1. Pick the one claim. “Licence active” or “over 18”, not a whole file. Decide who issues it and who will check it.
    2. Build the issuer. It checks the facts at the source, signs the credential with a key it guards, publishes its public key (a did:web file is the simplest start), gives every credential a slot in a status list, and hands it to the wallet over OpenID4VCI.
    3. Choose the wallet. Use one people already have, such as a national EU wallet, or build your own app when the credential lives in your product. Bind each credential to a key on the device, so a copied file is useless without the phone.
    4. Build the verifier. It asks for named fields over OpenID4VP and runs the checks from the demo: signature, trusted issuer, status, expiry, and that the holder’s own key signed this presentation.
    5. Plan the boring parts first. Revocation, re-issue when a phone is lost, rotating the issuer’s key, and what the verifier does when the status list is out of date.

    I led a credential passport app for clinicians: a licence nurses and doctors share without their whole file. Licences are verified against the issuing authority, the clinician ticks which fields each employer gets, names the one recipient, and can revoke the share at any time. Before that, at PLAYERUNKNOWN Productions, I designed a zero-knowledge player ID, where the game learns a player is real and not who they are, and at NOR, where I led technology, we built a game login on Holochain that never touched the player’s keys. All three are written up in prove the fact, and the clinician app also appears in forward deployed engineer: four AI and fintech builds.

    Questions people ask

    Are verifiable credentials on a blockchain?

    They don’t need one. Checking a credential needs the issuer’s public key and its status list, and both can sit on an ordinary website.

    What is the difference between a verifiable credential and a digital ID?

    A digital ID is one kind of verifiable credential: claims about who you are. A licence, a degree or a proof of age are credentials too, and one wallet can hold many.

    Can verifiable credentials be used for KYB verification?

    For the result, yes; the check itself still has to happen. KYB verification confirms who owns a business, what it does and where its money comes from, usually through a licensed partner or a KYB provider. Once that is done, the outcome can be issued as a credential, so the next bank or partner checks one signature instead of collecting the same documents again. Proving facts about a business without handing over its whole file is the idea behind prove the fact, not the person.

    Is a mobile driving licence a verifiable credential?

    In the general sense, yes: the same issuer, holder and verifier model, in the ISO mdoc format rather than the W3C one. OpenID4VP can request both.

    Can a verifiable credential be revoked?

    Yes. The issuer flips the credential’s bit in its published status list, and the next verifier that checks sees it. The copy in the wallet doesn’t change, which is why verifiers must check the list.

    Do you build this?

    Yes. I design and build credential and identity products end to end, as a fractional CPO or hands on. If you need verifiable credentials issued, held or checked, write to m@tawfik.tv.

    Read next

    See all notes