Réflexion : concept de système de vote en P2P


Flattr this

Salux !

En tant que gros geek velu pirate, je me suis amusé (chacun occupe ses vacances comme il peut) à élaborer un système de vote électronique, qui soit transparent et respecte l’anonymat, tout en empêchant la fraude. Un vaste programme donc, je poste ici le résultat de ma réflexion, afin d’avoir des avis extérieurs pour l’améliorer si nécessaire.

À qui se destine ce logiciel ?

Je l’ai dit et je le redis ici, j’ai toujours exprimé de grandes réserves sur le vote électronique. Même si je pense avoir résolu les problèmes d’opacité et d’anonymat, le bulletin papier restera toujours le moyen le plus universel.

Pour un usage associatif, surtout dans un cadre comme celui du Parti Pirate où les membres sont tous plus ou moins sensibilisés aux problématiques techniques, le système que je propose ici peut être une solution. Dans le cadre d’un vote plus large, où toute une population est amenée à s’exprimer, le papier reste accessible à n’importe qui puisqu’en tant qu’objet matériel il est facile à observer et contrôler si fraude il y a eu. Nul besoin de connaissances informatiques pour cela.

La solution que je propose est donc certes imparfaite, mais elle vient combler un vide et je pense qu’elle peut trouver rapidement des applications.

Objectifs

Afin d’en omettre aucune et de les expliciter dès le départ, voici les contraintes à respecter :

  1. Le système doit être ouvert & documenté
  2. Un annuaire contrôle l’accès au scrutin
  3. Les bulletins doivent être anonymes
  4. Chaque votant doit pouvoir accéder à son bulletin et le vérifier
  5. Chaque votant ne peut déposer qu’un seul bulletin pour une question
  6. L’annuaire ne doit pas avoir les informations nécessaires pour lier un bulletin au votant
  7. Un votant doit être capable de contester son vote si falsifié

Système distribué

Premier point et le plus important : il faut éclater la structure technique en un système décentralisé pour assurer la 6ème contrainte : l’annuaire sera l’un des seuls points centraux et il ne doit pas voir circuler les informations de vote ; auquel cas s’il est compromis tous les bulletins deviendraient publics.

Le processus de vote est relativement complexe et met en œuvre de nombreux intervenants ; chacun possède un rôle très précis et encadré pour limiter les possibilités de frauder ou de révéler un bulletin.

La solution technique prendrait la forme d’un logiciel que chacun télécharge et installe sur son poste. Comme le protocole est tout à fait documenté, un votant aurait la possibilité d’écrire son propre logiciel s’il le souhaite.

Lexique

Annuaire : contient un listing des personnes invitées à s’exprimer
Assesseur : pair désigné pour contrôler que le votant ne s’exprime qu’une fois
Bulletin public : empreinte (algorithme à déterminer, type MD5 ou SHA) du timestamp du vote, du numéro de la question, de l’identifiant du votant (pseudo ou email) et du grain de sel.
Bulletin privé : conservé par le votant, il contient toutes les informations du bulletin public en clair + la signature du témoin.
Droit de participation : code généré et signé par l’annuaire dont la seule utilité est de prouver aux autres pairs qu’un votant a le droit de siéger.
Donneur de sel : pair qui génère le grain
Grain de sel : condensat généré aléatoirement par un pair pour anonymiser son vote.
Pair : autre votant
Proxy de vote : Le votant A transmet des informations au pair B par l’intérmédiaire d’un pair C. Les informations sont chiffrées donc opaques du point de vue de C puisque la clé a été générée par D. Voir « Élaboration du proxy de vote ».
Témoin : pair désigné aléatoirement pour signer un bulletin de vote et attester que ce bulletin a été émis

Processus général

Certains points du processus contiennent des enchaînements expliqués plus loin pour alléger la lecture.

  1. Le votant s’identifie auprès de l’annuaire et reçoit son droit de participation
  2. Le votant demande un grain de sel à un pair aléatoire (et le reçoit)
  3. Le votant établit un proxy de vote avec un pair aléatoire, qui devient témoin
  4. Le votant lui transmet son bulletin public + le grain de sel
  5. Le témoin lui retourne le bulletin signé
  6. Le votant stocke cette signature et est prêt pour déposer dans l’urne

Collecte des bulletins

  1. Le témoin contacte l’urne et transmet le grain de sel
  2. L’urne valide le grain de sel
  3. Le témoin dépose le bulletin public dans l’urne

