0ri0n

L'identité numérique à base de SNARK

Une solution d'identité basé sur le zero knowledge proof

identitécryptographie

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).

fonctionnement du zk-SNARK

Les Trois Garanties Fondamentales

Un zk-SNARK robuste doit offrir trois propriétés essentielles :

  1. Complétude (Completeness) : Si ma déclaration est vraie, je peux toujours générer une preuve valide.
  2. Solidité (Soundness) : Si ma déclaration est fausse, il m'est calculatoirement impossible de générer une preuve qui semble valide.
  3. 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 :

CoucheDescriptionPrimitives Clés
5. ApplicationIdentité Décentralisée, AuthentificationCredentials Vérifiables
4. Protocole SNARKGénération et vérification de la preuveGroth16, Pairings
3. CircuitsMise en équation du prédicat via R1CSQAP (Quadratic Arithmetic Program)
2. PrimitivesFonctions cryptographiques optimiséesPoseidon Hash, Arbres de Merkle
1. MathématiquesFondations pour les preuvesCourbe 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 (x,y)(x, y) 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 : y2=x3+ax+by^2 = x^3 + ax + b

courbes elliptiques

L'intérêt de ces courbes est double :

  1. 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.

  2. 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 kk et un point PP, calculer Q=kPQ = k \cdot P (additionner P à lui-même kk fois) est très rapide.
    • Impossible : Connaissant QQ et PP, retrouver le nombre secret kk est calculatoirement infaisable.

Rôle dans les SNARKs : Cette "trappe" permet de masquer l'information. J'utilise mon secret (le witness, kk) pour calculer un point public (QQ), mais personne ne peut remonter de QQ à kk. 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é.