paint-brush
ZkDemocracy: die einfachste Lösung für anonymes, Zero-Knowledge-basiertes Abstimmungsverhaltenvon@thebojda
807 Lesungen
807 Lesungen

ZkDemocracy: die einfachste Lösung für anonymes, Zero-Knowledge-basiertes Abstimmungsverhalten

von Laszlo Fazekas6m2024/09/16
Read on Terminal Reader

Zu lang; Lesen

Die repräsentative Demokratie steht vor Herausforderungen und es bedarf neuer, direkterer Lösungen. zkDemocracy ist ein Proof of Concept, der zeigt, dass wir anonyme digitale Abstimmungen kostengünstig organisieren und den Menschen so die Möglichkeit geben können, an Entscheidungsprozessen teilzunehmen.
featured image - ZkDemocracy: die einfachste Lösung für anonymes, Zero-Knowledge-basiertes Abstimmungsverhalten
Laszlo Fazekas HackerNoon profile picture


Unsere gegenwärtigen Systeme, die auf repräsentativer Demokratie basieren, sind mit vielen Problemen konfrontiert. Tatsächlich sind sie insofern dysfunktional, als sie das grundlegende Ziel der Demokratie nicht erfüllen, nämlich sicherzustellen, dass sich der Wille der Mehrheit durchsetzt.


Das folgende Diagramm ist jedem bekannt:

Quelle: https://commons.wikimedia.org/wiki/File:How_to_Steal_an_Election_-_Gerrymandering.svg


Durch die strategische Auswahl der Wahlkreise kann es passieren, dass eine Partei gewinnt, obwohl nur eine Minderheit der Wähler sie unterstützt. Aber das ist nur eines von vielen Problemen. Die Teilnahme an der Politik erfordert viel Geld, was das politische System anfällig für finanzielle Einflussnahme macht. Die Systeme, die wir für demokratisch halten, dienen in Wirklichkeit privaten Interessen und Unternehmen, nicht den Wählern (siehe State Capture ).


Die Lösung wäre, die Menschen viel direkter an der Entscheidungsfindung zu beteiligen, durch direkte Demokratie oder Liquid Democracy. Natürlich ist es in der Realität nicht möglich, zu jedem Thema papierbasierte Referenden zu organisieren, da solche Abstimmungen extrem ressourcenintensiv sind. Aber ist es nicht möglich, dies digital und kostengünstig zu lösen und gleichzeitig die Anonymität und Sicherheit einer papierbasierten Abstimmung zu gewährleisten? Ich begann vor etwa zwei Jahren, nach einer Antwort auf diese Frage zu suchen. So stieß ich auf Coin Mixer und Zero-Knowledge-Proof-Technologie.


Das Wesentliche an Coin-Mixern ist, dass Blockchain-Transaktionen nicht nachvollziehbar sind. Ein solcher Mixer funktioniert wie ein großer Pool. Benutzer zahlen ihre Coins auf der einen Seite ein und heben sie auf der anderen Seite ab. Der Clou dabei ist, dass wir nicht wissen, wer auf der anderen Seite welche Coins abhebt und gleichzeitig sichergestellt ist, dass jeder nur den Betrag abheben kann, den er eingezahlt hat. Genau dieses System braucht man für anonyme Abstimmungen. Jeder erhält einen Stimmzettel, auf dem er seine Stimme abgeben kann. Wir wissen nicht, wer welche Stimme abgegeben hat, aber wir können sicher sein, dass jede Person nur eine Stimme abgibt.


Also habe ich mich in den Quellcode eines der beliebtesten Münzmixer, Tornado Cash, vertieft, um zu verstehen, wie er funktioniert. Auch darüber wurde ein Artikel geschrieben. Nachdem ich die Funktionalität vollständig verstanden hatte, habe ich die Kernfunktionen getrennt und eine Bibliothek namens zk-merkle-tree erstellt, mit der jeder anonyme Abstimmungen durchführen kann. Außerdem wurde eine Proof-of-Concept-Abstimmungsanwendung entwickelt, mit der jeder sein eigenes System erstellen kann. Das System ist Blockchain-basiert, was es sicher macht, aber gleichzeitig auch sehr schwierig zu verwenden ist. Wenn wir auf einer vorhandenen Blockchain aufbauen, entstehen Transaktionskosten wie die Bereitstellung von Smart Contracts und ähnliche Probleme, während der Betrieb einer eigenen Blockchain eine noch größere Herausforderung darstellt. Ich wollte eine Lösung, die Blockchain-frei und in wenigen Minuten einfach einzurichten ist. So wurde zkDemocracy geboren.