Dernière étape : les témoins signent le résultat

  1. L’urne notifie l’assemblée de la fin de la collecte
  2. Chaque témoin retourne les signatures des bulletins qu’il a déposé pour attester de leur véracité
Chaque pair a alors la possibilité de contrôler les signatures des bulletins pour contrôler que l’urne n’est pas compromise.
Il peut aussi contrôler son propre bulletin dans le cas où son témoin serait compromis.

Processus complémentaires

Proxy de vote

V = Votant, T = Témoin, P = Proxy, G = Générateur

  1. V contacte P et lui demande l’ouverture d’un proxy en désignant T.
  2. P se place en attente de la validation de T.
  3. V contacte G et lui demande de générer une clé.
  4. G transmet la clé à V.
  5. G notifie T qu’il est solicité par P et lui transmet la clé.
  6. T contacte P pour indiquer qu’il est prêt à dialoguer
Le proxy se ferme dès que le votant a validé la signature du bulletin public par le témoin.

V et T peuvent communiquer sans que T sache que V est son interlocuteur. De plus, G & P qui sont les intermédiaires ne connaissent chacun que la clé ou le message chiffré mais ne sont pas capable de connaître ce qui est dit.

Génération du grain de sel

  1. Le votant contacte le donneur pour obtenir un grain
  2. Le donneur en génère un
  3. Le grain est donné au votant puis transmis à l’urne

L’urne sait que le donneur a généré le grain mais ne peut savoir à qui est-il destiné.

Validation du grain de sel

  1. Le témoin transmet le bulletin et le grain de sel à l’urne
  2. L’urne contacte le donneur
  3. Le donneur va contrôler auprès de chaque assesseur du votant s’il n’a pas voté
  4. Le donneur enregistre que le grain a été utilisé
  5. Le donneur confirme l’utilisation du grain à l’urne
  6. L’urne accepte le bulletin

Identification

  1. Le votant s’identifie auprès de l’annuaire
  2. L’annuaire lui transmet son droit de participation ainsi que la liste des pairs
  3. Le votant détermine aléatoirement deux assesseurs
  4. L’annuaire détermine aléatoirement le 3e assesseur

Si le votant ou l’annuaire est compromis on limite la casse.

Bref.

Voici le concept, j’avoue que je suis assez excité à l’idée que ça puisse marcher. J’attends vos retours qui me permettront d’améliorer ce dispositif, car il y a encore de nombreuses choses à voir !

Notamment l’implémentation, dont j’espère pouvoir fournir un prototype rapidement.

Le Manchot Enragé

Tagué , , , , , ,

