RĂ©vision du protocole cryptographique du systĂšme de vote Ă©lectronique Ă  distance

Dans cet article, nous analyserons les dĂ©tails de la mise en Ɠuvre du protocole cryptographique du systĂšme de vote Ă©lectronique Ă  distance.



L'utilisation de mécanismes et d'algorithmes cryptographiques à différentes étapes du processus électoral confÚre au systÚme de vote à distance les propriétés nécessaires. Examinons de plus prÚs et examinons les étapes du vote décrites dans l' article de présentation .



Initialisation du systÚme. Au stade de l'initialisation du vote, les opérations cryptographiques suivantes sont effectuées:



  • DĂ©veloppement d'une paire de clĂ©s de validation pour l'Ă©mission et la vĂ©rification d'une signature aveugle, comme la plus persistante et recommandĂ©e par la communautĂ© universitaire pour la procĂ©dure d'anonymisation dans les systĂšmes de vote Ă©lectronique. Pour le moment, le systĂšme prend en charge des algorithmes de signature aveugle sur des courbes elliptiques et basĂ©s sur l'algorithme de cryptage RSA. Le vote a Ă©tĂ© effectuĂ© Ă  l'aide d'un algorithme d'Ă©mission et de vĂ©rification d'une signature aveugle basĂ© sur l'algorithme de cryptage RSA avec une longueur de clĂ© de 4096 bits.
  • GĂ©nĂ©ration d'une clĂ© de chiffrement publique partagĂ©e. Pour une plus grande sĂ©curitĂ© dans le processus de gĂ©nĂ©ration de clĂ©, deux algorithmes cryptographiques sont utilisĂ©s Ă  la fois: le protocole de gĂ©nĂ©ration de clĂ© distribuĂ©e DKG Pedersen 91 et le protocole de partage de clĂ© Shamir. La gĂ©nĂ©ration des clĂ©s est rĂ©alisĂ©e Ă  la fois par des participants qui ont les moyens techniques de contrĂŽler directement les nƓuds du rĂ©seau et le serveur de comptage, et par des participants qui sont les dĂ©tenteurs des clĂ©s enregistrĂ©es sur des supports externes. Le rĂ©sultat du travail de ces deux algorithmes est une clĂ© publique commune pour le cryptage des bulletins de vote. Ensuite, nous examinerons de plus prĂšs la procĂ©dure de gĂ©nĂ©ration de cette clĂ©.


Donner accĂšs Ă  la newsletter . À ce stade, les mĂ©canismes suivants fonctionnent:



  • GĂ©nĂ©ration d'une paire de clĂ©s d'une signature Ă©lectronique sur l'appareil d'un Ă©lecteur conformĂ©ment Ă  GOST R 34.10-2012
  • GĂ©nĂ©ration d'une signature aveugle pour la clĂ© publique d'un Ă©lecteur masquĂ© pour la certification et la vĂ©rification ultĂ©rieure de son droit de vote. Le mĂ©canisme est actuellement basĂ© sur l'algorithme de chiffrement RSA. Le mĂ©canisme d'anonymisation est discutĂ© en dĂ©tail dans un article sĂ©parĂ©.


Remplir et envoyer la newsletter . À ce stade, l'ensemble suivant d'algorithmes cryptographiques est utilisĂ©:



  • Cryptage de la courbe elliptique de la newsletter selon le schĂ©ma ElGamal. Ce schĂ©ma est utilisĂ© dans le protocole, car il a en outre la propriĂ©tĂ© d'ĂȘtre homomorphe, ce qui permet d'obtenir des rĂ©sultats de vote sans dĂ©crypter chaque bulletin.
  • La preuve Ă  distance disjonctive de Chaum-Pedersen est utilisĂ©e pour prouver l'exactitude du contenu du bulletin de vote sans le dĂ©chiffrer. Nous analyserons ce mĂ©canisme en dĂ©tail dans le prochain article.
  • Signature Ă©lectronique du bulletin cryptĂ© conformĂ©ment Ă  GOST R 34.10-2012.