zkDemocracy ist ein traditionelles NodeJS- und MySQL-basiertes System, das in wenigen Minuten eingerichtet werden kann. Es kann im Standalone-Modus betrieben werden, wobei zkDemocracy als vollständige Backend-Schicht dient, oder als in ein größeres System integrierter Dienst.


Die erste Frage, die sich bei einem solchen System stellt, lautet: Wie kann die Sicherheit auf Blockchain-Ebene über eine MySQL-Datenbank gewährleistet werden?


Die Blockchain ist ideal, da sie eine Nur-Anhängen-Lösung ist, bei der keine Änderungen möglich sind, was dabei hilft, die meisten Arten von Betrug herauszufiltern. In Wirklichkeit besteht die einzige Möglichkeit zum Betrügen darin, dass jemand im Namen anderer abstimmt oder dass jemand abstimmt, der dazu nicht berechtigt ist. Diese Möglichkeiten können durch eine ordnungsgemäße Wähleridentifikation verhindert werden. Wenn dies sichergestellt ist, wird Betrug theoretisch unmöglich. Wenn wir also ein solches Nur-Anhängen-System auf MySQL aufbauen können, können wir dasselbe Maß an Sicherheit bieten, das Blockchain bietet.


Die Lösung von zkDemocracy für das Problem besteht darin, dass jede in die Datenbanktabellen eingefügte Zeile mit einem „Checkpoint-Hash“ verknüpft wird. Dies ist ein Keccak256-Hash, der sich aus den Daten der Felder und dem Checkpoint-Hash der vorherigen Zeile zusammensetzt. Ähnlich wie bei einer Blockchain sind die Checkpoint-Hashes verkettet, sodass sich bei einer Änderung in der Datenbank auch der Checkpoint-Hash jeder Zeile nach der geänderten Zeile ändert.


Wenn sich jemand als Wähler registriert oder eine Stimme abgibt, stellt das System eine digital signierte, zertifizierte Quittung aus, die bestätigt, dass die Transaktion abgeschlossen wurde. Diese Quittung enthält auch den Checkpoint-Hash. Da sowohl die Mitgliederliste als auch die Stimmenliste nach der Abstimmung vollständig öffentlich sind, kann jeder überprüfen, ob Änderungen vorgenommen wurden, und wenn ja, kann er dies mit der vom Server bereitgestellten digital signierten Quittung beweisen.


Die aktuelle Liste der registrierten Wähler und der neueste Checkpoint-Hash können jederzeit aus dem System abgerufen werden, sodass jeder Betrug sofort nachweisbar ist. Darüber hinaus besteht die Möglichkeit, den Checkpoint-Hash in regelmäßigen Abständen (z. B. alle 10 Minuten) in die Blockchain zu schreiben. Dadurch wird zusätzlich sichergestellt, dass die Datenbank nicht mehr geändert werden kann, nachdem der Hash in die Blockchain geschrieben wurde. Diese Lösung bietet vollständige Sicherheit auf Blockchain-Ebene, da jeder Versuch, die Daten zu manipulieren, auch eine Änderung des Hashs in der Blockchain erfordern würde.


Es ist klar, dass mit der obigen Lösung das gleiche Sicherheitsniveau wie durch die Blockchain erreicht werden kann, während bekannte Technologien (wie MySQL-Cluster) zum Betreiben des Systems verwendet werden.


Ich habe die Semaphore-Bibliothek zum Generieren und Überprüfen von Zero-Knowledge-Beweisen verwendet. Sie funktioniert ähnlich wie zk-merkle-tree, wurde jedoch geprüft und verfügt über eine größere Entwicklerbasis.


zkDemocracy hat zwei grundlegende Elemente: Gruppe und Abstimmung. Eine Gruppe ist eine Menge von Wählern, wie Wähler aus einem bestimmten Wahlbezirk, Unternehmensaktionäre usw. In ähnlicher Weise stellt die Abstimmung ein Abstimmungsereignis dar, das eine Präsidentschaftswahl, ein Referendum, eine Unternehmensentscheidung usw. sein kann. Mehrere Gruppen können an einem einzigen Abstimmungsereignis teilnehmen; bei einem Referendum beispielsweise nehmen alle Wahlbezirke an der Abstimmung teil und die Ergebnisse werden aggregiert. Ebenso kann eine Gruppe an mehreren Abstimmungsereignissen teilnehmen. Wenn also die Gruppen für die Wahlbezirke eingerichtet sind, können mit diesen Gruppen mehrere Referenden abgehalten werden. Mit anderen Worten, Gruppen und Abstimmungen haben eine nm-Beziehung.


