This repository holds the files and explanations for the hands-on workshop on electronic identities, created by the https://c4dt.epfl.ch for its partners on the 26th of June 2025. The goal of this hands-on workshop is to:
- introduce you to our Taxonomy
- explain what the legal texts for the Swiss E-ID require
- how these requirements match with common trust and threat models
- which cryptographic protocols allow us to implement the needed functionality
The hands-on workshop is in two parts:
- Morning: presentation by Dr. Imad Aad, including discussion time
- Afternoon: hands-on workshop using Jupyter notebooks
The morning is presented by Dr. Imad Aad, and will discuss how different e-ID technologies work, what the legal frameworks are, and compare them.
You can find the presentation here:
Overview of eID + Privacy Landscape
In the afternoon, we present the following:
- The Swiyu test environment - how it works, how our taxonomy describes it, and current limitations
- Potential next developments in electronic identities, specifically related to holder binding and unlinkability
You can find the presentation here:
E-ID Hands-on Workshop Presentation
Follow the text in the Jupyter Notebook for 1-Swiyu.
Follow the text in the Jupyter Notebook for 2-BBS-ECDSA. The exercises in this Jupyter Notebook are based on the excellent work of:
- Cloudflare's ZKAttest which shows how to prove an ECDSA signature with a public key committed to a Tom-256 curve
- Ubique's SHIELDS takes the idea of ZKAttest and applies it to BBS signatures and the holder binding / unlinkability problem
- Docknetwork/Crypto Library creates a nice implementation with a very useful proof of concept test code
In order to run the Jupyter Notebooks, you can choose between:
If you want to follow the exercises during the hands-on workshop, docker is easier. However, if you want to develop and send pull requests, it's faster with devbox.
Make sure that you have one of the latest versions of Docker
installed, and git
is available, then you can start the jupyter-lab with the following:
git clone https://github.com/c4dt/how-2025-06-eID
cd how-2025-06-eID
docker compose up
Once the docker image is downloaded, you will find an URL like https://localhost:8888/lab?token=.... Copy/paste this URL to your browser, and off you go!
If you have DevBox installed on your machine (congrats - I hope you like it as much as I do), you can start the jupyter lab like this:
git clone https://github.com/c4dt/how-2025-06-eID
cd how-2025-06-eID
devbox run jupyter
Once everything is installed, on MacOS it will open the browser directly, on Windows and Linux you need to search for the URL like https://localhost:8888/lab?token=.... Copy/paste this URL to your browser, and off you go!
In the base directory, you find the two main jupyter notebooks for the afternoon exercises:
- 1-Swiyu which introduces you to the Swiyu test network
- 2-BBS-ECDSA shows the challenge of using holder binding while keeping the presentations unlinkable
In addition to these two files, there is some rust code available here:
With the documentation here: ecdsa_proof documentation or on c4dt.github.io.
It wraps the docknetwork/crypto proof of concept. The main difference is that it uses structures which represent the actors and is geared towards showing the main challenges and how it works.
This code is under an Apache 2.0 License.
If you want to contribute, feel free to open an issue or a PR.
You can contact the Factory team of C4DT under [mailto:c4dt-dev@listes.epfl.ch].