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.
- (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Ă©.
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 substitue dans l'Ă©quation de la courbe: 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Ă© publique
2. Prend un engagement Pedersen pour la clé publique: GénÚre un nombre aléatoire r_j Calcule un point
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 serveur
et calculer la clĂ© publique DKG . 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:
oĂč le coefficient
, et le reste sont des éléments aléatoires du champ GF (q). 2. Compte les valeurs du polynÎme
3. Crypte la valeur
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.
2. DĂ©code toutes les valeurs
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.
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 messages et sur la clé Pub:
Puis leur somme correspond au message chiffré ...
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
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 valeur et la preuve de l'exactitude du décryptage de Chaum-Pedersen (preuve que le Est précisément le point R multiplié par sans révéler le sens ). 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 calculavec 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.