Compter les totaux. Au stade de la synthÚse, ce qui suit est effectué:



  • Ajout homomorphe de bulletins de vote cryptĂ©s.
  • DĂ©cryptage partiel prĂ©liminaire du bulletin de vote rĂ©sumĂ© final par des parties de la clĂ© privĂ©e par les participants contrĂŽlant les nƓuds individuels et les serveurs de comptage avec la rĂ©ception des textes chiffrĂ©s de chaque participant;
  • Assemblage de la clĂ© privĂ©e dans la Commission Ă©lectorale et dĂ©cryptage partiel du bulletin final rĂ©sumĂ© avec la clĂ© collectĂ©e.
  • La somme finale des textes chiffrĂ©s et la rĂ©ception des rĂ©sultats de comptage.
  • GĂ©nĂ©ration et vĂ©rification de la preuve de connaissance zĂ©ro Chaum-Pedersen. UtilisĂ© pour prouver l'exactitude du dĂ©cryptage du bulletin final rĂ©sumĂ©. Nous analyserons ce mĂ©canisme en dĂ©tail dans le prochain article.


Audit . À ce stade, des vĂ©rifications de validation de toutes les Ă©tapes du protocole peuvent ĂȘtre effectuĂ©es, et dans cet article, nous examinerons de plus prĂšs les vĂ©rifications possibles.



Examinons de plus prÚs les mécanismes cryptographiques.



Plateforme blockchain



Avant de parler de la procĂ©dure de gĂ©nĂ©ration de clĂ©s, vous devez donner une introduction Ă  la mise en Ɠuvre de la plateforme blockchain.



La figure ci-dessous montre une disposition cible simplifiée de la plate-forme blockchain.







Le placement et la rĂ©servation des nƓuds blockchain ont lieu dans des centres de donnĂ©es gĂ©ographiquement rĂ©partis de PJSC Rostelecom. Dans ce cas, la responsabilitĂ© de l'ensemble «atomique» des composants impliquĂ©s dans le stockage de toutes les donnĂ©es de vote peut ĂȘtre attribuĂ©e Ă  la commission Ă©lectorale ou Ă  diverses institutions d'observation publique.



Ceci est fait afin de fournir aux participants la possibilitĂ© de contrĂŽler les principaux composants du systĂšme et des nƓuds du rĂ©seau, et en mĂȘme temps de ne pas traiter les problĂšmes de sĂ©curitĂ© de l'information, de dĂ©ploiement et d'exploitation des moyens techniques, ainsi que d'assurer l'Ă©volutivitĂ© du systĂšme.



La liste des participants peut changer au fil du temps - d'une liste minimale au stade du lancement du systÚme en exploitation commerciale, à une liste assez large et complÚtement décentralisée à mesure que le systÚme se développe. Dans ce cas, il est toujours possible de placer un ensemble de composants en dehors du centre de données.



La solution domestique Waves Enterprise est utilisée comme plateforme blockchain. Les transactions et les blocs sont signés conformément à GOST R 34.10-2012.



Générer des clés de chiffrement



La clé publique pour le cryptage des bulletins de vote est générée à l'aide de deux algorithmes cryptographiques: le DKG Pedersen 91 Distributed Key Generation Protocol et le Shamir Key Sharing Protocol. Sur la base de chacun de ces algorithmes, une clé publique «intermédiaire» est générée. Ensuite, ces deux clés sont combinées en une clé commune.



Le schéma d'assemblage des clés est illustré ci-dessous dans la figure.







En gĂ©nĂ©ral, un tel systĂšme peut sembler redondant, mais c'est ainsi que nous pouvons obtenir une confidentialitĂ© maximale du vote avant qu'il ne se termine. Cela est dĂ» au fait que la clĂ© privĂ©e gĂ©nĂ©rĂ©e Ă  l'aide du protocole DKG n'est jamais au mĂȘme endroit dans la forme assemblĂ©e et ne peut pas ĂȘtre volĂ©e de maniĂšre malveillante avant ou aprĂšs la gĂ©nĂ©ration, et ses parties sont dĂ©tenues par des parties indĂ©pendantes qui interagissent les unes avec les autres uniquement via la blockchain.



Mais si vous ne pouvez pas assembler un quorum de participants indépendants, la routine blokcheyn-network commence à séparer la clé entre les parties indépendantes, qui sont les gardiens des parties individuelles de la clé à enregistrer sur un support externe (la clé de la Commission), la



