L'identité numérique à base de SNARK
Une solution d'identité basé sur le zero knowledge proof
L'identité numérique à base de SNARK
Durant mes études, j'ai eu le plaisir de réaliser un projet de recherche sur l'identité numérique.
Mon ambition est de concevoir un modèle performant de wallet d'indentité basé sur la preuve à divulgation non-nulle.
Aujourd'hui, afin de prouver qui nous sommes en ligne nous somme forcés à nous soumettre à un compromis inacceptable : pour vérifier une seule information (comme notre majorité), nous devons exposer l'intégralité d'un document personnel (notre carte d'identité qui révèlera par la même occasion : notre adresse, notre date de naissance...). Dans un monde, où les leaks d'informations personnelles sont monnaie courante, il est évident qu'un nouveau système d'identité respectant la confidentitialité est nécesssaire.
C'est ici que peut naître une question identitaire : Et si nous pouvions prouver un fait, sans révéler aucune des données qui le justifient ?
C'est la promesse au cœur des zk-SNARKs (zero-knowledge Succinct Non-interactive ARguments of Knowledge). Il s'agit d'une des avancées cryptographiques les plus importantes de ces dernières années.
Dans cet article, je vous présente une solution d'identité numérique basée sur cette technologie. Mon objectif : vous montrer comment j'ai conçu un wallet C++, utilisant une signature ECDSA et le protocole Groth16, pour démontrer qu'une identité à la fois 100% vérifiable et 100% privée est désormais une réalité technique.
Le Constat : Une Identité Numérique Vulnérable
La situation actuelle de la gestion de l'identité est assez désuète. Les faits sont alarmants :
- Collecte excessive : 87% des applications collectent plus de données que ce qui est fonctionnellement nécessaire [CNIL 2023].
- Fuites systémiques : Plus de 4 milliards d'enregistrements d'identité sont compromis chaque année.
- Un coût exorbitant : Le coût moyen d'une fuite de données s'élève à 180 USD par enregistrement [IBM Security 2024].
La Problématique Centrale
Mon travail répond à une question simple mais cruciale :
Peut-on construire un système où un utilisateur prouve à un service qu'il possède un attribut (par exemple, "être résident français") sans lui révéler aucune information personnelle (comme son adresse exacte) au-delà de la validité de cette preuve ?
La réponse est oui.
La Solution : Le zk-SNARK
Un zk-SNARK est un protocole cryptographique qui permet à une partie (le Prouveur) de convaincre une autre partie (le Vérificateur) qu'une déclaration est vraie, sans rien révéler d'autre que la véracité de cette déclaration.
Il repose sur un triplet d'algorithmes : (Setup, Prove, Verify).

Les Trois Garanties Fondamentales
Un zk-SNARK robuste doit offrir trois propriétés essentielles :
- Complétude (Completeness) : Si ma déclaration est vraie, je peux toujours générer une preuve valide.
- Solidité (Soundness) : Si ma déclaration est fausse, il m'est calculatoirement impossible de générer une preuve qui semble valide.
- Zéro Connaissance (Zero-Knowledge) : Le vérificateur n'apprend strictement rien sur mes données privées (appelées le "witness" ou "témoin").
Concrètement : Avec un zk-SNARK, vous ne montrez plus jamais votre carte d'identité. Vous fournissez une petite preuve mathématique (quelques octets) qui atteste : "Je possède un document valide qui confirme que j'ai plus de 18 ans. Vous n'avez pas besoin de voir ce document, mais vous pouvez être mathématiquement certain que cette affirmation est vraie."
Architecture de la Solution
Pour construire ce système, j'ai choisi le protocole Groth16. C'est actuellement le meilleur compromis du marché en termes de performance : il produit des preuves très courtes et permet une vérification quasi-instantanée.
Mon implémentation, qui s'appuie sur la courbe BN128 et la fonction de hachage Poseidon (optimisée pour ces circuits), atteint des performances remarquables :
- Taille de la preuve : 128 octets
- Temps de vérification : Moins de 10 millisecondes
Bien que Groth16 nécessite une "phase de configuration de confiance" (Trusted Setup), cet obstacle historique est aujourd'hui géré de manière transparente et sécurisée via des cérémonies de Calcul Multipartite (MPC).
L'architecture se décompose en 5 couches logiques :
| Couche | Description | Primitives Clés |
|---|---|---|
| 5. Application | Identité Décentralisée, Authentification | Credentials Vérifiables |
| 4. Protocole SNARK | Génération et vérification de la preuve | Groth16, Pairings |
| 3. Circuits | Mise en équation du prédicat via R1CS | QAP (Quadratic Arithmetic Program) |
| 2. Primitives | Fonctions cryptographiques optimisées | Poseidon Hash, Arbres de Merkle |
| 1. Mathématiques | Fondations pour les preuves | Courbe BN128, Corps Fini Fp |
Au Cœur de la Technologie : Les Courbes Elliptiques
Pour que ce système fonctionne, il ne repose pas sur des nombres ordinaires, mais sur un concept mathématique puissant : les courbes elliptiques.
Le Terrain de Jeu Cryptographique
Une courbe elliptique (dans notre cas, BN128) est un ensemble de points qui satisfont une équation spécifique. Imaginez un plan graphique où seuls les points de cette courbe "existent" pour nos calculs.
Définition (simplifiée) : Les points sur la courbe suivent une équation de la forme :

L'intérêt de ces courbes est double :
-
Une "Addition" Spéciale : On peut "additionner" deux points de la courbe (P + Q) pour en obtenir un troisième (R). Cette opération est fondamentale. Elle est nommée la checksum, aujourd'hui c'est ici que les performances peuvent être influencés et possiblement permettre des calculs de l'identité encore plus rapidement.
-
Une Fonction à Sens Unique : C'est le pilier de la sécurité, connu sous le nom de Problème du Logarithme Discret (DLP) :
- Facile : Connaissant un nombre secret et un point , calculer (additionner P à lui-même fois) est très rapide.
- Impossible : Connaissant et , retrouver le nombre secret est calculatoirement infaisable.
Rôle dans les SNARKs : Cette "trappe" permet de masquer l'information. J'utilise mon secret (le witness, ) pour calculer un point public (), mais personne ne peut remonter de à . Les preuves SNARK sont elles-mêmes constituées de points sur ces courbes.
Conclusion : Reprendre le Contrôle
L'utilisation des zk-SNARKs n'est pas une simple amélioration technique. C'est une refonte fondamentale de notre approche de la confiance numérique.
En démontrant qu'il est possible de générer des preuves de 128 octets vérifiables en moins de 10 millisecondes, nous prouvons que cette technologie n'est plus un concept de laboratoire. C'est une solution pratique, performante et prête à être déployée.
Mon implémentation en C++ d'un wallet n'est qu'un point de départ.
Nous posons les bases d'un web où la confiance ne rime plus avec surveillance, mais avec la preuve mathématique. Un web où nous allons enfin, et vraiment, reprendre le contrôle de notre identité.