Système de vote à l'aide des clés ğ1

Merci pour la référence, j’étais exactement sur cette reflexion.

Attention cela dit, Zcash est partiellement centralisé, et justement pour garantir un anonymat en blockchain sans fraude. :frowning:

J’ai repensé a cette question aujourd’hui, et a défaut d’anonymat total je pense qu’il est possible d’avoir un anonymat fort de façon décentralisé, je m’explique :

L’idée est de s’inspirer du réseau Tor qui “garanti” l’anonymat d’un internaute via un “tiers de confiance décentralisé”. Je vous invite a lire le fonctionnement du réseau tor sans quoi vous ne pourrez pas comprendre mon idée :

En fait c’est @tuxmain qui m’a inspiré avec son Gmixer qu’on pourrait forker ou adapter pour qu’il soit capable d’effectuer ce qui suit :

Lors de l’ouverture d’un scrutin (t0) les organisateurs du scrutin créer un portefeuille dédié a l’orga du scrutin (qu’on nommera PS) sur lequel est transféré une G1 symbolique, la transaction contiendrai le hash d’un document précisant tout les choix possibles et modalités du scrutin.

Chaque membre souhaitant prendre par au vote doit envoyer 1 G1 au PS avant une date t1. Lorsque t1 est atteint, 1 G1 par votant est transférée a un portefeuille PS2 dont le solde était vide au préalable.
Tout un chacun peut alors vérifier que le PS2 ne contient qu’une G1 par votant et autant de G1 qu’il n’y a de votants.

Ensuite chaque votant vas voter grâce a un client spécial (a développer). Le Client en question va générer plusieurs choses :
Un bulletin de vote anonyme, document texte de 2 champs dans le cas d’un vote uninominal (id du choix, nombre aléatoire de grande autropie (au moins 2048 bits)).
Le client calcule le hash du bulletin de vote anonyme via un algo de hashage robuste aux collisions (par exemple du Whirlpool).
Le client choisi un chemin aléatoire passant par 3 nœuds du “Gmixer spécial vote”.
Le client chiffre le message suivant pour le 3ème nœud (nœud de sortie) :

CHOIX_DU_VOTANT
HASH_BULLETIN_DE_VOTE 

Le mesage chiffré est alors inclus dans le message pour le nœud 2 puis de même pour le nœud 1, c’est l’encapsulation des messages chiffrés les uns dans les autres propre comme dans Tor.

Chaque choix possible du vote serait associé à un portefeuille.

Les nœuds de sortie transféreront finalement la G1 sur le portefeuille correspondant a son choix.
Les nœuds de sortie devront publier la liste des hashs des bulletins de vote pour chaque choix.
Toute la communauté pourra alors vérifier que les montant totaux de chaque choix correspondent bien au nombre de hashs publiés pour chaque choix.

Tout votant pourra vérifier que le hash de sont bulletin de vote a bien été publié dans le choix qu’il a effectivement fait.

Une vois les votes clos, une 2ème phase de confirmation s’ouvre dans laquelle chaque votant pourra publier une confirmation de la validité de son vote ou une preuve de triche.

En cas de triche il faudrait pouvoir identifier quel nœud du gmixer a triché pour exclure ce nœud lors du prochain vote. En gros il faudrait un système de “réputation” des nœuds gmixer tout comme cela existe dans Tor.

Pour dévoiler le choix d’un membre il faut contrôler les 3 nœuds gmixer du chemin aléatoire choisi par le client du membre au moment de son vote. Si un seul des 3 nœuds n’est pas contrôlé par la même personne/entité alors impossible de retrouver le lien identité<->vote.

Notez bien qu’en cas de triche, tout votant se rendant compte que le hash de sont votre n’est pas dans le bon choix peut publier son bulletin de vote sans dévoiler sont identité et ainsi prouver qu’il y a triche et invalider le scrutin.

Tout ce process demanderai très probablement une sidechain avec son propre protocole, qui se baserai sur la blockhain de la G1 juste pour avoir les infos de al toile de confiance.

Ce n’est qu’une première idée, et de nombreux détails seraient a préciser si une réalisation se faisait mais le concept est la :slight_smile:

Qu’en pensez vous @tuxmain et @HugoTrentesaux ?

4 Likes

Comment on fait pour vérifier qu’un vote vient bien d’une identité membre et qu’une identité membre n’a pas émis plusieurs votes ?

Par le fait que l’action de voter reviens a envoyer une G1 au compte portefeuille du choix effectué (pas directement mais via des transactions intermédiaires mixée).
On peut vérifier grâce aux contenu des transactions effectuées par les nœuds d’entrée que toutes les G1 injectées dans le scrutin courant proviennent bien d’un compte membre et qu’aucun compte membre n’a envoyé plusieurs G1. J’ai omis des détails, par exemple il serait peut être nécessaire que les nœuds d’entrée tag les transactions de 1er niveau avec un commentaire spécial pour qu’on puisse les lister. L’idée s’inspire de gmixer mais demande peut être des modifications conséquentes dans sa façon de fonctionner :slight_smile:

1 Like

Il faudrait du coup que le bulletin de vote ait aussi un indicateur prouvant qu’il vient bien d’une des personnes participant au vote, par exemple en publiant un hash lors du versement de la première Ğ1 puis en publiant la clé privée ayant servi à signer le premier message lors du vote pour prouver son authenticité ou quelque chose de ce genre ? Sinon il y a un risque que tous les scrutins soient invalidés par des fraudeurs qui sèmeraient facilement la zizanie, non ? Ou alors j’ai raté un truc. Y a quelque chose à creuser en tout cas…

1 Like

Comment tu vérifie sans montrer que tu t’interesses à ce hash de bulletin en particulier? ^^;
En passant par tor? En récupérant tous les résultats pour chercher en autarcie chez toi tout seul?

Quoi comme preuve de triche? Sans dévoiler son vote initial?
Ha ok :

et ça comment tu ferait?


Interessant en tout cas!

Non c’est déjà prouvé: les hashs des bulletins de vote sont chacun associées a 1 g1 envoyée pour voter. Il suffit de s’assurer que les g1 utilisées pour le scrutin proviennent bine de comptes membres a raison de 1 par conte membre, ce qui est fait dans la phase préparatoire avec les portefeuilles PS et PS 2 :wink:

Non car pour que le scrutin soit considéré comme invalide il faut dévoiler un bulletin de vote dont le hash a été publié par un nœud de sortie, or cela ne peut être fait que par l’envoi d’une G1 provenant d’un compte membre.
Par contre le nœud de sortie peut en effet publier des hashs invalides volontairement pour bloquer le vote, d’ou la nécessite d’un systeme de réputation des nœuds pour exclure les nœuds pas honnêtes. (Par exemple dans notre cas, on sais exactement quel nœud de sortie a publier le hash invalide, on peut décider de refaire le scrutin en excluant ce nœud du scrutin refait, mais uniquement 1 seule fois car il est tout a fait possible que le nœud de sortie était honnête et que la triche était ailleurs).

A l’issue du délai pour voter, chaque nœud de sortie va publier quelquepart un document contenant pour chaque choix du vote la liste des hashs des bulletins de votes associés. La blockchain pourra /devra contenir le hash de ce document pour l’authentifier (dans un com d’une transaction émise par le nœud de sortie).

Le logiciel client du votant souhaitent vérifier que son vote a été respecté a juste a hasher le bulletin de vote puis a vérifier qu’il existe 1 et 1 seul document publié par les nœuds de sorties qui contient le hash du bulletin de vote puis a vérifier que le nœud émetteur de ce document a bien publié le hash de ce document en blockchain.
A aucun moment le votant ne vas publier quoi que ce soit lors de sa vérification.

Le bulletin de vote doit être anonyme (cad ne comporter aucune information liée au votant), ce qui est le cas dans ma proposition.
En effet, l’utilisateur qui souhaite prouver que son vote a été bafoué devra publier la preuve de triche via tor s’il souhaite garder son vote anonyme. Mais on peut aussi compter sur le fait que tout le monde n’est pas aussi attaché que ça a garder l’anonymat de son vote. Certains sont prêt a revendiquer publiquement leur choix, et le tricheur qui veut influencer le scrutin doit falsifier un nombre important de hash pour influencer le scrutin, sans savoir qui il vas flouer, du coup la probabilité qu’il ne tombe que sur des utilisateurs ne souhaitant pas dévoiler leur choix est très très faible, et même si cela arrive publier la preuve de triche via tor reste faisable sans problème.
Enfin, même si l’utilisateur floué, publie la preuve sans passer par tor, il ne publie rien lié a son identité, il faut le le serveur réceptionnant sa preuve logge les IP volontairement dans le but de tracer ceux qui publie des preuves de triche, ou que quelqu’un sniffe le réseau dans ce but a ce moment la (et encore en cas de HTTPS ce 2ème point de marche pas), ce n’est donc pas explicitement un dévoilement de son vote, loin de la.

1 Like

Tu as changé de projet ?

2 Likes

C’est vrai que ça fait une usine à gaz tout de même pas très sûre, autant ne pas voter anonymement… Ça me fait penser à cette magnifique contradiction :


Alors pourquoi le vote se fait-il dans un isoloir, alors qu’en plus « nul ne doit être inquiété pour ses opinions politiques », et qu’un vote éclairé nécessite un débat ?

4 Likes

Nul ne peut être inquièté si la question est “quoi?” Et non pas “qui ?”

pourquoi voter avec tes g1 si t’as clef suffit. Un systeme de vote est une sidechain. Aucune raison qui justifie le besoin d’une transaction pour ce faire