procĂ©dure de cryptage Ă  clĂ© publique commune commence Ă  la veille du vote, rendant la procĂ©dure ouverte Ă  la Commission la clĂ©... À un certain moment avant le dĂ©but du vote, en prĂ©sence d'observateurs et de journalistes sur un ordinateur portable sĂ©curisĂ© non connectĂ© au rĂ©seau local ou Ă  Internet, Ă  l'aide d'un utilitaire spĂ©cial, une paire de clĂ©s est gĂ©nĂ©rĂ©e, suivie de la division de la clĂ© privĂ©e en n1 parties et de leur enregistrement sur un support spĂ©cial. La commission Ă©lectorale, par sa dĂ©cision, dĂ©termine les porteurs des parties de la clĂ© privĂ©e. Au stade de la crĂ©ation et de l'initialisation d'un vote, la clĂ© publique de la commission sera enregistrĂ©e dans la blockchain.



Ensuite, la création du vote dans le réseau blockchain est initiée. AprÚs avoir créé un vote sur les serveurs de comptage, la procédure de génération de la clé publique DKG est automatiquement lancée .



Les participants Ă  la procĂ©dure de gĂ©nĂ©ration de clĂ© distribuĂ©e sont n serveurs de comptage des votes, dont nous avons parlĂ© plus tĂŽt dans l' article de synthĂšse . Toutes les opĂ©rations d'interaction entre les serveurs de comptage, intermĂ©diaires et finaux, sont enregistrĂ©es dans la blockchain, et sont donc transparentes et vĂ©rifiables. Le systĂšme implĂ©mente le schĂ©ma de seuil "k sur n", c'est-Ă -dire que lors du dĂ©cryptage des donnĂ©es, la participation de toutes les n parties qui ont formĂ© la clĂ© publique DKG n'est pas requise, un plus petit nombre de participants k est suffisant. Cela permet le dĂ©chiffrement des rĂ©sultats de vote mĂȘme si les serveurs de comptage nk ne sont pas disponibles ou si leurs clĂ©s privĂ©es ont Ă©tĂ© perdues.



Pour générer la clé publique, on utilise l'algorithme DKG (Distributed Key Generation), décrit dans l'article «Un cryptosystÚme à seuil sans tiers de confiance» de Torben Pryds Pedersen, transféré sur des courbes elliptiques. On suppose que chaque serveur a une paire de clés constante (enregistrée par le registraire dans le compte) Diffie-Hellman utilisée pour la transmission sécurisée des données vers ce serveur (exportation / importation des partages de clés).



ParamĂštres de protocole



  • Une courbe elliptique E et un gĂ©nĂ©rateur P d'un sous - groupe de cette courbe d'ordre premier q grand. L'implĂ©mentation actuelle utilise la courbe secp256k1 .
  • Un autre gĂ©nĂ©rateur Q du mĂȘme sous-groupe dont la valeur inconnu de personne.x:Q=x⋅P
  • (k, n), oĂč n est le nombre total de participants qui ont gĂ©nĂ©rĂ© des paires de clĂ©s, et k est le nombre minimum de participants nĂ©cessaire pour restaurer le secret partagĂ©, tandis que . Autrement dit, si lesparticipantsk-1sont compromis ou si leurs clĂ©s sont volĂ©es, cela n'affectera en aucune façon la sĂ©curitĂ© du secret partagĂ©.k≀(n+1)/2




En gĂ©nĂ©ral, l'algorithme pour obtenir le point Q est le suivant: n'importe quelle sĂ©quence d'octets est prise, par exemple la chaĂźne "Hello, World!", Et le hachage h = Hash ("Hello, World!") Est calculĂ© Ă  partir de celui-ci, aprĂšs quoi nous convertissons la sĂ©quence d'octets h en un nombre et considĂ©rer , oĂč p est le module de la courbe, on substituex0=hmodp dans l'Ă©quation de la courbe:x0 et essayez de le rĂ©soudre pour y. En l'absence de solution, nous incrĂ©mentons x0 et essayons Ă  nouveau de rĂ©soudre l'Ă©quation pour une nouvelle valeur de x0, etc. Étape 0. Chacun des n serveurs se voit attribuer un numĂ©ro de sĂ©quence unique de 1 Ă  n. Ceci est nĂ©cessaire car le coefficient de Lagrange dĂ©pend du numĂ©ro de sĂ©rie du serveur. Étape 1 - CrĂ©ation d'une clĂ© publique DKG. Chaque j -Ăšme serveur, j = 1, ..., n: 1. GĂ©nĂšre une paire de clĂ© privĂ©e 〖priv〗 _j et une clĂ© publiquey2=x03+a∗x0+bmodp















