Crypto Vote
Ce billet prĂ©suppose que vous soyez Ă l'aise avec les concepts de cryptographie asymĂ©trique et de blokchain, si ce n'est pas le cas, je vous invite Ă lire les deux billets prĂ©cĂ©dents :Â
Cryptographie asymétrique La Blockchain
Depuis l'avĂšnement du numĂ©rique, le systĂšme de vote traditionnel est rĂ©guliĂšrement remis en question. En effet malgrĂ© son indubitable efficacitĂ©, le systĂšme des bulletins papiers a un coĂ»t : des bureaux de vote doivent ĂȘtre ouverts, des gens mobilisĂ©s, des montagnes de papier imprimĂ©es. Il a aussi des faiblesses de sĂ©curitĂ© : le bourrage d'urne, les manipulations au dĂ©comptage, l'impossibilitĂ© d'effectuer un recomptage sĂ»r.
Pour pallier Ă ces problĂšmes, certains Ătats ont tentĂ© de nouveaux systĂšmes dits "numĂ©riques" qui se basent principalement sur des ordinateurs "de confiance", sous forme de bornes, supposĂ©es sĂ©curisĂ©es et accessibles depuis des bureaux de vote. Historiquement, la plupart de ces tentatives sont basĂ©es sur des protocoles opaques, dont la sĂ©curitĂ© n'est garantie que par la parole du fabricant.Â
En plus d'ĂȘtre un risque supplĂ©mentaire pour la fraude massive, de telles implĂ©mentations ne rĂ©solvent par le problĂšme des coĂ»ts logistiques Ă chaque Ă©lections : il faut des gens pour surveiller les machines, pour les maintenir, et pour ouvrir les bureaux de vote. (D'ailleurs, une partie de ce personnel ne peut plus se composer de bĂ©nĂ©voles, ce qui pousse Ă se poser des questions sur le gain financier rĂ©el de tels dispositifs.)
Maintenant que nous avons vu quels étaient les défauts du scrutin papier et pourquoi le vote électronique souvent proposé n'était pas mieux, penchons-nous sur le systÚme proposé ici.
Cahier des charges d'un voteÂ
Chaque électeur doit pouvoir voter une et une seule fois
Le dĂ©compte doit ĂȘtre possible pour obtenir le rĂ©sultat du vote
Le vote de chaque Ă©lecteur doit ĂȘtre obfusquĂ© suffisamment pour qu'il ne puisse ĂȘtre inquiĂ©tĂ© de reprĂ©sailles.
(Optionnel) Le dĂ©pouillement ne ĂȘtre possible qu'aprĂšs la fin des votes.
Charges supplémentaires pour un "crypto-vote"
Chaque individu doit pouvoir vĂ©rifier le rĂ©sultat des Ă©lections, le jour mĂȘme comme dix ans plus tard
Chaque électeur doit pouvoir vérifier que son vote fait bien partie du total
Remarque et hypothĂšses
La mĂ©thode dĂ©taillĂ©e ci-dessous ne dĂ©crit pas chaque dĂ©tail de l'implĂ©mentation. Elle propose parfois des solutions mais n'exclut pas des alternatives diverses, plus adaptĂ©es Ă dâautres applications.
A titre d'exemple, on va ici supposer que chaque Ă©lecteur possĂšde un ordinateur sĂ©curisĂ© et une connexion Internet. Un tel modĂšle est idĂ©aliste dans un vote Ă l'Ă©chelle d'un pays, (mais pas pour un vote d'entreprise) mais gardez en tĂȘte qu'il peut ĂȘtre possible avec des moyens techniques appropriĂ©s de s'en approcher.
AprÚs ce long prélude, rentrons dans le vif du sujet. Pour cela nous allons procéder de l'implémentation basique à la plus complÚte.
L'implémentation simple sans anonymat
Nous voulons utiliser l'inviolabilité de la blockchain pour stocker et publier le vote des électeurs.
Pour mettre en place un vote, l'organisme organisateur doit établir une liste publique de l'ensemble des électeurs et de leurs clés publiques. Pour cela il peut simplement publier dans une blockchain (signant de son autorité) l'ajout ou la suppression d'un électeur, ou le changement de sa clé publique.
Il suffit ainsi par exemple de se rendre en mairie pour effectuer une de ces opérations, ou pour obtenir plus d'informations sur un électeur existant (afin d'éviter l'existence d'électeurs fantÎmes)
Lorsque l'organisme veut organiser un vote, il en publie les détails (signés) dans la blockchain.
Alors, lorsque le scrutin est ouvert, chaque électeur peut effectuer un vote, le signer avec sa clé privée et le publier. Si l'électeur est valide et qu'il n'a pas encore voté, son vote est accepté dans la blockchain.
à la fermeture du vote (publiée par l'organisme à l'heure prévue), tout le monde peut faire les comptes et le résultat est sans appel.
Jusque là , on a beaucoup écrit pour ne pas dire grand chose de nouveau : cette implémentation, quoique efficace, ne remplit pas du tout le cahier des charges que l'on s'était donné.
PremiĂšre approche d'obfuscation
Maintenant que l'on a décrit la "trame de base" du crypto-vote, intéressons-nous aux méthodes possibles pour permettre l'anonymat de l'électeur.
Il est a priori impossible d'avoir un systĂšme oĂč l'anonymat est total, tout en donnant la possibilitĂ© de prouver que quelqu'un a votĂ© et de d'ĂȘtre sĂ»r que son vote fait partit d'un total. (Si vous trouvez un moyen, envoyez-moi un message !)
Par contre il est possible d'offrir un anonymat partiel : l'idée est de mélanger le vote de plusieurs électeurs. (AprÚs tout, c'est ce que fait une urne !)
Imaginons que 50 Ă©lecteurs forment un groupe choisi alĂ©atoirement. Au sein de ce groupe, tout le monde partage son vote publiquement.Â
Une fois que tout le monde est Ă mĂȘme de faire un total, chacun construit un message contenant ce total, le signe, prouvant qu'il a vĂ©rifiĂ© que son vote est bien dedans, puis l'envoie aux 49 autres. Au final, le groupe finit par construire un message contenant le total des 50 voix accompagnĂ© de 50 signatures. Ce message peut alors ĂȘtre publiĂ©. Si aucun des 50 membres n'a dĂ©jĂ votĂ©, alors ce "dĂ©pouillage" est inclu dans la blockchain. Sinon, les Ă©lecteurs doivent recommencer jusqu'Ă ce que leur vote soit pris en compte (Il serait possible de dĂ©tecter ce genre d'individus malfaisants plus tĂŽt pour Ă©conomiser des calculs, mais comme ce genre d'attaque ne casse pas la sĂ©curitĂ©, nous ne l'aborderons pas ici.)
Remarque : Il est bien Ă©vident que chaque votant ne va pas sâamuser Ă faire ça Ă la main, il a pour ça un logiciel libre de confiance effectuant ses actions automatiquement !
Avec cette mĂ©thode, seuls 49 autres personnes au monde ont connaissance de votre vote. (On va voir quâon peut faire mieux) Pour se protĂ©ger de ces inconnus, chaque communication au sein du groupe d'effectue ainsi :
Alice veut envoyer son vote Ă Bob : Alice chiffre son vote avec la clĂ© publique de Bob, puis seulement signe ce message. Ainsi, Bob peut vĂ©rifier que le message provient dâAlice, et l'ouvrir. Seulement, Bob ne peut pas faire fuiter le vote avec la signature dâAlice (pour prouver ses dires) sans publier aussi sa clĂ© privĂ©e, information sensible et attachĂ© Ă lâidentitĂ© de Bob.
Dans cette méthode, on peut se demander pourquoi 50 ? Ce nombre est clairement arbitraire, mais permet d'avoir un nombre réduit de transactions (environ 50 par personne) tout en garantissant suffisamment de diversité pour obfusquer le vote de chacun. (En effet, si les 50 personnes votent toutes pareil, alors leurs votes ne sont plus anonymes, comme si un bureau de vote obtenait par hasard 100% de vote pour un candidat)
ProblÚme : Il est possible d'imaginer une société secrÚte constituée de 2% des électeurs. Si chacun de  ces membres envoyaient secrÚtement les votes des 49 autres à la société secrÚte, elle serait en mesure de casser l'anonymat de presque tous les électeurs.
Diviser pour mieux régner
La solution à ce problÚme est de réduire la taille des groupes à 2 !
C'est quoi cette histoire ?
Ăvidemment on ne va pas s'arrĂȘter lĂ , on va imbriquer le processus Ă©voquĂ© plus haut comme des poupĂ©es russes.
Un groupe de deux se forme, ils obtiennent un total de leur deux voix comme indiquĂ© prĂ©cĂ©demment. Ils choisissent alors un autre groupe de  deux et leur envoient ce total. L'autre groupe fait de mĂȘme. Il est alors possible pour chacun de calculer le total des 4, de le signer et de l'envoyer aux autres. Ainsi, le groupe de 4 a construit le total des 4 voix vĂ©rifiĂ© par tous. Ils n'ont plus qu'Ă trouver un autre groupe de 4 et recommencer la procĂ©dure !
Lorsqu'ils ont atteint une certaine taille, par exemple 1024, les participants ne cherchent pas d'autres groupe mais publient alors le total avec les 1024 signatures dans la blockchain.
De cette maniÚre, une seule personne au monde connaßt votre vote, deux si vous avez votez comme votre binÎme, 4  ou 8 si les probabilités ont une dent contre vous. (De cette maniÚre aucune société secrÚte n'aura votre vote).
Pour finir le cahier des charges, ajoutons qu'il est possible (de maniĂšre assez partielle) d'empĂȘcher le dĂ©pouillement public avant la fin du suffrage.
Pour cela il suffit que les 1024 personnes ne publient pas directement le total mais : le total juxtaposé à une "graine" (=un grand nombre aléatoire), le tout haché par une fonction à sens unique. Les 1024 signent ce hash, et c'est ce hash qui est inclu dans la blockchain.
Lorsque le scrutin est fermé, tout le monde publie le total et la graine associé à son bloc. (Chaque individu est en mesure de le faire, individuellement des 1023 autres), permettant au reste du monde de vérifier que ce total + graine correspond bien au hash publié précédemment.
La derniÚre implémentation proposée répond ainsi à l'ensemble du cahier des charges que l'on s'était posé. Il permet en théorie de garantir l'intégrité d'un vote, le tout pour une infrastructure quasi inexistante.
Limites
Comme d'habitude, il est important de s'intéresser aux faiblesses du systÚme que l'on propose.
PremiÚrement, notre protocole se base sur la cryptographie asymétrique et sur la blockchain, il a donc les éventuelles faiblesses associées. Mais comme nous l'avons discuté, ces faiblesses sont quasi-inexistantes.
Dans le cas de notre implémentation, on introduit deux nouveaux vecteurs d'attaque :
1. La clé privée de l'organisme devient une donnée trÚs sensible, toutefois on peut construire un "édifice de clés" avec plusieurs clés certifiées et une hiérarchie entre elles permettant de gérer d'éventuelles fuites.
Un "tricheur" appartenant à cet organisme pourrait abuser de son pouvoir pour créer des comptes fantÎmes lui permettant de voter plusieurs fois, il est donc nécessaire qu'il y ai sur la liste des votant une transparence suffisante pour éviter de genre d'attaque.
2. Enfin, en supprimant l'environnement contrÎlé qu'est l'isoloir, on permet à des individus d'en contraindre d'autres à "voter devant eux", créant un possible marché parallÚle des voix. Cette possibilité est un vrai problÚme pour une implémentation à grande échelle, trois solutions me semblent alors envisageables :
1. Restaurer l'environnement contrÎlé en permettant par exemple de voter avec son smartphone uniquement depuis un lieu sécurisé.
2. Donner la mission aux forces de l'ordre de traquer ce genre de pratiques en les rendant illégales.
3. Trouver un moyen technique élégant permettant de garantir que seul la personne qui vote est en mesure de comprendre pour qui elle a voté.
















