Signature aveugle : comment nous protégeons le secret du vote | METIS Italia Aller au contenu

Sécurité du vote

La signature aveugle : le secret du vote garanti par les mathématiques

Une élection en ligne doit concilier trois exigences qui semblent contradictoires : seuls les ayants droit votent, chacun une seule fois, et personne ne peut savoir ce que chacun a voté. Avec la signature aveugle, le système vérifie le droit de vote et accepte le bulletin sans jamais pouvoir relier les deux. Cette page explique comment, d'abord en mots simples, puis dans le détail technique.

L'idée dans une enveloppe

Imaginez que vous glissiez votre bulletin, déjà rempli, dans une enveloppe doublée de papier carbone et que vous vous présentiez au bureau de vote.

L'assesseur contrôle votre pièce d'identité, vérifie que vous êtes sur la liste et que vous n'avez pas encore voté, puis signe sur l'enveloppe fermée. Grâce au papier carbone, la signature passe sur le bulletin, mais l'assesseur ne l'a jamais vu.

Vous vous éloignez, retirez l'enveloppe et glissez le bulletin signé dans l'urne, avec ceux de tous les autres. Celui qui ouvre l'urne voit que la signature est authentique, donc que le bulletin est valable, mais ne peut pas savoir de quelle enveloppe il provient.

La signature aveugle fait la même chose avec les mathématiques : l'« enveloppe » est un nombre aléatoire que seul votre navigateur connaît.

Le vote étape par étape

  1. Ouvrez votre lien personnel

    Le lien reçu par e-mail n'est utilisable qu'une fois et uniquement pour ce vote. La page charge la clé publique du vote : chaque vote a la sienne.

  2. Choisissez et confirmez

    Vous sélectionnez les candidats et confirmez le récapitulatif. Jusqu'ici, rien n'a été envoyé.

  3. Le navigateur prépare le jeton

    Votre navigateur génère un jeton aléatoire et le « masque » en le multipliant par un nombre secret qui reste uniquement sur votre appareil.

  4. Première requête : la signature

    Le navigateur envoie le jeton masqué avec votre lien personnel. Le serveur vérifie que le vote est ouvert et que vous n'avez pas encore voté, note « a voté » avec le jour seulement et signe le jeton masqué. Il ne reçoit pas vos choix et ne voit pas le jeton.

  5. Le navigateur retire le masque

    Grâce à son nombre secret, le navigateur obtient la signature valide du vrai jeton et la vérifie lui-même : si le serveur avait mal signé, le vote s'arrêterait là.

  6. Attente aléatoire

    Le navigateur attend entre 5 et 20 secondes, durée tirée au hasard, pour séparer les deux requêtes dans le temps.

  7. Seconde requête : le bulletin

    Le navigateur envoie le jeton, la signature et vos choix par une requête anonyme : ni lien personnel, ni cookie, ni session. Le serveur vérifie la signature, contrôle que le jeton n'a pas déjà servi et dépose le bulletin dans l'urne.

  8. Votre reçu

    Vous recevez un code de reçu, affiché à vous seul, et voyez les deux lignes qui viennent d'être enregistrées, relues dans la base de données : le registre avec votre nom sans vos choix, le bulletin avec vos choix sans votre nom.

Qui sait quoi

Voici ce que le serveur voit dans chacune des deux requêtes. Aucune ne contient à la fois qui vous êtes et ce que vous avez voté.

Première requête (signature) Seconde requête (bulletin)
Qui vous êtes oui, par le lien personnel non
Le jeton non, seulement masqué oui
Vos choix non oui
Cookies et session oui non

La valeur masquée et la signature de la première requête restent à côté de votre nom uniquement pour pouvoir terminer un vote interrompu : sans le nombre secret de votre navigateur, elles ne mènent ni au jeton ni au bulletin.

Les garanties

Un vote par électeur

Le serveur ne signe qu'une fois par lien personnel et chaque jeton signé ne vaut que pour un seul bulletin.

Aucun faux bulletin

Un bulletin sans signature valide, ou avec un jeton d'un autre vote, est refusé.

Lien impossible

Le serveur ne voit jamais le jeton à côté de votre nom : le secret ne dépend pas d'une promesse de ne pas enregistrer quelque chose.

Intégrité des résultats

À la clôture, le système vérifie qu'il y a autant de bulletins que de jetons utilisés, jamais plus que de votants, et que les totaux correspondent à l'urne.