2. Prend un engagement Pedersen pour la clĂ© publique: GĂ©nĂšre un nombre alĂ©atoire r_j Calcule un pointPubj=privj⋅P.





Cj=rj⋅Q+Pubj

publié à l'aide du compteur 3. Une fois que tous les serveurs ont publié leurs valeurs C_i, le scalaire r_j est publié. En utilisant des scalaires, n'importe qui peut récupérer les clés publiques de chaque serveurCj





et calculer la clĂ© publique DKGPubj=Cj−rj⋅Q . La clĂ© publique DKG est Ă©crite dans la blockchain. Étape 2 - GĂ©nĂ©rer des polynĂŽmes et distribuer les ombres. Chaque j -Ăšme serveur, j = 1,
, n: 1. GĂ©nĂšre un polynĂŽme alĂ©atoire de degrĂ© k-1:Pub=∑(j=1)nPubj















oĂč le coefficientfj(x)=f(j,0)+f(j,1)⋅x+⋯+f(j,k−1)⋅x(k−1),

, et le reste sont des éléments aléatoires du champ GF (q). 2. Compte les valeurs du polynÎmef(j,0)=privj



3. Crypte la valeurfj(i),i=1,
,n,i≠j.



utilisant la clĂ© publique d'exportation / importation du i-Ăšme serveur pour chaque i et publie les rĂ©sultats de chiffrement Ă  l'aide du compteur. Étape 3 - vĂ©rification des coefficients des polynĂŽmes. Chaque j -Ăšme serveur, j = 1, ..., n: 1. Publie chaque coefficient de son polynĂŽme multipliĂ© par le gĂ©nĂ©rateur P.fj(i)













2. DĂ©code toutes les valeursF(j,0)=f(j,0)⋅P,F(j,1)=f(j,1)⋅P,
,F(j,k−1)=f(j,k−1)⋅P

fi(j),i=1,..,n,i≠j et vĂ©rifie leur exactitude:

Calcule Calcule la somme Si A = B, alors le rĂ©sultat est acceptĂ©, sinon une plainte est publiĂ©e contre le serveur i, et le protocole est lancĂ© depuis le tout dĂ©but - passez Ă  l'Ă©tape 0. 3. Si personne n'a de plaintes, alors il calcule propre clĂ© privĂ©e La clĂ© publique DKG peut ĂȘtre rĂ©cupĂ©rĂ©e et vĂ©rifiĂ©e Ă  partir des donnĂ©es enregistrĂ©es par les serveurs de comptage dans la blockchain au stade du lancement du vote. Il est nĂ©cessaire de prendre les points de clĂ© publique de tous les dĂ©chiffrages et de les ajouter. Le rĂ©sultat sera la mĂȘme valeur enregistrĂ©e dans la blockchain que la clĂ© publique DKG.A=fi(j)⋅P

















En outre, sur la base de la clé publique de la commission, qui est chargée dans le systÚme, et des clés publiques des serveurs de comptage, une clé de chiffrement publique commune est générée selon la formule suivante:



MainPubKey = Hash (PubDKG, PubCommission) * PubDKG + Hash (PubCommission, PubDKG) * PubCommission



Toutes les clés publiques sont enregistrées dans blockchain ainsi que des calculs intermédiaires pour faciliter la vérification par les observateurs. La clé de chiffrement publique partagée est lue à partir de la blockchain et transmise aux appareils des utilisateurs lorsque la newsletter est affichée.



Description du schéma de chiffrement des bulletins



Vous trouverez ci-dessous une description de la procédure de cryptage des bulletins de vote en utilisant le schéma El-Gamal sur des courbes elliptiques.



Le schĂ©ma de cryptage El Gamal sur courbes elliptiques permet de mettre en Ɠuvre un cryptage homomorphe par rapport Ă  l'addition, dans lequel, suite Ă  l'opĂ©ration d'addition sur le texte chiffrĂ©, une somme cryptĂ©e des valeurs originales est obtenue.