Oui j’y est pensé on pourrait voter sur une sidechain faisant tourner une monnaie spéciale “points de vote” mais c’est infiniment plus lourd a implémenter pour un avantage quasi-null donc pour moi ça reviens a prendre l’avion pour aller chez son voisin, techniquement tu peut le faire mais c’est énormément de temps et d’énergie gaspillée pour rien.

Je vois les choses différemment. En utilisant le blockstamp de la g1 je ne créer pas de blocks inutiles.

Ça fait une dépendance vers la chaîne principale (la wot), et c’est une application différente que la gestion des sources de monnaies, plus simple. mais, hors blockchain.

Et sinon plutôt que s’embêter avec une blockchain, on plus simplement utiliser une DHT, ou n’importe quoi permettant de publier des documents de manière assez décentralisée.

oui c’est bien aussi, il suffit de timestamper, d’utiliser la clef public/privée. ipfs peu faire le taf

C’est intéressant tout ça.

Ok mais si le but est de “voter” et non “d’élire” alors cela va générer beaucoup de vote possibles par jour. Le faire avec des Ğ1 peut “handicaper” monétairement des individus (même si dans le temps, 1 Ğ1 représentera qqch de potentiellement négligeable, je suis d’accord).

Alors qu’avoir une “monnaie spéciale vote” avec un c = 10 000% /heure par exemple (ou autre échelle de temps relativement courte par rapport à ev) permettrait de s’assurer que tous les comptes membres disposent d’un nombre de “points de vote” égale, car toutes les heures , tout le monde est à la moyenne. On peut même compter les “points de vote” en unité relative au DU de cette “monnaie spéciale vote”. Avec la possibilité pour chacun de faire procuration en filant ses “points de votes” à autrui, et que cette procuration soit “annulée” par la production phénoménale de “DU de vote” ramenant tout le monde à égalité en permanence.

Je sais que @Galuel m’avait fait parvenir ce document concernant la difficulté d’utiliser le vote électronique.

Oui, mais visiblement des humains ne sont pas en accord avec ça.

Et même derrière un ordi chez soi, des individus peuvent se retrouver dans l’impossibilité de voter en âme et conscience, car ils peuvent subir une infinité de pression (couples, supérieur, parents, entourage, que sais-je…).

Il me semble quand même que la technique de l’isoloir, en endroit public, ouvert et surveillé par des citoyens est une méthode très fiable pour s’assurer que le votant est bien présent, seul dans l’isoloir, et exprimant son point de vue sans POUVOIR être inquiété par son choix.

Mais l’isoloir n’est peut-être pas incompatible avec le vote informatique… si?

La question d’un vote transparent et anonyme est posée depuis longtemps, même avec un système d’identités centralisé.
Pour un vote Oui/Non il y a peut-être à creuser ici :

1 Like

Une autre piste, puisque la sécurité théorique semble impossible :

Utiliser un réseau fédéré où on choisit le serveur privé à qui on confie nos votes. Mais pour éviter que ce serveur connaisse le vote, chacun a par exemple 10 votes à donner, qu’il peut distribuer comme il souhaite aux différents serveurs. Pour choisir entre A et B avec un maximum d’anonymat, on pourrait voter A sur 4 serveurs et B sur 6.

Le problème est que certains votants pourraient voter plus de 6 fois leur choix, déséquilibrant le vote, et créant une inégalité en défaveur de ceux préférant rester anonymes.

1 Like

Un vote fluide nécessite un système politique fluide… nous fabriquons des outils qui structurent les flux entre amis d’amis… je ne sais pas encore comment les structures actuelles de notre société vont devenir dans ce nouveau réseau?

Il apparaît que des tiers de confiance sont nécessaires pour déléguer à un autre une partie de ce que nous ne souhaitons pas prendre en charge nous même. Dans un réseau pair à pair on pourra choisir notre copain de foot comme notaire :wink:

1 Like

J’ai voulu l’autre jour partager sur ce fil l’idée du chiffrage homomorphique (CH), mais aprés une petite étude je suis tombé sur 2 problèmes qui ne sont pas évoqués dans cette vidéo:

  • Le CH permet de faire des calculs (simples) sur la donnée chiffrée et arriver à un résultat chiffré, mais pour une seule et même clé. C’est à dire que pour pouvoir additionner les votes chiffrés, il faut que tt le monde utilise la même clé, et cette clé sera utilisée pour déchiffrer le résultat (il n’y a donc plus de secret si tout le monde à la même clé, tt le monde peu déchiffrer tous les votes).
  • 2e soucis, même si admettons que le problème précédent serait résolut, et que chaque vote serait secret car fait avec chacun sa clé, il reste possible de connaître chaque vote en faisant le calcul non plus de l’ensemble, mais en additionnant un vote particulier à un faux vote connu, exemple: je chiffre un vote pour Alice, ensuite j’additionne ce vote chiffré avec le vote chiffré cible, avec le résultat de seulement ces 2 votes je peux déduire le vote cible…

Le CH n’est donc pas suffisant par lui-même, par contre cette technique peut être un maillon de la chaîne technique du vote…

1 Like