Système de Vote électronique

Le premier projet de la fédération doit être utile directement à celle-ci. Le système de vote est indispensable pour permettre à l’association de fonctionner sans avoir à organiser des rencontres régulièrement. Ce système doit être le plus sûr possible et doit pouvoir être hébergé chez chacun des participants.

Benoit Peccate & François Barre

1 Introduction.

1.1 Formalisation.

1.2 Plusieurs paramètres définissent les systèmes de vote :

  1. N le nombre de personnes devant coopérer pour falsifier un vote
  2. M le nombre de personnes devant coopérer pour savoir qui vote quoi
  3. L le nombre de personnes devant coopérer pour annuler un vote
Les personnes considérées doivent être à chaque fois un administrateur d'une base différente des bases de données du vote. L, M, N définissent la sécurité (ou plutôt la confiance accordée) du système de vote. Le système présenté ci-dessous explique comment mettre ceci en pratique, il permet de mettre en évidence ces parametres et de les modifier.

!!! Nous cherchons des systèmes avec L, M et N infinis !!!

1.3 Objectifs.

Un système de vote électronique doit être en mesure de fournir les garanties suivantes :

  1. Anonymat du vote. Aucune relation ne peut être établie entre l'identité d'un votant et le contenu de son bulletin.
  2. Unicité du vote. Un inscrit ne peut voter qu'une et une seule fois.
  3. Garantie de l'identité du votant.
  4. Contenu de l'urne non modifiable.

1.4 Contraintes.

Le système de vote est hébergé sur des machines dont les adinistrateurs sont partie prenante dans le vote. Nous n'avons pas trouvé mieux que M = 2 et L = un nombre entre 1 et N.

2 Architecture.

  1. 1 serveur sert d'anonymiseur et sert à délivrer des droits de vote
  2. N + L serveurs distincts du premier servent à voter. Tous les serveurs doivent avoir des administrateurs distincts. Nous supposons ici que les différents serveurs sont bien sécurisés et que seuls les administrateurs peuvent y lire des données privées.

2.1 Le serveur de droit de vote.

Le serveur de droit connaît le nom de chaque votant ainsi qu'un système sécurisé pour qu'ils s'authentifient (mail avec cryptage gpg, passerelle https ...)

Avant chaque vote, chacun doit avoir donné d'avance au serveur de droit au moins une clé publique à usage unique pour permettre un vote sans délai, cette clé devra être recréée après chaque vote.

Après chaque vote, le serveur de droit avertit par mail tout le monde et leur demande de recréer leur identifiant à usage unique. Cet identifiant est constitué d'une clé publique et d'une clé privée. La clé publique est communiquée à ce serveur par le système d'authentification connu.

Notons qu'il est possible de stocker d'avance plusieurs clés à usage unique sur ce serveur pour éviter d'avoir à en recréer à chaque vote.

Au début de chaque vote, ce serveur peut diffuser la proposition soumise au vote. Il diffuse aussi (publiquement) la liste des clés publiques uniques aux serveurs de vote.

2.2 Les serveurs de vote.

Ces serveurs disposent de la liste des clés publiques grâce au serveur de droit de vote. Ils connaissent le nombre de votants grâce à une modification manuelle de la part de l'administrateur. Toute personne désirant voter doit utiliser un clé de cette liste pour s'authentifier. La liste des clés publiques ainsi que le nombre de votants est disponible publiquement sur ces serveurs.

Pour valider un vote, une personne doit voter en utilisant un moyen (mail, interface https ... ) une fois sur chaque serveur de vote. Les serveurs doivent alors vérifier qu'il a voté la même chose sur chacun des serveurs ou annuler le vote en cas d'erreur ou de temps limite écoulé.

Le cas d'erreur peut soit être pris en compte avec un protocole direct où le client attend la fin du traitement par l'ensemble des serveurs, soit par un mail global à l'ensemble des utilisateurs avec la clé publique de la personne pour laquelle le vote a échoué.

Le serveur stocke simplement sur une table les résultats et sur une autre la liste des ayant voté.

2.3 Le serveur anonymiseur.

Le serveur de droit de vote sert d'anonymiseur pour que les serveurs de vote ne puissent pas savoir d'où provient le message (et donc identifier qui a voté quoi). Cet anonymiseur est soit un proxy (pour une méthode https) soit un relai mail qui supprime les en-têtes.

2.4 Le client.

Le client commence par vérifier la liste des serveurs de vote disponible sur le serveur de droit. Il vérifie que cette liste est identique à celles que fournissent les serveurs de vote donnés. Cette vérification doit être faite au moment de la déclaration de l'ouverture du vote et non au moment du vote en lui-meme pour éviter d'être identifié par le serveur de vote comme étant la prochaine personne a voter.