Chiffré (A) + Chiffré (B) = Chiffré (A + B).



Pour utiliser cette propriété de l'algorithme, le bulletin de vote électronique terminé est représenté par une chaßne de zéros et de uns. Le nombre de caractÚres correspond au nombre de choix, tandis que celui sélectionné est représenté par un, les autres choix sont représentés par des zéros.



La longueur de la clĂ© privĂ©e lors de l'utilisation de l'algorithme ElGamal sur des courbes elliptiques est sĂ©lectionnĂ©e pour ĂȘtre de 256 bits, tandis que la clĂ© publique est un point sur la courbe elliptique. Cela correspond Ă  un niveau de sĂ©curitĂ© de 128 bits (2 ^ 128 opĂ©rations de points de courbe sont nĂ©cessaires pour craquer). Ce niveau est considĂ©rĂ© comme optimal pour la plupart des systĂšmes industriels et financiers modernes, y compris la norme russe GOST 34.10-2018 «Technologie de l'information. Protection des informations cryptographiques. Processus de formation et de vĂ©rification des signatures numĂ©riques Ă©lectroniques "(version 256 bits).



Secp256k1 est utilisé comme courbe elliptique.



Disons que nous avons une paire de clés priv, Pub:

Number priv: 0 <priv <q

Point Pub = priv *



Chiffrement de base :



  • Il y a un message m, un petit nombre que nous voulons crypter sur la clĂ© Pub.
  • Calculer le point M = m * Base
  • GĂ©nĂ©rer un nombre alĂ©atoire r: 0 <r <q
  • Calculer le point R = r * Base et le point C = M + r * Pub
  • Texte chiffrĂ©: (R, C)


DĂ©cryptage:



  • PossĂšde une clĂ© privĂ©e privĂ©e et un texte chiffrĂ© (R, C)
  • Calculer le point M = C - priv * Base
  • Reconstruction de m: rĂ©solution par ECDLP en force brute pour le rapport M = m * Base


Homomorphisme du schéma.



On voit que si on crypte deux messagesM1=m1∗Base et M2=m2∗Base sur la clĂ© Pub:

(R1,C1)=(r1∗Base,M1+r1∗Pub)

(R2,C2)=(r2∗Base,M2+r2∗Pub)



Puis leur somme (R1+R2,C1+C2) correspond au message chiffré M1+M2...



Ainsi, tous les bulletins de vote peuvent ĂȘtre cryptĂ©s et pliĂ©s «candidat par candidat». Par exemple, laissez un bulletin ouvert ressembler Ă  ceci:



Ivanov Petrov Sidorov



0 1 0




Ensuite, en le transformant en points, nous obtenons:



Ivanov Petrov Sidorov



ZeroPoint Base ZeroPoint



oĂč ZeroPoint est un point Ă  l'infini.



Et enfin, nous chiffrons la newsletter sur la clé Pub:



Ivanov Petrov Sidorov



(r1∗Base,r1∗Pub) (r2∗Base,Base+r2∗Pub) (r3∗Base,r3∗Pub)



Disons que nous avons menĂ© un tel vote avec N Ă©lecteurs. Si pour Ivanov, Petrov et Sidorov, nous ajoutons sĂ©parĂ©ment les textes chiffrĂ©s de diffĂ©rents bulletins de vote, nous obtenons un bulletin de vote sommaire, qui contient des montants chiffrĂ©s pour chacun des candidats. Ce bulletin de vote sommaire peut ĂȘtre dĂ©cryptĂ© avec une clĂ© de dĂ©cryptage et les rĂ©sultats du vote pour chacun des candidats peuvent ĂȘtre trouvĂ©s.



La figure ci-dessous montre un schéma d'empilement et de validation homomorphique des bulletins de vote basé sur des preuves de connaissance zéro.







Comme nous pouvons le voir sur le diagramme, un attaquant potentiel n'a aucun moyen de "lancer" des votes supplémentaires en chiffrant un nombre incorrect au niveau du protocole cryptographique. Ceci est accompli en utilisant des preuves de connaissance zéro, qui seront abordées plus loin dans l'article. De plus, les vérifications nécessaires sont également implémentées dans l'application Web de l'électeur.



Description de la procédure de décryptage