Ce que vous pouvez vérifier vous-même

  • Juste après le vote, vous voyez les lignes réellement enregistrées : aucun choix à côté de votre nom, aucun nom sur le bulletin.
  • Avec le code de reçu, vous vérifiez sur la page des résultats que votre bulletin a été compté. En règle générale (secret renforcé), le code confirme seulement que le bulletin est présent, sans afficher vos choix : personne ne peut ainsi vous obliger à prouver ce que vous avez voté. L'organisateur peut en revanche choisir le vote vérifiable : le code affiche alors aussi vos choix et doit rester confidentiel.
  • À la clôture, s'il y a au moins 5 bulletins, l'urne est publique et sans noms : vous pouvez recompter tous les bulletins et les comparer au classement.
  • Le code du navigateur qui masque le jeton est public et lisible (js/AN05_blind.js) : un expert de confiance peut le contrôler.

Voir aussi : ce que nous enregistrons, champ par champ →

Détails pour experts

  • Signature RSA 2048 bits avec une clé dédiée à chaque vote, schéma RSA-FDH : le jeton de 32 octets aléatoires est étendu par MGF1-SHA256 à la longueur du module, avec un contexte qui le lie au vote.
  • Masquage dans le navigateur en arithmétique BigInt : b = m · r^e mod n, avec r aléatoire et premier avec n ; le navigateur retire le masque avec r^-1 et vérifie s^e mod n = m avant d'envoyer le bulletin.
  • La clé privée de chaque vote est stockée chiffrée (AES-256) avec une phrase secrète qui ne se trouve pas dans la base de données : qui ne lit que la base de données ne peut pas signer de jetons.
  • Le serveur ne signe que des valeurs ayant exactement la longueur du module et inférieures au module ; les jetons utilisés sont conservés sous forme d'empreinte SHA-256, sans date ni référence à l'électeur.
  • La requête du bulletin est envoyée sans identifiants (ni cookie, ni en-tête de provenance) et le point d'accès n'ouvre aucune session.
  • Reprise : jusqu'au dépôt, le jeton, le masque et la signature restent uniquement dans le navigateur de l'électeur ; si la page se ferme, rouvrir le lien depuis le même appareil termine le vote avec le même reçu.

Les limites, dites clairement

Adresse internet
Nous ne l'enregistrons pas dans nos tables, mais les journaux techniques de l'hébergeur la conservent. Une personne qui voterait depuis le même réseau que celui de la signature laisserait deux requêtes venant de la même adresse.
Proximité dans le temps
La signature et le bulletin arrivent à quelques secondes d'intervalle. L'attente aléatoire atténue cet effet, surtout quand beaucoup de personnes votent en même temps.
Votre appareil
Si l'ordinateur ou le téléphone de l'électeur est compromis par un logiciel malveillant, aucun système de vote en ligne ne peut protéger ce qui se passe sur cet appareil.
La liste des électeurs
C'est l'organisateur qui décide qui peut voter : le nombre d'électeurs et de votants est publié dans les résultats, pour que chacun puisse le contrôler.
Votes non terminés
Si un électeur ferme la page après la signature et ne la rouvre jamais depuis le même appareil, son droit de vote est considéré comme utilisé mais le bulletin n'arrive pas. Les résultats le signalent comme « vote non terminé ».

Questions fréquentes sur la signature aveugle

Dois-je faire quelque chose de particulier pour voter ?

Non. Vous choisissez, confirmez et attendez quelques secondes pendant le dépôt du bulletin : le navigateur s'occupe de tout le reste.

Que se passe-t-il si je ferme la page avant le reçu ?

Rouvrez votre lien personnel depuis le même appareil : le vote se termine tout seul, avec le même reçu. Depuis un autre appareil, ce n'est pas possible, car le nombre secret est resté sur le premier.

Le code de reçu révèle-t-il mon vote ?

En règle générale, non : l'urne ne contient que son empreinte et la vérification répond seulement « bulletin présent et compté ». Ce n'est que si l'organisateur a choisi le vote vérifiable (c'est indiqué sur le bulletin) que le code affiche vos choix à quiconque le saisit : dans ce cas, gardez-le pour vous.

Tous les votes utilisent-ils la signature aveugle ?

Oui, tous ceux créés après son introduction. Les votes antérieurs conservent le système en vigueur lors de leur création, qui sépare de toute façon noms et choix dans les données enregistrées.

Essayez-la lors de votre prochain vote