14 réflexions sur “Réflexion : concept de système de vote en P2P

  1. Matif dit :

    Franchement, vos occuperiez mieux votre temps libre en développant des applications améliorant la transparence des élections, par exemple, une application facilitant le scan et la mise en ligne des procès-verbaux des bureaux de vote (pour les mairies, les associations, les entreprises, etc.), permettant ainsi à tous les internautes de prendre connaissance des remarques déposées par les électeurs et des résultats avant centralisation. Ce serait moins flatteur pour votre ego mais d’une utilité immédiate et incontestable. Si vous cherchez un peu, vous trouverez aussi d’autres directions de recherche qui soient vraiment au service des électeurs.

    Pour agir pour la transparence électorale dans la vraie vie :
    http://www.ordinateurs-de-vote.org/Vote-electronique-agissons.html

    • manudwarf dit :

      J’occupe mon temps libre comme je le souhaite, pas besoin de vos ordres pour ça. Merci.

  2. Matif dit :

    Il ne s’agit pas d’un ordre (évidemment pas), mais d’un conseil amical pour vous faire prendre conscience de votre dérive techniciste bien loin des valeurs humanistes auxquelles vous croyez être attaché.
    Bien cordialement
    Lionel

    • manudwarf dit :

      J’ai bien précisé que je ne voudrais pas qu’un tel outil puisse être utilisé lors d’élections républicaines. Un tel outil serait utile dans des associations, des entreprises… Dans toute sphère privée, particulièrement celles constituées de membres éparpillés géographiquement. Il n’existe pour eux aucune solution actuellement qui garantisse l’anonymat et la transparence du vote.

      • Matif dit :

        Je vous recommande de prendre connaissance de la position de Stallman.
        http://www.onirik.net/spip.php?article3276
        La démocratie n’est pas réservée aux seules élections directement politiques mais concerne aussi les élections professionnelles, ou encore dans les partis politiques.
        L’ASTI, fédération de 30 associations professionnelles et scientifiques d’informaticiens (plus de 5000 membres dont de nombreux chercheurs) a également été très claire sur le sujet :
        « l’ASTI recommande que […] pouvoirs publics, partis politiques et société civile ne recourent en aucune manière au vote électronique anonyme »

      • Matif dit :

        Le vote par correspondance fonctionne mieux que le vote par internet…

      • manudwarf dit :

        Transparence : 0
        Anonymat : 0
        Vérifiabilité : 0

        Non, désolé, je ne vois pas en quoi c’est mieux. Même le vote à main levé par Skype me semble meilleur.

      • Matif dit :

        Votre sentiment quant au vote par correspondance me semble peu nuancé.
        Par exemple :
        Anonymat : 0
        – Si la procédure avec les deux enveloppes est respectée, l’anonymat n’est pas violé.
        – Le jour du dépouillement les scrutateurs peuvent constater si de nombreuses enveloppes ont été prématurément ouvertes

        je vous suggère la lecture de l’article « Vulnerability analysis of three remote voting methods » pour une analyse plus développée.
        « The study concludes that the automatisation of treatments combined with the dematerialisation of the objects used during an election tends to substitute visible vulnerabilities of a lesser magnitude by invisible and widespread vulnerabilities. »
        http://arxiv.org/abs/0908.1059v1

    • manudwarf dit :

      De plus, de par mon engagement au sein du Logiciel Libre, j’apporte une réelle importance à ce que l’informatique soit au service de l’homme et non le contraire.

  3. Ermantis dit :

    J’ai longtemps pensé à m’attaquer à une telle tache, je suis heureux de voir que d’autres s’y sont mit avant moi.
    L’architecture me fait pensé à Java RMI (système d’annuaire, de proxy, etc.), peut-être faut-il orienter le développement vers ce langage ? Le multi-plateforme qu’il propose pourra notamment être un plus.

    Je n’ai honnêtement pas tout saisi, mais la réflexion semble être là. Je m’y plongerai plus profondément plus tard, promis !

    As-tu jeté un oeil au système utilisé par le parti pirate Allemand pour leur système de proposition et de vote électronique ? (J’imagine que oui, je suis arrivé sur ton blog par le forum du PPF… :p )

    J’espère que tu continuera ton travail, des initiatives comme celle-ci sont plus que bienvenue à mon goût.

    • manudwarf dit :

      Oui, j’ai vu ce qu’ils ont fait, ils ont de très bonnes idées mais nous ne traitons pas la même chose😀

      Ils sont dans la recherche d’un processus démocratique complet alors que mon analyse se focalise sur un point extrêmement précis : le vote en lui-même.

  4. ®om dit :

    J’ai juste survolé, ça a l’air intéressant, mais c’est le genre de billet qu’il faut prendre le temps de lire et de comprendre. Je garde le lien pour le relire plus tard😉

  5. Vouze dit :

    Quelques schémas seraient plus clairs.

    Le « il faut » dans « Système distribué » est sans doute trop fort. Il s’agit d’une proposition technique. Pour formuler la phrase correctement, tu peux dire « Pour répondre à la 6ème contrainte, je propose de bla bla bla ».

    Ceci dit, j’essaierais plutôt d’avoir des contraintes les plus larges possible, pour éviter de forcer le choix technique dès le départ.

    Exemple :
    2. Un annuaire contrôle l’accès au scrutin

    Là, tu fais déjà un choix technique.

    Les contraintes sont plutôt :
    1. vote anonyme (impossible de remonter au votant)
    2. une personne, une voix
    2.1 un seul vote par personne
    2.2 tout les membres peuvent voter
    3. confiance (comment donner confiance dans le système de vote)
    3.1 pas de bourrage d’urne
    3.2 pas d’échange d’urne
    3.3 pas de retrait de bulletins de l’urne
    3.4 pas d’erreur de comptage

    Tu te rajoutes la contrainte de vérifier qu’un bulletin de vote puisse être vérifié par le votant, après le vote ; ce qui peut être contradictoire avec le vote anonyme.

    • manudwarf dit :

      Merci pour tes conseils🙂

      Disons que c’était une réflexion plus qu’une réelle spécification. Néanmoins je prendrai en compte ces remarques le jour où je rédigerai une réelle spécification😉

Les commentaires sont fermés.

%d blogueurs aiment cette page :