Les votes sont comptés sans décryptage grùce au cryptage homomorphe selon le schéma El-Gamal, qui permet de maintenir la confidentialité de l'ensemble de la procédure de vote et de chaque vote individuel. De plus, aucun des serveurs n'a la capacité de décrypter indépendamment et secrÚtement les résultats du vote.



Afin de dĂ©crypter le texte chiffrĂ© (R, C), il est nĂ©cessaire que tout k serveur sur n calcule et publie la valeursj⋅R et la preuve de l'exactitude du dĂ©cryptage de Chaum-Pedersen (preuve que le sj⋅R Est prĂ©cisĂ©ment le point R multipliĂ© par sjsans rĂ©vĂ©ler le sens sj). En outre, pour cela, il est nĂ©cessaire de collecter la clĂ© privĂ©e de la commission d'au moins k1 Ă  partir de t1 parties et avec son aide Ă©galement d'effectuer le calculsj⋅Ravec publication dans la blockchain.







Le décryptage se déroule en plusieurs étapes, dont les résultats sont enregistrés dans la blockchain.



Premier pas- dĂ©cryptage partiel. Chaque K des N serveurs du systĂšme additionne les textes chiffrĂ©s des votes, reçoit un bulletin de vote sommaire et dĂ©chiffre la clĂ© de vote privĂ©e de sa part. Le rĂ©sultat de cette opĂ©ration sera un texte chiffrĂ©, dont la combinaison avec les textes chiffrĂ©s obtenus Ă  la suite des mĂȘmes opĂ©rations effectuĂ©es sur les autres serveurs de comptage, ainsi qu'avec le texte chiffrĂ© reçu sur la clĂ© privĂ©e de la commission, donnera un rĂ©sultat final dĂ©chiffrĂ©. Il est important de noter que s'il n'y a pas de texte chiffrĂ© obtenu Ă  partir du dĂ©cryptage sur la clĂ© privĂ©e de la commission, tous les autres textes chiffrĂ©s deviennent inutiles. Il est impossible d'en obtenir des rĂ©sultats.



Les résultats de l'opération sont publiés sur la blockchain.



Seconde phase- assemblage de la clé privée de la commission et décryptage partiel du scrutin sommaire. Cette opération est effectuée sur un PC spécial sans connexion Internet. Une fois la clé collectée, l'opération décrite dans le paragraphe précédent a lieu pour former le texte chiffré sur la clé de commission. Les résultats de cette opération sont également enregistrés dans la blockchain.



La troisiÚme étape est le décodage final. Les serveurs de comptage des votes agrÚgent les résultats K de N serveurs, le résultat du décryptage sur la clé privée de la commission, et produisent le décryptage final, puis publient les résultats du vote.



Veuillez noter que la présence du texte chiffré généré sur la clé privée de la commission est un prérequis. Sans cela, le calcul des résultats n'aura pas lieu.



Sur la base des résultats publiés du décryptage partiel, toute partie intéressée peut répéter le processus et vérifier que les résultats sont correctement comptés.



Preuve de connaissance zéro



Bien que le systÚme DEG soit protégé contre les intrus et les erreurs des utilisateurs au niveau du logiciel et de l'infrastructure, des preuves et des vérifications mathématiques supplémentaires ont été fournies au niveau du protocole cryptographique, qui ne permettent pas de transférer de fausses informations vers le systÚme. Pour cela, plusieurs mécanismes ont été développés sur la base de la preuve non interactive de connaissance zéro (NIZK).



Le premier type de ZKP (zero-knowledge proof) appliqué dans le systÚme est la preuve de plage. Les données du ZKP sont utilisées lors de la publication d'un bulletin de vote crypté de sorte qu'en l'absence d'informations sur la façon dont l'électeur a voté, il serait possible de s'assurer que l'électeur n'a pas gùché le bulletin de vote sur son appareil de l'une des maniÚres suivantes:



  • le participant n'a pas chiffrĂ© une valeur supĂ©rieure Ă  un dans le bulletin de vote pour une option de vote distincte, ce qui aurait une incidence sur le rĂ©sultat du vote en cas d '«ajout chiffré»;
  • le participant n'a pas choisi plus d'une option pour chaque question du bulletin de vote, sauf si cela est prĂ©vu par la procĂ©dure de remplissage du bulletin de vote.


