Lion Cipher Lab

Revoke verifiable credentials with a Bitstring Status List (build the issuer and verifier from scratch)

Why it matters

Issuing a credential is the easy half. The half that decides whether a digital-identity system is trustworthy is being able to KILL one -- a leaked employee badge, a diploma issued in error, a driver's licence for a suspended driver -- before it expires on its own. The classic answer, OCSP, made every verifier phone the issuer with the exact certificate being checked, which leaks who is verifying whom (and browsers quietly gave up on it). The W3C Bitstring Status List is the privacy-preserving replacement the verifiable-credential world standardized on: the verifier downloads one big list and…

What you'll learn

Steps in this lab

  1. The problem: you issued a credential -- now how do you kill it, privately?
  2. The core idea: one bit per credential, and why the verifier grabs the whole list
  3. Build the engine from scratch (statuslist.py)
  4. Build the issuer: allocate the lists, assign random indices, issue credentials (issuer.py)
  5. Serve it, then build the verifier (verifier.py)
  6. Run the happy path: a valid credential is accepted
  7. Revoke one credential: flip the bit, re-sign, re-publish (revoke.py)
  8. Suspension vs revocation: reversible vs permanent
  9. Failure mode: an unsigned or stale list lets an attacker un-revoke
  10. Herd privacy is fragile: a too-small or sequential list de-anonymizes
  11. Judgment: when a status list, when something else, and what it never tells you

Open the full interactive lab →