Sehen wir uns nun an, wie ein Referendum funktionieren würde, wenn es auf dem zkDemocracy-System basiert.


Der erste Schritt besteht darin, die Wahlberechtigten zu identifizieren. In einem papierbasierten Wahlsystem geschieht dies, indem jedem Wahlbezirk eine Liste der Wahlberechtigten für diesen Bezirk zur Verfügung gestellt wird. Wenn jemand zur Wahl erscheint, wird sein Name von der Liste gestrichen, um sicherzustellen, dass er nur einmal wählen kann.


Bei digitalen oder Online-Wahlen ist dieser Prozess viel einfacher. Wenn der Staat eine Form der digitalen Identifizierung bereitstellt, kann die Überprüfung vollständig automatisiert werden. Der Wähler gibt eine eindeutige Verpflichtung ab, die mit seinem Namen in der Datenbank aufgezeichnet wird. Dies ist die Hälfte des Zero-Knowledge-Beweises. Die Liste der Wähler und Verpflichtungen ist öffentlich, durch einen Checkpoint-Hash geschützt und eine digital signierte, zertifizierte Liste kann jederzeit angefordert werden. Wenn das Identifizierungssystem sicher ist, wird Betrug in dieser Phase daher theoretisch unmöglich.


Wenn kein digitales Ausweisdokument vorgelegt wird, ist eine manuelle Identifizierung erforderlich. Dies kann persönlich oder sogar über ein Videokonferenzsystem erfolgen (obwohl die Online-Identifizierung aufgrund der fortschrittlichen Deep-Fake-Technologie ihre Risiken birgt). Die Identifizierung kann von einer Person durchgeführt werden, ist jedoch sicherer, wenn sie von mehreren zufällig ausgewählten Personen durchgeführt wird. Zusätzliche Sicherheit wird geboten, wenn eine Videoaufzeichnung der Identifizierung gemacht und für eine begrenzte Zeit gespeichert wird. Während dieser Zeit kann eine unabhängige Organisation die Aufzeichnungen stichprobenartig überprüfen, um das Betrugsrisiko weiter zu minimieren. Dieses Identifizierungssystem ist genauso sicher oder sogar sicherer als das bei der derzeitigen papierbasierten Stimmabgabe verwendete System.


Nach erfolgreicher Registrierung wird der Vorgang sehr einfach, da der Wähler an beliebig vielen Abstimmungen teilnehmen kann. Durch den Checkpoint-Hash und die öffentlich zugängliche Wählerliste ist sichergestellt, dass nur berechtigte Personen abstimmen können. Die gesamte Datenbank für jede Abstimmung ist ebenfalls öffentlich und durch einen Checkpoint-Hash geschützt. Jeder kann mithilfe von Zero-Knowledge-Beweisen überprüfen, ob eine bestimmte Stimme von einem gültigen Wähler stammt, und jeder Wähler kann jederzeit überprüfen, ob seine eigene Stimme korrekt in der Datenbank erfasst ist. Wähler können etwaige Betrugsfälle mithilfe der vom System bereitgestellten digital signierten Quittung leicht nachweisen.


Es ist klar, dass mit dem zkDemocracy-System sichergestellt werden kann, dass Datenbanken öffentlich und für jeden zugänglich sind und dass die Konsistenz der Datenbank nachweisbar ist, während gleichzeitig die Anonymität der Wähler gewahrt bleibt.


Das System ist auf GitHub unter der folgenden URL verfügbar: https://github.com/TheBojda/zkdemocracy


Ich plane außerdem, einen weiteren Artikel speziell für Entwickler zu schreiben. In der Zwischenzeit finden Sie auf GitHub eine ausführliche Entwicklerdokumentation und Beispielcode zur Verwendung des Systems.


Mein Ziel mit dieser Entwicklung ist es, zu beweisen, dass die technologischen Voraussetzungen vorhanden sind, um unsere demokratischen Systeme zu verbessern. Es liegt an uns, wie wir diese Möglichkeiten nutzen können...