tl;dr : Dans cet article, qui change un peu du PHP, nous allons voir comment l'on pourrait adresser la problématique du vote électronique avec ce qu'on appelle vulgairement “la blockchain”.
Disclaimer
Cet article n'est pas une usine à lien vers des projets trop cool pour jouer à l'apprenti trader, c'est même assez compliqué puisque les sources sont souvent rattachées à des projets. Je ne citerais donc explicitement que Bitcoin et Ethereum.
Cet article n'est également pas une réponse absolue et dogmatique pour le vote électronique.
Le débat “vote électronique blockchain” est en cours comme à chaque élection, profitons-en pour discuter un peu entre personnes doux rêveurs technophiles.
Le contexte
En 2018 j'ai essayé de mettre en place un projet d'entreprise baptisé “Le Petit Bloc”. Cette société avait comme baseline, dans la langue de Shakespeare de “build a decentralised, trustable and reliable world”. Oui, votre serviteur avait de l'ambition.
L'objectif était de se servir des technologies de décentralisation pour adresser certains problèmes. On allait donc piocher dans le panel de technologies pour essayer, pour faire simple, de faire mieux.
Dans ce contexte, nous nous sommes nécessairement intéressés à tout ce qu'on met dans “la blockchain” et avons creusé un certain nombre de sujets. Parmi ces sujets, celui du vote électronique et tout le monde pourra convenir que du point de vue technique, c'est quand même un sujet intéressant à creuser.
État des lieux
Ce que l'on appelle vulgairement, de mon point de vue, “la blockchain” est un savant mélange de différentes technologies :
- Un réseau pair à pair,
- Une preuve,
- De la cryptographie asymétrique,
- Une base de données décentralisée, notre blockchain.
Chacun des éléments est indépendant et on retrouve ces éléments technologiques dans différentes situations. Ce n'est que l'assemblage de tout ces éléments qui donne un protocole tel que Bitcoin.
La chronologie des événements clés de ce que l'on connait actuellement et sur lequel on aime tant débattre, à savoir l'unité de compte bitcoin et le protocole Bitcoin, est à peu près la suivante :
- 1971 : Richard Nixon met fin à la convertibilité du dollar. Un dollar n'est officiellement plus indexé sur son équivalent en or,
- 1982 : David Chaum commence à réfléchir à un système de paiements intraçable avec le premier dollar électronique. Il est à mon sens l'élément déclencheur de la suite de la chronologie,
- 1990 : David Chaum travaille sur l'e-cash et le système est testé dans certaines banques,
- 1990 : Sholom Rosen travaille sur un système de monnaie électronique qui sera breveté,
- 1992 : Tim May publie le Manifeste d'un crypto anarchiste issue du mouvement Cypherpunk dont l'un des pères spirituel est David Chaum,
- 1993 : Eric Hugues publie le Manifeste d'un cypherpunk,
- 1997 : Adam Back travail sur le HashCash au travers de la preuve de travail dans le but de lutter contre le spam,
- 1998 : Wei Dai publie “b-money, an anonymous, distributed electronic cash system” qui servira de base au protocole Bitcoin,
- 2000 : Freenet devient le premier réseau web distribué,
- 2005 : Nick Szabo propose Bit-Gold, prémice de Bitcoin, qui n'obtient pas le soutien nécessaire. La résolution du problème des généraux byzantins est mise en avant,
- 2008 : Satoshi Nakamoto publie “A peer to peer electronic cash system” qui servira de base au protocole Bitcoin,
- 2018 : Alexandre s'intéresse à “la blockchain” et propose d'adresser le problème du vote électronique. (oh c'est bon, on rigole 😝)
Depuis 2008, des dizaines d'évolutions, de remises en question, mais toujours ces mêmes fondamentaux.
Qu'est-ce que c'est “un vote” ?
Ma compréhension du vote est la suivante : je dois parfois donner mon avis sur l'évolution de la société. Pour donner mon avis, on me propose de me déplacer dans un bureau de vote, de choisir une réponse dans un champ de possibilités et de donner ma réponse. Je signe alors une feuille permettant de déclarer mon vote en présentant ma carte d’électeur et une pièce d'identité. Je peux ne pas avoir ma carte d’électeur, mais je dois être inscrit sur la liste du bureau du vote. Les réponses sont comptabilisées par plusieurs personnes afin d'éviter la fraude et la somme de toutes ces actions permet d'acter une décision collective.
Il y a quatre étapes importantes :
- Je suis un électeur et dois prouver mon droit de vote,
- Je signe une feuille d’émargement permettant de ne voter qu'une fois pour un même scrutin,
- Mon vote est anonyme,
- Un système antifraude humain est présent.
Ce système de vote est à priori fiable dans un état qui fonctionne correctement, mais ne l'est pas nécessairement dans un pays qui n'est pas stable.
Une machine de vote électronique
Le vote électronique est déjà en place dans notre pays, en 2014 64 communes ont permis le vote électronique. Le vote électronique se fait au travers d'une machine, programmée par une société, des composants eux-mêmes programmable, possédant du code informatique, sans aucune possibilité de vérification pour les votants et c'est la somme de tous ces éléments qui amène à dire à bon nombre d'informaticiens que ce n'est certainement pas la bonne solution.
Dès lors, est-ce que l'on peut faire mieux ?
Du côté de la blockchain
Il n'existe aucun protocole de vote électronique basé sur une blockchain .
Par extension, les initiatives dApp ne remplissent pas nos critères, car elles sont pseudonymes et traçables.
Faisons tout de même le parallèle avec nos quatre étapes.
Pour échanger une unité de compte sur un protocole, vous devez posséder une adresse unique reliée à un portefeuille. Dans certains cas, une adresse peut être dérivée, un peu comme les différents espaces pour ranger vos cartes bancaires, pièces et billets.
L'adresse est numérique, mais le portefeuille peut être physique (un bout de papier) ou numérique, hardware ou software.
Une transaction correspond à une adresse, on n’accède pas à une adresse sans connaitre la clé privée permettant de la déverrouiller.
Le protocole Bitcoin n'est pas anonyme, il est pseudonyme. Une adresse sur le réseau ne permet pas de savoir quel humain effectue une transaction, mais la totalité des échanges est vérifiable. Dès lors, lorsque l'on arrive dans un système faisant un lien entre adresse Bitcoin et une personne physique (via un KYC – Know your customer), on est capable d'identifier toutes les transactions. C'est d'ailleurs comme cela qu'on retrace certains piratages/rançons.
Il existe des protocoles anonymes, mais très peu le sont réellement. Différents exemples simple de faux anonymat :
- une transaction dont on ne connait pas le montant, mais pour laquelle on connait l'émetteur et le récepteur est-elle anonyme ?
- une transaction dont on ne connait ni l’émetteur ni le récepteur, mais dont le montant est connu via le registre est-elle anonyme ? (pour faire simple, si une adresse fait -153 et qu'une autre fait +153 c'est qu'on a probablement identifié l'échange)
- une transaction anonyme sur un réseau comptant très peu de nœuds de vérification et donc facilement contrôlable est-elle réellement anonyme ?
Lors d'un échange entre deux adresses de manière anonyme, on fait intervenir un algorithme qui a pour but d'offusquer une partie ou la totalité de la transaction afin de la rendre intracable. On appelle ça un mixing. Cela sous-entend donc que l'on est technologiquement capable de rendre anonyme le contenu d'une transaction, sur un registre public. Si c'est un problème dans le cas d'un échange monétaire, ça ne l'est pas nécessairement dans le cas du vote.
La blockchain est un registre distribué : un livre de comptes. Imaginez un livre dont chacune des pages correspond à un bloc. Vous êtes libres de mettre un nombre de transactions compris entre 0 et le nombre de lignes disponible sur chacune des pages. L'ordre des pages vous permet de remonter l'historique. Si vous n'êtes pas disponible, vous pouvez donner votre livre à quelqu'un d'autre. Si vous voulez vérifier qu'aucune bêtise n'a été faite, vous pouvez repartir de la première page, etc.
Dans la version la plus simple, on retrouve un système de blocs puis de transactions au travers d'un arbre de merkle et pour vulgariser, quitte à prendre des raccourcis, c'est la chaine ayant le plus de blocs valides qui l'emporte.
Il existe des alternatives par exemple au travers des graphs orientés acycliques ou encore des “sidechains”. Certains protocoles intègrent également des blocs “snapshots” permettant de rendre le calcul de l'intégrité de la chaine optionnelle.
On identifie également des niveaux “technologiques” autour de ces chaines. On parle alors de Layers. Bitcoin est une chaine de niveau 1 la ou Ethereum est une chaine de niveau 2, car possédant une machine virtuelle permettant d'effectuer des calculs. Il existe également le niveau 3 dont l'objectif est l’interopérabilité entre différentes chaines.
A noter que si Bitcoin est bien une chaine de niveau 1, il existe déjà des surcouches de niveau supérieur compatibles avec le protocole de niveau 1.
L'un des arguments massue des défenseurs du vote électronique en version blockchain est la transparence. On ne peut que leur donner raison puisque le code de beaucoup de protocoles de monnaie électronique est ouvert et auditable. On peut également démarrer un nœud sur le réseau et vérifier l'intégralité des transactions afin de détecter une potentielle fraude.
Malheureusement, rien n'oblige à mettre en place cette transparence. C'est d'ailleurs pour cette raison que du point de vue technique, une blockchain privée n'est qu'une base de données décentralisée contrôlée, donc potentiellement modifiable, donc sans aucun intérêt.
Vient ensuite la preuve. Le protocole Bitcoin utilise la preuve de travail impliquant une dépense énergétique conséquente en échange de la validation d'un lot de transactions.
D'autres protocoles utilisent d'autres types de preuves. On retrouve par exemple la preuve d'enjeu (Proof Of Stake) qui consiste à mettre en gage un montant conséquent qui incite fortement à ne pas valider de fausses transactions au risque de perdre gros. Problème, ceux qui ont le plus de moyens contrôlent potentiellement le système.
Certaines preuves sont beaucoup plus folkloriques comme la preuve d'espace qui repose sur le coût de stockage et la capacité à acheter de l'espace disque. Je ne dis personnellement pas bravo.
Derrière une preuve, il y a une motivation à maintenir le réseau dans un état fonctionnel. Dans les systèmes actuels, cette motivation est purement financière.
Il existe des systèmes pour contrer des attaques ayant pour but de changer le registre, des systèmes pour contrer des “super calculateurs” mais le système anti-fraude repose également sur un consensus. Il peut donc y avoir des divergences d'opinions et donc des “forks”.
Mon vote électronique
C'est le moment de l'article où je dis que je n'ai malheureusement pas toutes les solutions. Et oui.
Créer une adresse numérique, pouvoir la récupérer en cas de perte c'est quelque chose de très bien, mais ça ne permet pas de gérer les personnes qui n'ont pas accès ou ne peuvent pas accéder à un ordinateur.
On pourrait imprimer des adresses, les papers wallets existent et il suffirait alors de scanner le code pour authentifier la personne, mais de la même façon qu'une carte d’électeur est doublée d'une carte d'identité, il faudrait que le paper wallet soit adossé à un autre document.
Quelle que soit l'option choisie, on arrive dans un problème inhérent à notre système que je résume sous la thématique suivante : la gestion de l'identité (numérique).
Ce problème doit d'abord être adressé. Tant qu'il ne le sera pas, on ne tient à mon sens, pas une solution pour du vote électronique et une double authentification (avec un email/sms par exemple) ne me parait personnellement pas suffisante. On le constate déjà sur des applications web.
Alors oui, nous pourrions continuer de demander aux électeurs de se déplacer mais l'un des éléments du débat en faveur du vote electronique est justement la lutte contre l'abstentionnisme.
Si on devait me donner carte blanche à ce niveau, j'irais personnellement transposer le protocole Macaroon sur des technologies acycliques pour aller adresser d'autres problèmes au passage, mais ce n'est pas le sujet.
Lorsque l'on vote, on signe une feuille. Je n'ai pas envie de changer cette règle. Pour cette raison, je pense que l'on doit utiliser non pas une chaine, mais deux chaines (via les sidechains ou les layers) et cette première chaine doit être pseudonyme afin d'être vérifiable.
Cette première chaine ne doit stocker que deux informations, la personne qui vote et le scrutin correspondant. Cette chaine est alors une transposition exacte de notre carte d’électeur et du coup de tampon associé ainsi que de la signature sur le registre. Si on regarde une carte d’électeur ou que l'on analyse tous les registres de votes, on connait au minimum le nombre de fois ou l'on a voté. Est-ce que c'est un problème ? Probablement pas et si ça devenait un problème, il suffirait alors de créer des chaines différentes pour chaque scrutin.
Cette intention de vote permet de valider le contenu du vote. Cela sous-entend que dans le cas où un vote frauduleux passerait dans le système, on pourrait l'invalider a posteriori et le décompter. De la même façon, si quelqu'un venait à voter pour quelqu'un d'autre, on pourrait tracer cette information. Les personnes qui ne veulent pas voter pourraient s'assurer qu'aucun vote contenant leur adresse n'est présent d'une manière beaucoup plus simple que d'arriver en bureau de vote et d'exiger de voir si l'on est présent ou non sur le carnet de signatures.
Tout ça n'est finalement qu'une transposition de ce que l'on fait déjà au travers de certains protocoles dits anonymes.
Ça se complique un peu plus. Comme je l'ai dit, nous aurions deux chaines. La première chaine correspond à l'intention de votes et la seconde chaine contient le vote par lui-même.
Il ne doit pas être possible aux nœuds de validation du contenu du vote de remonter vers les nœuds de validation de l'intention de vote et le protocole ne doit que donner un go/no go pour accéder de la première à la seconde chaine. On a donc bien deux protocoles différents.
Concernant le décompte, nous pouvons nous tourner vers un protocole complexe basé sur un échange de clés. Au moment du vote, le contenu serait chiffré et ne pourrait être vérifié que par la clé du candidat correspondant. Chaque vote serait analysé tour à tour et le compteur mis à jour en conséquence. Ces clés pourraient être stockées à différents endroits : les partis politiques pourraient ne compter que leurs propres voix là ou d'autres comme le gouvernement pourraient compter la totalité des voix. On pourrait faire la somme des comptes pour chacun des partis pour ensuite la comparer au nombre de votants (en incluant un noeud pour le vote blanc).
Il y a donc plusieurs solutions. Reste à les implémenter et pourquoi pas, les voter.
On continue donc d'utiliser la base de nos protocoles dits anonymes et on rajoute quelque chose qui ressemble fortement à un échange PGP : le Verifiable Secret Sharing, composant indispensable des systèmes E2E.
Nous l'avons vu dans les postulats du vote anonyme, il nous faut un nombre de nœuds importants afin de pouvoir détecter une fraude locale. Il nous faut également un code source accessible et auditable.
Quid de la nature de la chaine ? Publique, privée ou sous consortium ? Une chaine privée n'a aucun sens, une chaine publique est un idéal, une chaine sous consortium pourrait être justifiable sous condition d'un code source accessible et auditable, mais surtout d'un compte rendu de l'état de chacun des noeuds ainsi que du registre par des tiers.
À mon sens, les différents organes du gouvernement doivent bien entendu posséder des noeuds de validation, mais aussi les différents partis politiques et la presse. On pourrait même imaginer des nœuds de validation au-dessus du pays afin de valider un résultat définitif. Le système antifraude commencerait alors à se construire naturellement, car si quelqu'un triche, il pourrait être détecté. Dans le où différents acteurs se mettraient d'accord pour tricher, on pourrait appeler les noeuds supérieurs qui pourraient alors déclarer une fraude massive et invalider une élection. Une fraude massive décrédibiliserait la totalité du scrutin, des participants et pourrait avoir des répercutions sur les notes de fiabilités des pays et donc leur capacité d'endettement sans oublier l'indice même de confiance des votants réduisant l'envie de jouer avec le feu.
Malheureusement, cela fait beaucoup de “pourrait” et ne règle pas de manière technologique le problème des généraux byzantins. Quel est le couperet qui empêcherait la fraude ? Introduire une motivation monétaire dans un état qui maîtrise ses flux financiers ? Impossible. Quelque chose de “plus simple” comme l'annulation de la candidature d'un élu fraudeur ? Il faudrait certainement modifier les lois. Je pense que nous sommes tout simplement coincés ou que nous devons accepter que la résolution du problème fraude doit passer par l'humain et donc envisager que cela ne puisse pas aboutir.
La motivation ne peut qu'être la satisfaction d'un état fonctionnel et ça, c'est à priori une notion très personnelle. Tant que tout va bien, pourquoi pas, mais dès que l'on se trouve dans un état qui ne va pas bien politiquement ? Après tout, on trouve tout un lot de mauvaises personnes qui sont très satisfaites d'un état qui ne fait que servir leurs intérêts et la définition d'un état fonctionnel dans un même pays n'est pas la même suivant les personnes.
Conclusion
Comme vous pouvez le voir, ma vision technique du vote électronique ne repose absolument pas sur quelque chose de révolutionnaire. De la même façon que “la blockchain” n'est qu'un assemblage de différentes technologies, je ne propose que d'aller chercher des technologies déjà existantes et d'essayer de les mettre en oeuvre côte à côte pour apporter une possible réponse à la question du vote électronique.
Malgré tout, mon analyse personnelle m'amène à penser que cela n'est pas possible tant que l'on n'arrive pas à authentifier numériquement chaque votant et à garantir à tous la possibilité de voter.
Enfin, la mise en oeuvre. Dans le cas où une personne serait suffisamment brillante pour implémenter ce que je propose et adresser tous les problèmes que je n'ai pas encore imaginés, cette solution de vote électronique impliquerait une remise en question du système dans son ensemble et en est-il capable ?
Pour ces raisons je conclurais donc : ne faisons pas de vote électronique et commençons par faire en sorte de rétablir le dialogue et changer les modes de scrutins afin de ne plus voter contre mais pour. Travaillons pour la confiance dans le système, car en l'état, vote électronique ou pas, technologies ou pas, blockchain ou pas, rien ne va.
Bref,
“Tout cramer pour repartir sur des bases saines” ©Leodagan 2022.