This project is a showcase of CRSet, the novel revocation mechanism for W3C Verifiable Credentials with cascading padded Bloom filters, as proposed in the paper CRSet: Non-Interactive Verifiable Credential Revocation with Metadata Privacy for Issuers and Everyone Else.
The demo consists of two parts: the issuer demo and the verifier demo, which have to be started separately. To experience the demo, a smartphone with an SSI wallet app is needed. Any wallet app with OID4VC support should work. The Altme app worked well in testing.
The issuer demo resembles a simple HR tool that allows a company to issue employee IDs as VCs for employees:
- Click on "Start Issuing"
- Enter arbitrary employee info and click "Generate Verifiable Credential"
- Scan the QR code with the smartphone and follow the directions to obtain the newly issued employee ID VC
The tool also gives an overview over issued VCs and allows revocation:
- Navigate to the "Employee List" tab
- Select any number of VCs to revoke and press the button labeled "Revoke"
To make the revocations public, a manually triggered rebuild and publishing of the CRSet is required:
- On the "Employee List" tab, click on "Publish CRSet"
- On the next page, click "Confirm Publication" to trigger the process
- Watch the updates in real time as the system builds the Bloom filter cascade and sends the blob-carrying transaction
The issuer demo also offers a dashboard showing the past publications and associated data, such as cost, time, and data size. It also includes direct links to block and blob explorers to dive in further.
The verifier demo is a mock-up of a banking site allowing loan applicants to prove their employment status with their employment ID VC:
- Click "Apply for a loan now!"
- Enter arbitrary data for personal data and click next
- Enter arbitrary loan data and click next
- Scan the QR code with the smartphone and follow directions to present the employee ID VC
- Observe how the website updating the verification progress with emphasis on the revocation check in real time
Note
This demo was built first and foremost to be easy to set up and run. Security-critical aspects like session management have been excluded since they are not core to showing the CRSet mechanism itself.
This is an overview of the demo. The components in blue are core components of CRSet which are built to be use case agnostic:
The project is structured as follows (only the most relevant files and folders are shown):
|-- crset-demo/
|-- issuer-demo/
| |-- Dockerfile
| |-- package.json
| |-- data/
| |-- src/
|-- verifier-demo/
| |-- client/
| | |-- Dockerfile
| | |-- package.json
| | |-- src/
| |-- server/
| | |-- Dockerfile
| | |-- package.json
| | |-- src/
|-- .env.example
|-- compose.yaml
Several prerequisites are required in order to run the demo. These are outlined below.
This demo requires an SSI Wallet supporting OID4VC protocols, like Altme Wallet. To install Altme, follow the instructions on the Altme Wallet website. Once installed, create a new wallet and save the private key.
As mentioned earlier, this demo requires the crset-issuer-backend to be running in order to manage credentials. To start it, follow the instructions in the README of that repository. The docker compose setup of this demo expects the crset-issuer-backend to be available at the default localhost:5050
.
To make the demo pages publicly accessible (for the wallet app), a tool like ngrok is required. The issuer demo and verifier demo are set up such that both their backends run on port 3000.
Using ngrok, an external URL can be set up with:
ngrok http 3000
The terminal process will keep running and show the external URL, looking something like: https://<random-string>.ngrok-free.app
.
This demo requires several environment variables. These are specified in the .env
file. An example file .env.example
with some explanations is provided to be copied. It can be found here.
Once the prerequisites are met, the demo can be run. Since we assume only one external URL to be available (e.g., via ngrok), the issuer and verifier applications can be started separately. To start the services required for the demo, run one of the following commands:
docker compose --profile issuer up --build
or
docker compose --profile verifier up --build
This will start the respective demo.
The issuer demo can be accessed at http://localhost:3000
and the verifier demo can be accessed at http://localhost:3001
.
We thank the Ethereum Foundation for funding this work with an Ethereum Academic Grant under reference number FY24-1545.