Die Verwendung kryptografischer Mechanismen und Algorithmen in verschiedenen Phasen des Wahlprozesses verleiht dem Fernabstimmungssystem die erforderlichen Eigenschaften. Schauen wir uns die im Übersichtsartikel beschriebenen Abstimmungsphasen genauer an .
Systeminitialisierung. In der Phase der Abstimmungsinitialisierung werden die folgenden kryptografischen Operationen ausgeführt:
- Entwicklung eines Validator-Schlüsselpaars zur Ausstellung und Überprüfung einer blinden Signatur als beständigste und von der akademischen Gemeinschaft empfohlene Methode zur Anonymisierung in elektronischen Abstimmungssystemen. Derzeit unterstützt das System Blindsignaturalgorithmen auf elliptischen Kurven und basiert auf dem RSA-Verschlüsselungsalgorithmus. Die Abstimmung wurde unter Verwendung eines Algorithmus zum Ausgeben und Überprüfen einer blinden Signatur basierend auf dem RSA-Verschlüsselungsalgorithmus mit einer Schlüssellänge von 4096 Bit durchgeführt.
- Generierung eines gemeinsam genutzten öffentlichen Verschlüsselungsschlüssels. Für mehr Sicherheit bei der Schlüsselgenerierung werden zwei kryptografische Algorithmen gleichzeitig verwendet: das DKG Pedersen 91-Protokoll zur verteilten Schlüsselgenerierung und das Shamir-Schlüsselfreigabeprotokoll. Die Schlüsselgenerierung wird sowohl von Teilnehmern durchgeführt, die über die technischen Mittel verfügen, um die Netzwerkknoten und den Zählserver direkt zu steuern, als auch von Teilnehmern, die Schlüssel auf externen Medien aufbewahren. Das Ergebnis der Arbeit dieser beiden Algorithmen ist ein gemeinsamer öffentlicher Schlüssel zum Verschlüsseln von Stimmzetteln. Im Folgenden werden wir uns die Vorgehensweise zum Generieren dieses Schlüssels genauer ansehen.
Zugriff auf den Newsletter . In dieser Phase funktionieren die folgenden Mechanismen:
- Erzeugung eines Schlüsselpaars einer elektronischen Signatur auf einem Wählergerät gemäß GOST R 34.10-2012
- Erstellung einer blinden Unterschrift für den maskierten öffentlichen Schlüssel des Wählers zur Zertifizierung und anschließenden Überprüfung seines Rechts auf Teilnahme an der Abstimmung. Der Mechanismus basiert derzeit auf dem RSA-Verschlüsselungsalgorithmus. Der Anonymisierungsmechanismus wird in einem separaten Artikel ausführlich erläutert.
Newsletter ausfüllen und versenden . In dieser Phase wird der folgende Satz kryptografischer Algorithmen verwendet:
- Elliptische Kurvenverschlüsselung des Newsletters nach dem ElGamal-Schema. Dieses Schema wird im Protokoll verwendet, da es zusätzlich die Eigenschaft hat, homomorph zu sein, was es ermöglicht, Abstimmungsergebnisse zu erhalten, ohne jeden Stimmzettel zu entschlüsseln.
- Der disjunktive Chaum-Pedersen-Bereichsnachweis wird verwendet, um die Richtigkeit des Inhalts des Stimmzettels zu beweisen, ohne ihn zu entschlüsseln. Wir werden diesen Mechanismus im nächsten Artikel detailliert analysieren.
- Elektronische Signatur des verschlüsselten Bulletins gemäß GOST R 34.10-2012.
Summen zählen. In der Phase der Zusammenfassung wird Folgendes ausgeführt:
- Homomorphe Hinzufügung verschlüsselter Stimmzettel.
- Vorläufige teilweise Entschlüsselung des endgültigen zusammengefassten Stimmzettels durch Teile des privaten Schlüssels durch die Teilnehmer, die einzelne Knoten steuern und Server zählen, wobei von jedem Teilnehmer Chiffretexte empfangen werden;
- Zusammenstellung des privaten Schlüssels in der Wahlkommission und teilweise Entschlüsselung des endgültigen zusammengefassten Stimmzettels mit dem gesammelten Schlüssel.
- Die endgültige Summierung der Chiffretexte und der Empfang der Zählergebnisse.
- Erstellung und Überprüfung des Null-Wissensnachweises von Chaum-Pedersen. Wird verwendet, um die Richtigkeit der Entschlüsselung des endgültigen zusammengefassten Stimmzettels zu beweisen. Wir werden diesen Mechanismus im nächsten Artikel detailliert analysieren.
Audit . In dieser Phase können Validierungsprüfungen aller Stufen des Protokolls durchgeführt werden. In diesem Artikel werden mögliche Prüfungen genauer untersucht.
Schauen wir uns die kryptografischen Mechanismen genauer an.
Blockchain-Plattform
Bevor Sie über das Verfahren zum Generieren von Schlüsseln sprechen, müssen Sie eine Einführung in die Implementierung der Blockchain-Plattform geben.
Die folgende Abbildung zeigt ein vereinfachtes Ziellayout der Blockchain-Plattform.
Die Platzierung und Reservierung von Blockchain-Knoten erfolgt in geografisch verteilten Rechenzentren von PJSC Rostelecom. In diesem Fall kann die Verantwortung für die "atomaren" Komponenten, die für die Speicherung aller Abstimmungsdaten erforderlich sind, der Wahlkommission oder verschiedenen Institutionen der öffentlichen Beobachtung übertragen werden.
Dies geschieht, um den Teilnehmern die Möglichkeit zu geben, die Hauptkomponenten des Systems und der Netzwerkknoten zu steuern und gleichzeitig nicht die Lösung von Problemen mit der Informationssicherheit, der Bereitstellung und dem Betrieb technischer Mittel sowie die Gewährleistung der Skalierbarkeit des Systems zu behandeln.
Die Teilnehmerliste kann sich im Laufe der Zeit ändern - von einer minimalen Liste in der Phase der Inbetriebnahme des Systems zu einer ziemlich breiten und vollständig dezentralen Liste, wenn sich das System entwickelt. Darüber hinaus besteht immer die Möglichkeit, eine Reihe von Komponenten außerhalb des Rechenzentrums zu platzieren.
Die inländische Lösung Waves Enterprise wird als Blockchain-Plattform verwendet. Transaktionen und Blöcke werden gemäß GOST R 34.10-2012 signiert.
Verschlüsselungsschlüssel generieren
Der öffentliche Schlüssel für die Stimmzettelverschlüsselung wird mithilfe von zwei kryptografischen Algorithmen generiert: dem DKG Pedersen 91 Distributed Key Generation Protocol und dem Shamir Key Sharing Protocol. Auf der Grundlage jedes dieser Algorithmen wird ein öffentlicher Zwischenschlüssel generiert. Dann werden diese beiden Schlüssel zu einem gemeinsamen kombiniert.
Das Diagramm der Schlüsselbaugruppe ist in der Abbildung unten dargestellt.
Im Allgemeinen mag ein solches System überflüssig erscheinen, aber auf diese Weise können wir die maximale Vertraulichkeit der Abstimmung erreichen, bevor sie endet. Dies liegt an der Tatsache, dass sich der mit dem DKG-Protokoll generierte private Schlüssel in der zusammengestellten Form niemals an einer Stelle befindet und vor oder nach der Generierung nicht böswillig gestohlen werden kann. Seine Teile gehören unabhängigen Parteien, die nur über die Blockchain miteinander interagieren.
Wenn es jedoch nicht möglich ist, ein Quorum unabhängiger Teilnehmer am Blockchain-Netzwerk zu sammeln, wird ein Verfahren zur gemeinsamen Nutzung von Schlüsseln zwischen unabhängigen Teilnehmern eingeleitet, die Verwalter einzelner Teile des auf externen Medien aufgezeichneten Schlüssels sind (Kommissionsschlüssel).
Das Verfahren zur Erstellung eines gemeinsamen öffentlichen Verschlüsselungsschlüssels beginnt am Vorabend der Abstimmung mit dem Verfahren zur Erstellung eines öffentlichen Schlüssels der Kommission... Zu einem bestimmten Zeitpunkt vor Beginn der Abstimmung wird in Anwesenheit von Beobachtern und Journalisten auf einem sicheren Laptop, der nicht mit dem lokalen Netzwerk oder dem Internet verbunden ist, mithilfe eines speziellen Dienstprogramms ein Schlüsselpaar generiert, gefolgt von der Aufteilung des privaten Schlüssels in n1 Teile und der Aufzeichnung auf speziellen Medien. Die Wahlkommission bestimmt durch ihre Entscheidung die Träger der Teile des privaten Schlüssels. In der Phase der Erstellung und Initialisierung einer Abstimmung wird der öffentliche Schlüssel der Kommission in der Blockchain aufgezeichnet.
Anschließend wird die Erstellung der Abstimmung im Blockchain-Netzwerk eingeleitet. Nach dem Erstellen einer Abstimmung auf den Zählservern wird automatisch das Verfahren zum Generieren des öffentlichen DKG-Schlüssels gestartet .
Teilnehmer am Verfahren zur Generierung verteilter Schlüssel sind n Stimmenzählserver, über die wir weiter oben im Übersichtsartikel geschrieben haben . Alle Interaktionsvorgänge zwischen Zählservern, sowohl Zwischen- als auch Endoperationen, werden in der Blockchain aufgezeichnet und sind daher transparent und überprüfbar. Das System implementiert das Schwellenwertschema "k aus n", dh beim Entschlüsseln der Daten ist die Teilnahme aller n Parteien, die den öffentlichen Schlüssel DKG gebildet haben, nicht erforderlich, eine geringere Anzahl von Teilnehmern k ist ausreichend. Dies ermöglicht die Entschlüsselung von Abstimmungsergebnissen, selbst wenn nk-Zählserver nicht verfügbar sind oder ihre privaten Schlüssel verloren gegangen sind.
Zur Generierung des öffentlichen Schlüssels wird der DKG-Algorithmus (Distributed Key Generation) verwendet, der im Artikel "Ein Schwellenwert-Kryptosystem ohne vertrauenswürdige Partei" von Torben Pryds Pedersen beschrieben und auf elliptische Kurven übertragen wird. Es wird davon ausgegangen, dass jeder Server über eine Konstante (vom Registrar im Konto aufgezeichnet) ein Diffie-Hellman-Schlüsselpaar verfügt, das für die sichere Datenübertragung an diesen Server verwendet wird (Export / Import von Schlüsselfreigaben).
Protokollparameter
- Eine elliptische Kurve E und ein Generator P einer Untergruppe dieser Kurve großer Primordnung q. Die aktuelle Implementierung verwendet die Kurve secp256k1 .
- Ein weiterer Generator Q derselben Untergruppe, für den der Wert niemandem bekannt.
- (k, n), wobei n die Gesamtzahl der Teilnehmer ist, die Schlüsselpaare generiert haben, und k die Mindestanzahl von Teilnehmern ist, die erforderlich ist, um das gemeinsame Geheimnis wiederherzustellen . Das heißt, wennk-1-Teilnehmer kompromittiert oder ihre Schlüssel gestohlen werden, hat dies keinerlei Auswirkungen auf die Sicherheit des gemeinsamen Geheimnisses.
Im Allgemeinen lautet der Algorithmus zum Erhalten von Punkt Q wie folgt: Es wird eine beliebige Folge von Bytes verwendet, beispielsweise die Zeichenfolge "Hallo Welt!", Und daraus wird der Hash h = Hash ("Hallo Welt!") Berechnet, wonach wir die Folge von Bytes h in eine Zahl und umwandeln Erwägen , wobei p der Modul der Kurve ist, ersetzen wir in die Gleichung der Kurve: und versuche es für y zu lösen. In Ermangelung einer Lösung erhöhen wir x0 und versuchen erneut, die Gleichung für einen neuen Wert von x0 zu lösen, und so weiter.
Schritt 0.
Jedem der n Server wird eine eindeutige Sequenznummer von 1 bis n zugewiesen. Dies ist erforderlich, da der Lagrange-Koeffizient von der Seriennummer des Servers abhängt.
Schritt 1 - Erstellen eines DKG mit öffentlichem Schlüssel.
Jeder j-te Server, j = 1, ..., n:
1. Erzeugt ein Paar aus privatem Schlüssel 〖priv〗 _j und öffentlichem Schlüssel
2. Übernimmt eine Pedersen-Verpflichtung für den öffentlichen Schlüssel:
Erzeugt eine Zufallszahl r_j
Berechnet einen Punkt
mit dem Messgerät
3 veröffentlicht. Nachdem alle Server ihre C_i-Werte veröffentlicht haben, wird der Skalar r_j veröffentlicht.
Mithilfe von Skalaren kann jeder die öffentlichen Schlüssel jedes Servers wiederherstellen und berechne den öffentlichen Schlüssel DKG .
Der öffentliche Schlüssel DKG wird in die Blockchain geschrieben.
Schritt 2 - Polynome erzeugen und Schatten verteilen.
Jeder j-te Server, j = 1,…, n:
1. Erzeugt ein zufälliges Polynom vom Grad k-1:
wobei der Koeffizient , und der Rest sind zufällige Elemente des Feldes GF (q).
2. Zählt die Werte des Polynoms
3. Verschlüsselt den Wert Verwenden des öffentlichen Export- / Importschlüssels des i-ten Servers für jedes i und Veröffentlichen der Verschlüsselungsergebnisse unter Verwendung des Messgeräts.
Schritt 3 - Überprüfen der Koeffizienten der Polynome.
Jeder j-te Server, j = 1, ..., n:
1. Veröffentlicht jeden Koeffizienten seines Polynoms multipliziert mit dem Generator P.
2. Dekodiert alle Bedeutungen und überprüft ihre Richtigkeit:
Berechnet
Berechnet die Summe
Wenn A = B, wird das Ergebnis akzeptiert, andernfalls wird eine Beschwerde gegen Server i veröffentlicht und das Protokoll von Anfang an gestartet - fahren Sie mit Schritt 0 fort.
3. Wenn niemand Beschwerden hat, berechnet es seinen privaten Schlüssel. Der
öffentliche Schlüssel DKG kann wiederhergestellt werden und anhand von Daten überprüft, die von den Zählservern in der Phase der Abstimmungsinitiierung in die Blockchain geschrieben wurden. Es ist notwendig, die öffentlichen Schlüsselpunkte aller Entschlüsselungen zu nehmen und hinzuzufügen. Das Ergebnis ist derselbe Wert, der in der Blockchain aufgezeichnet ist wie der öffentliche Schlüssel DKG.
Basierend auf dem öffentlichen Schlüssel der Kommission, die in das System geladen wird, und den öffentlichen Schlüsseln der Zählserver wird ferner ein gemeinsamer öffentlicher Verschlüsselungsschlüssel gemäß der folgenden Formel erzeugt:
MainPubKey = Hash (PubDKG, PubCommission) * PubDKG + Hash (PubCommission, PubDKG) * PubCommission
Alle öffentlichen Schlüssel werden zusammen mit Zwischenberechnungen zur einfachen Überprüfung durch Beobachter in die Blockchain geschrieben. Der gemeinsam genutzte öffentliche Verschlüsselungsschlüssel wird aus der Blockchain gelesen und an die Geräte der Benutzer übertragen, wenn der Newsletter angezeigt wird.
Beschreibung des Bulletin-Verschlüsselungsschemas
Nachfolgend finden Sie eine Beschreibung des Verfahrens zum Verschlüsseln von Stimmzetteln nach dem El-Gamal-Schema für elliptische Kurven.
Das El Gamal-Verschlüsselungsschema auf elliptischen Kurven ermöglicht es, eine Verschlüsselung zu implementieren, die in Bezug auf die Addition homomorph ist, wobei als Ergebnis der Additionsoperation über den Chiffretext eine verschlüsselte Summe der ursprünglichen Werte erhalten wird.
Verschlüsselt (A) + verschlüsselt (B) = verschlüsselt (A + B).
Um diese Eigenschaft des Algorithmus zu nutzen, wird der ausgefüllte elektronische Stimmzettel als eine Folge von Nullen und Einsen dargestellt. Die Anzahl der Zeichen entspricht der Anzahl der Auswahlmöglichkeiten, während die ausgewählte durch eins dargestellt wird, die anderen Auswahlmöglichkeiten durch Nullen.
Die Länge des privaten Schlüssels bei Verwendung des ElGamal-Algorithmus für elliptische Kurven wird mit 256 Bit gewählt, während der öffentliche Schlüssel der Punkt der elliptischen Kurve ist. Dies entspricht einer Sicherheitsstufe von 128 Bit (zum Knacken sind 2 ^ 128 Kurvenpunktoperationen erforderlich). Dieses Niveau wird für die meisten modernen Industrie- und Finanzsysteme als optimal angesehen, einschließlich des russischen Standards GOST 34.10-2018 „Informationstechnologie. Schutz kryptografischer Informationen. Prozesse zur Bildung und Überprüfung elektronischer digitaler Signaturen "(256-Bit-Version)
Secp256k1 wird als elliptische Kurve verwendet.
Angenommen, wir haben ein Schlüsselpaar priv, Pub:
Number priv: 0 <priv <q
Point Pub = priv *
Basisverschlüsselung:
- Es gibt eine Nachricht m, eine kleine Zahl, die wir auf dem Pub-Schlüssel verschlüsseln möchten.
- Berechnen Sie den Punkt M = m * Basis
- Generiere eine Zufallszahl r: 0 <r <q
- Berechnen Sie Punkt R = r * Basis und Punkt C = M + r * Pub
- Chiffretext: (R, C)
Entschlüsselung:
- Hat privaten Schlüssel priv und Chiffretext (R, C)
- Berechnen Sie Punkt M = C - priv * Base
- Rekonstruktion von m: Lösen mit Brute-Force-ECDLP für das Verhältnis M = m * Base
Schema Homomorphismus.
Wir sehen das, wenn wir zwei Nachrichten verschlüsseln und auf dem Pub-Schlüssel:
Dann ihre Summe stimmt mit der verschlüsselten Nachricht überein ...
Somit können alle Stimmzettel "Kandidat für Kandidat" verschlüsselt und gefaltet werden. Lassen Sie zum Beispiel ein offenes Bulletin so aussehen:
Ivanov Petrov Sidorov
0 1 0 Wenn
wir es dann in Punkte umwandeln, erhalten wir:
Ivanov Petrov Sidorov
ZeroPoint Base ZeroPoint,
wobei ZeroPoint ein Punkt im Unendlichen ist.
Und schließlich verschlüsseln wir den Newsletter auf dem Pub-Schlüssel:
Ivanov Petrov Sidorov
Nehmen wir an, wir haben eine solche Abstimmung mit N Wählern durchgeführt. Wenn wir für Ivanov, Petrov und Sidorov die Chiffretexte aus verschiedenen Abstimmungen getrennt hinzufügen, erhalten wir eine zusammenfassende Abstimmung, die verschlüsselte Beträge für jeden der Kandidaten enthält. Dieser zusammenfassende Stimmzettel kann mit dem Entschlüsselungsschlüssel entschlüsselt werden, und die Abstimmungsergebnisse für jeden der Kandidaten können gefunden werden.
Die folgende Abbildung zeigt ein Schema für das Stapeln und Validieren homomorpher Stimmzettel auf der Grundlage von Null-Wissensnachweisen.
Wie aus dem Diagramm ersichtlich, kann ein potenzieller Angreifer keine zusätzlichen Stimmen "einwerfen", indem er eine falsche Nummer auf der Ebene des kryptografischen Protokolls verschlüsselt. Dies wird unter Verwendung von Null-Wissensnachweisen erreicht, auf die später in diesem Artikel eingegangen wird. Darüber hinaus werden die erforderlichen Überprüfungen auch in der Webanwendung des Wählers implementiert.
Beschreibung des Entschlüsselungsverfahrens
Die Stimmen werden aufgrund der homomorphen Verschlüsselung nach dem El-Gamal-Schema ohne Entschlüsselung gezählt, wodurch die Vertraulichkeit des gesamten Abstimmungsverfahrens und jeder einzelnen Abstimmung gewahrt bleibt. Außerdem kann keiner der Server die Abstimmungsergebnisse unabhängig und geheim entschlüsseln.
Um den Chiffretext (R, C) zu entschlüsseln, müssen alle k von n Servern den Wert berechnen und veröffentlichen und Nachweis der Richtigkeit der Chaum-Pedersen-Entschlüsselung (Nachweis, dass die berechnete Ist genau der Punkt R multipliziert mit ohne die Bedeutung preiszugeben ). Dazu ist es auch notwendig, den privaten Schlüssel der Provision von mindestens k1 aus t1 Teilen zu sammeln und mit seiner Hilfe auch die Berechnung durchzuführenmit Veröffentlichung in der Blockchain.
Die Entschlüsselung erfolgt in mehreren Stufen, deren Ergebnisse jeweils in der Blockchain aufgezeichnet werden.
Erster Schritt- teilweise Entschlüsselung. Jeder K der N Server des Systems fügt die Chiffretexte der Stimmen hinzu, erhält den zusammenfassenden Stimmzettel und entschlüsselt seinerseits den privaten Abstimmungsschlüssel. Das Ergebnis dieser Operation ist ein Chiffretext, dessen Kombination mit den Chiffretexten, die als Ergebnis derselben Operationen auf den anderen Zählservern erhalten wurden, sowie mit dem Chiffretext, der auf dem privaten Schlüssel der Kommission empfangen wurde, ein entschlüsseltes Endergebnis ergibt. Es ist wichtig zu beachten, dass alle anderen Chiffretexte unbrauchbar werden, wenn kein Chiffretext aus der Entschlüsselung des privaten Schlüssels der Kommission erhalten wird. Es ist unmöglich, Ergebnisse von ihnen zu erhalten.
Die Ergebnisse der Operation werden in der Blockchain veröffentlicht.
Zweite Phase- Zusammenstellung des privaten Schlüssels der Kommission und teilweise Entschlüsselung des zusammenfassenden Stimmzettels. Dieser Vorgang wird auf einem speziellen PC ohne Internetverbindung ausgeführt. Nachdem der Schlüssel gesammelt wurde, wird die im vorherigen Absatz beschriebene Operation ausgeführt, um den Chiffretext auf dem Provisionsschlüssel zu bilden. Die Ergebnisse dieser Operation werden auch in der Blockchain aufgezeichnet.
Die dritte Stufe ist die endgültige Dekodierung. Die Abstimmungszählserver aggregieren die Ergebnisse K von N Servern, das Entschlüsselungsergebnis auf dem privaten Schlüssel der Kommission, und erstellen die endgültige Entschlüsselung. Anschließend veröffentlichen sie die Abstimmungsergebnisse.
Bitte beachten Sie, dass das Vorhandensein des auf dem privaten Schlüssel der Provision generierten Chiffretextes Voraussetzung ist. Ohne sie findet die Berechnung der Ergebnisse nicht statt.
Basierend auf den veröffentlichten Ergebnissen der teilweisen Entschlüsselung kann jeder Interessent den Vorgang wiederholen und überprüfen, ob die Ergebnisse korrekt gezählt wurden.
Kein Wissensnachweis
Obwohl das DEG-System auf der Ebene der Software und Infrastruktur vor Eindringlingen und Benutzerfehlern geschützt ist, wurden auf der Ebene des kryptografischen Protokolls zusätzliche mathematische Beweise und Überprüfungen bereitgestellt, die keine Übertragung falscher Informationen an das System ermöglichen. Zu diesem Zweck wurden mehrere Mechanismen entwickelt, die auf einem nicht interaktiven Zero-Knowledge-Proof (NIZK) basieren.
Die erste Art von ZKP (Zero-Knowledge Proof), die im System angewendet wird, sind Entfernungsnachweise. Die ZKP-Daten werden bei der Veröffentlichung eines verschlüsselten Stimmzettels verwendet, sodass ohne Informationen darüber, wie der Wähler abgestimmt hat, sichergestellt werden kann, dass der Wähler den Stimmzettel auf seinem Gerät nicht auf eine der folgenden Arten verdorben hat:
- Der Teilnehmer hat keinen Wert größer als eins im Stimmzettel für eine separate Abstimmungsoption verschlüsselt, was sich im Falle einer "verschlüsselten Hinzufügung" auf das Abstimmungsergebnis auswirken würde.
- Der Teilnehmer hat nicht mehr als eine Option für jede Frage im Stimmzettel gewählt, es sei denn, dies ist im Verfahren zum Ausfüllen des Stimmzettels vorgesehen.
Eine detailliertere Beschreibung der NIZK-Implementierung sowie deren Überprüfung wird in einem separaten Artikel erörtert.
Struktur der Datensätze in der Blockchain
Alle Informationen in der Blockchain werden von drei Arten von Transaktionen aufgezeichnet:
- CreateContract - um einen intelligenten Vertrag für eine bestimmte Abstimmung zu erstellen. Darüber hinaus werden in diesem intelligenten Vertrag alle Informationen zur Abstimmung zusammengefasst. Wenn zwei (oder mehr) Stimmen gleichzeitig abgegeben werden, werden jeweils zwei (oder mehr) Kopien des Vertrags erstellt.
- CallContract - für die Interaktion mit einem intelligenten Vertrag für verschiedene Vorgänge, von denen eine Liste unten angegeben ist.
- Datentransaktion - zum Aufzeichnen der Wählerliste nach dem Erstellen einer Instanz des Voting-Smart-Vertrags und vor dem Starten der Abstimmung selbst.
Die Interaktion mit einem intelligenten Vertrag wird durch die folgenden Vorgänge ausgeführt:
- Schreiben von Basisdaten in einen intelligenten Vertrag. Hier werden die öffentlichen Schlüssel der Zählserver gespeichert, die am kryptografischen Protokoll teilnehmen, das Schwellenwertschema, die Schlüssel zur Überprüfung der blinden Signatur und andere Daten, die für die Organisation des Protokolls und die Abstimmung im Allgemeinen erforderlich sind.
- dkgScalar, dkgCommit, dkgShadows - Daten, die erforderlich sind, um einen öffentlichen Schlüssel für die Verschlüsselung von Stimmzetteln zu erstellen und einen Schwellenwert k von n Schemata zu implementieren. Wir werden später in diesem Artikel mehr darüber sprechen.
- addMainKey – .
- blindSigIssue – .
- vote – .
- finishVoting – . .
- Decryption – . .
- ComissionDecryption – .
- Results – . , .
Eine Wählerabstimmungstransaktion umfasst die Blockchain-Adresse und den öffentlichen Schlüssel eines Wählers, einen verschlüsselten Stimmzettel, eine blinde Signatur und eine elektronische Signatur, die auf dem anonymen privaten Schlüssel des Wählers generiert wird (siehe zuvor veröffentlichten Artikel zur Anonymisierung).
Die folgenden Abbildungen zeigen die Anzeige einer Transaktion mit einer Stimme im Blockchain-Client.
Alle Informationen zur Abstimmung werden in einem intelligenten Vertrag zusammengefasst und stehen Beobachtern über den Blockchain-Client oder in Form einer CSV-Datei für jedermann zur Verfügung.
Die folgende Abbildung zeigt die Anzeige aggregierter Informationen in einem Smart-Vertrag.
* Daten vom Testserver.
Mit den Funktionen der Waves Enterprise-Plattform können Sie eine recht komplexe Logik mit einem Statusmodell, einer Überprüfung der blinden Signatur und der Zählung gültiger und verdorbener Stimmzettel implementieren.
Überprüfung des kryptografischen Protokolls und des Abstimmungsprozesses
Die erste grundlegende Überprüfung, die über die Blockchain-Plattform und den Blockchain-Client durchgeführt werden kann, besteht darin, zu überprüfen, ob die Anzahl der Wähler auf der Wählerliste mit der Anzahl der abgegebenen Stimmzettel und der Anzahl der aufgezeichneten Stimmen übereinstimmt.
Die Überprüfung der Richtigkeit der Zählung erfolgt durch Wiederholen der Arbeit des Zählservers durch den Beobachter, um verschlüsselte Stimmzettel von Kandidat zu Kandidat zusammenzufassen. Dies erfolgt durch sequentielles Addieren der Punkte der elliptischen Kurve, die jedem Kandidaten entsprechen.
Anschließend kann mithilfe des empfangenen verschlüsselten Zusammenfassungsbulletins und des Entschlüsselungsnachweises, die in der Blockchain veröffentlicht sind, die Richtigkeit der von jedem Zählserver durchgeführten Summierung und teilweisen Entschlüsselung überprüft werden.
Zu diesem Zeitpunkt ist klar, ob der vom Beobachter empfangene verschlüsselte Betrag dem entspricht, was jeder der Zählserver aufgezeichnet hat.
Danach können Sie die Richtigkeit der Entschlüsselung der Abstimmungsergebnisse überprüfen. Dazu müssen Sie Chiffretexte aus Transaktionen mit der Art der Operationen Entschlüsselung und Provisionsentschlüsselung entnehmen und analog zu den Stimmzetteln die Punkte der elliptischen Kurve für jeden Kandidaten hinzufügen.
Der Quellcode für die kryptografischen Operationen ist in diesem GitHub-Repository verfügbar .