Suffragium ex Machina
Quelle idée d’utiliser une machine pour remplacer une bête feuille et un crayon rouge à la portée de tout le monde pas vrai ? Et puis cette utilisation à tout prix de la technologie pour la technologie ça fait vraiment gadget non ? Pourquoi aller s’encombrer avec des machines qui coûtent cher, qui cassent tout le temps et qui ne sont manipulables que par quelques geeks ?
Oui oui oui ! Toutes ces questions sont pertinentes et super intéressantes, mais avant d’en débattre il sera utile d’en connaître un peu plus sur le vote électronique.
Clarifions tout de suite un peu de vocabulaire :
- vote électronique : outil intégrant des composants électroniques, permettant d’enregistrer un vote sur un support numérique ou d’automatiser le dépouillement d’un scrutin.
- vote vérifiable : système de vote offrant des garanties de confidentialité et de vérifiabilité sur le scrutin, généralement par l’utilisation de moyens cryptographiques.
En réalité, on peut faire du vote électronique de plein de manières possibles mais la qualité du scrutin dépend très fort de l’outil utilisé. Exemple : un Doodle est un système de vote électronique mais il n’offre que peu de garanties de sécurité, que ce soit en matière de confidentialité ou de correction du résultat. Attention cependant, il ne faut pas “utiliser un bazooka pour tuer des mouches”, un Doodle (ou un Framadate) c’est très bien pour trouver la prochaine date de la réunion “pizzas-retro gaming” entre potes. Par contre n’organisez pas vos prochaines élections nationales avec. À chaque type d’élection, un système de vote adapté. Je reviendrai sûrement dans un prochain post sur tout ce qui peut foirer avec des machines à voter si on n’est pas vigilant.
Confidentialité et Vérifiabilité
Donc le vote vérifiable, c’est s’assurer, aux moyens d’outils, par exemple, cryptographiques – j’y viens – que l’élection est de qualité. Cette qualité, on peut la juger selon les critères suivants (on peut en ajouter, ou parfois en supprimer, mais l’essentiel est ici) :
- Seules les personnes autorisées votent.
- Personne, sauf moi, ne sait (et ne saura jamais) comment j’ai voté — sauf dans des cas particuliers, comme un vote unanime.
- Je vote en toute liberté et je ne peux pas prouver à un tiers comment j’ai voté.
- Mon vote est enregistré sans être modifié.
- Les résultats annoncés reflètent correctement la volonté des électeurs.
La vérifiabilité d’une élection s’intéresse essentiellement aux critères 1-4-5, qui visent la correction du résultat: on souhaite concevoir des systèmes de vote qui permettent à n’importe qui de vérifier que les bonnes personnes sont élues.
Il y a, de prime abord, une difficulté intrinsèque à faire coexister dans un système de vote la vérifiabilité et la confidentialité. Pourquoi ? Parce que ces deux propriétés ont tendance à se contrecarrer quand on veut les mettre en oeuvre. Voici deux extrêmes pour l’illustrer.
D’un côté le vote à main levée. De l’autre le bulletin non identifiable déposé dans l’urne.
Pour le vote à main levée, la vérifiabilité est parfaite : chacun compte les votes de ses voisins. Mais la confidentialité est nulle, chacun voyant ce que les autres ont choisis.
Pour le bulletin dans l’urne, c’est l’inverse : confidentialité parfaite, par contre aucune vérifiabilité dès qu’on perd l’urne de vue à un moment: comment, dès lors que je quitte le bureau de vote, puis-je m’assurer que l’urne n’est pas substituée pour une autre, ou si les bulletins sont effectivement comptés pour annoncer le résultat?
Concilier les deux propriétés est donc tout l’art des bons systèmes de vote. Pour y arriver avec du vote papier et des urnes, cela consiste à avoir une quantité suffisante de personnes indépendantes qui vont surveiller les bureaux de vote, surveiller les urnes, effectuer et surveiller le dépouillement et le recomptage, mais aussi suivre toute une série de procédures précises pour sceller, desceller et ouvrir les urnes, enregistrer les électeurs, vérifier qu’un électeur n’introduit qu’un et un seul bulletin certifié dans l’urne, etc. etc. La vérification est donc déléguée à des observateurs qui, étape après étape, doivent garantir l’intégrité de l’urne. Et si une erreur a lieu lors d’une de ces étapes (l’urne est restée un moment accessible sans surveillance? les scellés posés pour le transport vers le bureau de décompte sont défectueux?), on ne sait essentiellement plus rien.
Au niveau du vote électronique et du vote vérifiable qui nous intéresse ici on va utiliser des outils mathématiques et informatiques.
Le Vote Vérifiable via la Cryptographie
On va se limiter dans ce post à un système de vote vérifiable qui a l’avantage d’être simple à expliquer. Ce système est semblable au système de vote Helios utilisé par l’association mondiale des cryptologues pour leurs élections internes, mais aussi par l’UCLouvain dans différentes élections internes.
Partons d’une élection très simple: il s’agit de voter pour ou contre l’abolition totale de la police Comic Sans MS… oui je sais c’est un débat brûlant mais c’est pour l’exemple ! Commençons par le bulletin de vote : il comprend juste une case à cocher ou non. Ce bulletin comprend donc une seule information à transmettre que l’on peut numériquement représenter par 0 (la case n’est pas cochée) ou 1 (la case est cochée).
Pour rendre ce bulletin confidentiel, il s’agit maintenant de le chiffrer. Là , plusieurs possibilités s’offrent à nous, mais le plus classique est de partir sur un chiffrement asymétrique de type ElGamal dont la clé publique est donnée aux électeurs et la clé privée est confiée aux personnes responsables du déchiffrement et du calcul des résultats. Voici par exemple un chiffrement ElGamal : la paire (37912427866290869158, 53278378620240792845) est un chiffré de 0 obtenu par l’algorithme ElGamal. Notons qu’il s’agit bien ici d’un exemple: la taille de la clé de sécurité est de 64 bits, ce qui est trop peu pour assurer une sécurité suffisante à l’heure actuelle. Pour une élection réelle, on utilisera une clé d’au moins 256 bits.
Durant l’élection, chaque électeur (préalablement authentifié) va produire son bulletin de vote chiffré et le publier sur des valves électroniques (en pratique un site web dupliqué sur des sites miroirs).
Aux yeux du public les votes correspondant à ce qui est affiché sur ces valves sont confidentiels, car la clé de déchiffrement est gardée secrète. La confidentialité repose aussi sur l’hypothèse que le chiffrement ElGamal est sûr.
L’élection est clôturée, il est l’heure de calculer le résultat. Comment faire? Une première possibilité consiste, pour ceux qui possèdent la clé de déchiffrement, à déchiffrer chaque vote un par un, puis à comptabiliser le résultat. Cela fonctionne, mais ce n’est pas souhaitable car alors le choix de chaque électeur serait dévoilé. Une idée plus ingénieuse est de déchiffrer seulement un bulletin de vote fictif, qui contiendrait le résultat de l’élection. La beauté du système de ElGamal est qu’il permet à tout le monde de calculer ce bulletin à partir des bulletins qui apparaissent sur les valves publiques. L’idée est “d’additionner” les bulletins entre eux. Je mets additionner entre guillemets car il s’agit d’une addition un peu différente de celle dont on a l’habitude. C’est en réalité un peu plus proche de l’addition d’heures sur une horloge (p.ex. 15h + 8h = 3h) mais franchement ce n’est pas très compliqué à calculer et c’est à la portée de tous (je mets les détails des calculs ici) . Le résultat que l’on obtient est le suivant : bulletin chiffré du résultat = (25235193997331996671, 40071011363907537135).
À présent on peut déchiffrer ce bulletin et l’on obtient 2. Deux voix contre et trois pour, Youhou, longue vie au Comic Sans MS!
Retour sur la vérifiabilité
Tout cela est bien joli mais examinons à nouveau les critères 1,4 et 5 de vérifiabilité :
1) Seules les personnes autorisées votent: je vois la liste des personnes ayant voté apparaître sur les valves et je peux, au besoin, leur demander si elles ont vraiment voté.
4) Mon vote est enregistré sans être modifié : je peux vérifier que le bulletin que j’ai préparé apparaît bien, sans avoir été modifié, sur les valves. Une question plus complexe se pose si je n’ai pas confiance en mon ordinateur, qui a préparé mon chiffré ElGamal: comment puis-je savoir que ce chiffré reflète bien mon intention de vote et que, quand j’ai décidé de voter “non”, mon ordinateur n’a pas produit un chiffré de “oui”? Ce problème peut être résolu de plusieurs manières, notamment à l’aide de ce qu’on appelle un Benaloh challenge, sur lequel nous reviendrons dans un autre post.
5) Les résultats annoncés reflètent correctement la volonté des électeurs. Je peux, comme n’importe qui, calculer le bulletin fictif contenant le résultat de l’élection, en suivant la procédure décrite plus haut: ce calcul me garantit que mon vote, comme celui des autres, est bien pris en compte. Cependant, il nous manque encore quelque chose, car qui me dit que le résultat annoncé est bien issu du déchiffrement du bulletin chiffré du résultat? Ce que les autorités doivent me fournir c’est une preuve que ce résultat provient bien de ce déchiffrement. Une manière de le faire est de fournir en plus du résultat, la valeur aléatoire qui est utilisée dans le bulletin chiffré du résultat. En l’occurrence cette valeur vaut 2823084749900311038 . Avec cette valeur et le résultat je peux recalculer le bulletin chiffré du résultat en appliquant l’algorithme de chiffrement ElGamal. Ces deux manières indépendantes de recalculer ce bulletin me garantissent la validité du résultat de l’élection.
Retour sur la confidentialité
On l’a vu le vote est chiffré sur les valves et donc confidentiel pour tous ceux qui ne connaissent pas la clé secrète de déchiffrement. Malheureusement ce n’est pas suffisant comme garantie pour deux raisons :
- Rien n’empèche celui qui possède la clé secrète de déchiffrer des bulletins individuels, cassant alors la confidentialité de l’électeur.
- Si jamais cette clé est perdue dans la nature, toute la confidentialité de l’élection menace de tomber.
À nouveau, la cryptographie apporte une solution élégante à ce problème avec ce que l’on nomme les systèmes de chiffrement à seuil. L’idée est que la clé de déchiffrement n’est connue de personne mais que chaque autorité possède un “morceau” de cette clé. Chacun peut alors déchiffrer partiellement le bulletin chiffré jusqu’à ce que celui-ci soit complètement déchiffré — la beauté du système étant que ces déchiffrements partiels n’érodent en rien la sécurité du système: seul l’usage du dernier morceau de clé révèle, d’un coup, le résultat. De cette manière personne n’a la capacité de déchiffrer un bulletin individuel et tous doivent se mettre d’accord pour ne déchiffrer que le bulletin qui contient le résultat. Il est tout naturel d’avoir des porteurs de clés ayant des intérêts divergents (pas tous issus du même parti par exemple) pour s’assurer de l’honnêteté d’une fraction d’entre eux.
Oufti voilà ! La description que nous venons de faire est très rudimentaire et est loin de résoudre tous les problèmes. Elle montre cependant comment la cryptographie peut permettre de réconcilier des contraintes de confidentialité et de vérifiabilité.
Il y aurait encore énormément de choses à dire sur le vote vérifiable et le vote électronique en général mais après ce premier (gros) aperçu, je réserve cela pour un(des) prochain(s) post(s) :-D.