Une description plus détaillée de l'implémentation de NIZK, ainsi que leur vérification, seront discutées dans un article séparé.



Structure des enregistrements dans la blockchain



Toutes les informations de la blockchain sont enregistrées par trois types de transactions:



  • CreateContract - pour crĂ©er un contrat intelligent pour un vote spĂ©cifique. De plus, dans ce contrat intelligent, toutes les informations sur le vote seront regroupĂ©es. Si deux (ou plus) votes ont lieu simultanĂ©ment, alors deux (ou plus) copies du contrat sont respectivement crĂ©Ă©es.
  • CallContract - pour interagir avec un contrat intelligent pour diverses opĂ©rations, dont une liste est donnĂ©e ci-dessous.
  • Transaction de donnĂ©es - pour enregistrer la liste Ă©lectorale aprĂšs avoir crĂ©Ă© une instance du contrat intelligent de vote et avant de commencer le vote lui-mĂȘme.


L'interaction avec un contrat intelligent est réalisée par les opérations suivantes:



  • Écrire des donnĂ©es de base dans un contrat intelligent. Les clĂ©s publiques des serveurs de comptage qui participeront au protocole cryptographique, le schĂ©ma de seuil, les clĂ©s de vĂ©rification de signature aveugle et d'autres donnĂ©es nĂ©cessaires Ă  l'organisation du protocole et au vote en gĂ©nĂ©ral sont stockĂ©es ici.
  • dkgScalar, dkgCommit, dkgShadows - donnĂ©es requises pour crĂ©er une clĂ© publique pour le cryptage des bulletins de vote et implĂ©menter un seuil k de n schĂ©mas. Nous en reparlerons plus tard dans l'article.
  • addMainKey – .
  • blindSigIssue – .
  • vote – .
  • finishVoting – . .
  • Decryption – . .
  • ComissionDecryption – .
  • Results – . , .


Une transaction de vote d'électeur comprend l'adresse blockchain et la clé publique d'un électeur, un bulletin de vote crypté, une signature aveugle et une signature électronique générée sur la clé privée anonyme de l'électeur (voir l'article publié précédemment sur l'anonymisation).



Les figures ci-dessous montrent l'affichage d'une transaction avec une voix dans le client blockchain.











Toutes les informations sur le vote sont agrégées sur un contrat intelligent et seront disponibles via le client blockchain aux observateurs ou sous la forme d'un fichier csv à n'importe qui.



La figure ci-dessous montre l'affichage des informations agrégées dans un contrat intelligent.





* Données du serveur de test.



Les fonctionnalitĂ©s de la plate-forme Waves Enterprise vous permettent de mettre en Ɠuvre une logique assez complexe avec un modĂšle de statut, une vĂ©rification de signature aveugle et le comptage des bulletins valides et annulĂ©s.



VĂ©rification du protocole cryptographique et du processus de vote



Le premier contrĂŽle de base qui peut ĂȘtre effectuĂ© Ă  l'aide de la plateforme blockchain et du client blockchain est de vĂ©rifier si le nombre d'Ă©lecteurs sur la liste Ă©lectorale correspond au nombre de bulletins Ă©mis et au nombre de votes enregistrĂ©s.



Le contrÎle de l'exactitude du dépouillement est effectué en répétant le travail du serveur de dépouillement par l'observateur pour résumer les bulletins de vote chiffrés candidat par candidat. Cela se fait en ajoutant séquentiellement les points de la courbe elliptique correspondant à chaque candidat.



Ensuite, à l'aide du bulletin récapitulatif crypté reçu et de la preuve du décryptage correct, qui sont publiés sur la blockchain, il est possible de vérifier l'exactitude de la sommation et du décryptage partiel effectués par chaque serveur de comptage.



À ce stade, vous pouvez voir si le montant chiffrĂ© reçu par l'observateur correspond Ă  ce que chacun des serveurs de comptage a enregistrĂ©.



AprÚs cela, vous pouvez vérifier l'exactitude du décryptage des résultats du vote. Pour ce faire, vous devez prendre des textes chiffrés des transactions avec le type d'opérations Décryptage et CommissionDécryptage et, par analogie avec les bulletins de vote, ajouter les points de la courbe elliptique pour chaque candidat.



Le code source des opérations cryptographiques est disponible dans ce référentiel GitHub.



All Articles