Le client vote par une méthode choisie en se connectant au serveur de vote par l'intermédiaire de l'anonymiseur. Il répète cette opération autant de fois qu'il y a de serveurs de vote.

Selon la méthode choisie, le client doit soit attendre la réponse de chacun des serveurs, soit demander à l'utilisateur de vérifier qu'il n'a pas reçu d'email d'erreur.

Pour ne pas avoir à voter N fois, ceci peut etre automatisé :

  1. pour le mail simplement avec les CC
  2. pour la méthode https avec un petit script relativemnt simple

2.5 Les résultats du vote.

Le résultat du vote s'obtient par diffusion des bases de chaque serveur de vote vers chaque autre serveur de vote. Ici, il faut choisir les cas d'annulation :

  1. On annule dès qu'une base est différente d'une autre (L=1)
  2. On annule si L bases sont différentes des bases majoritaires
  3. On n'annule pas et on choisit la solution majoritaire

2.6 Validation.

Le système est valide car :

  1. Le vote est anonyme car les serveurs de vote ne connaissent que les clé publiques des votants et rien n'y est associé.
  2. L'IP associée à cette clé est inconnue grâce au service de l'anonymiseur.
  3. Le vote ne peut être ni annulé ni refait car chaque serveur contient la liste des ayant voté et interdit tout revote.
  4. Le vote ne peut pas etre modifié car il n'existe pas de relation dans la base entre le votant et son vote.
  5. N administrateurs de serveur de vote peuvent falsifier le vote en modifiant leur base de vote de concert.
  6. L'administrateur du serveur de droits ne peut falsifier ce vote car le serveur de droit n'intervient pas dans la partie vote.
  7. L'administrateur de l'anonymiseur ne peut falsifier le vote car les protocoles choisis sont des protocoles de cryptage à clé publique.
  8. 2 administrateurs de vote peuvent coopérer pour savoir qui a voté quoi si le premier est l'administrateur du serveur de droit (ou de l'anonymiseur) et le deuxième un administrateur d'une base de vote. Il suffit d'enregistrer l'état de la base entre chaque vote puis de faire correspondre une clé anonyme à un votant.
  9. Il est impossible de savoir qui a voté quoi pour des administrateurs quelconques car les clés sont anonymes et les seuls à pouvoir faire le lien avec une adresse IP ou un nom sont les administrateurs du serveur de droit et de l'anonymiseur.
  10. Selon la méthode de comptage choisie, Les administrateurs d'une base de vote peuvent faire annuler un vote en falsifiant leur base de vote.
  11. L'administrateur du serveur de droits ne peut faire annuler un vote, car rien ne lui permet de falsifier une base de vote.
  12. L'administrateur de l'anonymiseur peut tenter de faire annuler un vote en empêchant un votant de voter ou en ne redirigeant pas les requêtes vers tous les serveurs de vote. Ceci est évité par l'utilisateur qui doit vérifier (par la méthode de feedback proposée) que son vote a été validé. C'est a dire que les serveurs de vote ont tous reçu son vote et l'ont validé comme identique.
  13. Seuls les personnes inscrites peuvent voter car le serveur de vote les connaît et leur donne un droit de vote. Les serveurs de vote n'acceptent que le nombre de clés prédéfinies et communiquées par le serveur de droit. L'administrateur de droit ne peut ni modifier (le client vérifie la présence de sa clé), ni supprimer (idem), ni ajouter (les serveurs comptent les clés) des clés de vote.

2.7 Implémentation.

Dans tous les cas :

  1. Un script de génération de couple clé publique/clé privée pour le client
Cas du mail :
  1. 1 bot pour gérer les droits de vote
  2. 1 bot pour les serveurs de vote (qui doit être capable de se synchroniser avec d'autres bots et envoyer des mails au groupe de votants)
  3. 1 relai qui supprime les en-têtes.
  4. Chacun une clé gpg (ainsi que pour les bots)
Cas du web :
  1. 1 page pour gérer les droits de vote
  2. 1 page pour gérer le vote (et sa synchronisation)
  3. 1 interface client pour gérer le fait qu'on envoie les commandes à N serveurs de vote.
Notons que dans tous les cas il est possible de créer une application java qui rendrait tout cela plus automatique/user-frendly.

Je préfère le système utilisant la méthode web pour 3 raisons :

design: enez

Ce site respecte les normes suivantes :

Feuille CSS valide XHTML 1.0 Strict Valid