paint-brush
ZkDemocracy: ゼロ知識証明に基づく匿名投票の最も簡単なソリューション@thebojda
707 測定値
707 測定値

ZkDemocracy: ゼロ知識証明に基づく匿名投票の最も簡単なソリューション

Laszlo Fazekas6m2024/09/16
Read on Terminal Reader

長すぎる; 読むには

代表制民主主義は課題に直面しており、より直接的な新しい解決策が必要です。zkDemocracy は、匿名のデジタル投票を低コストで組織し、人々が意思決定に参加できることを示す概念実証です。
featured image - ZkDemocracy: ゼロ知識証明に基づく匿名投票の最も簡単なソリューション
Laszlo Fazekas HackerNoon profile picture


代表制民主主義に基づく現在の制度は多くの問題を抱えています。実際、多数派の意思が優先されるという民主主義の根本的な目的が達成されていないという意味で、現在の制度は機能不全に陥っています。


次の図は誰もがよく知っているでしょう。

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


選挙区を戦略的に選択することで、少数の有権者の支持しか得られなかった政党が勝利することもあります。しかし、これは多くの問題のうちの 1 つにすぎません。政治に参加するには多額の資金が必要であり、政治制度は金銭的影響を受けやすくなります。私たちが民主的だと思っている制度は、実際には有権者ではなく、私益と企業に奉仕しているのです ( 「国家乗っ取り」を参照)。


解決策としては、直接民主主義や液体民主主義など、もっと直接的な方法で人々が意思決定に参加することだろう。もちろん、現実的には、あらゆる問題について紙ベースの国民投票を実施するのは現実的ではない。そのような投票は膨大なリソースを必要とするからだ。しかし、紙ベースの投票の匿名性と安全性を確保しながら、デジタルで低コストで解決することはできないだろうか。私はこの疑問に対する答えを探し始めたのが、約2年前だ。そこで、コインミキサーとゼロ知識証明技術に出会った。


コインミキサーの本質は、ブロックチェーンの取引を追跡不可能にすることです。このようなミキサーは、大きなプールのように機能します。ユーザーは、コインを一方に預け、他方から引き出します。重要なのは、誰がどのコインを他方から引き出したかはわからない一方で、誰もが預けた金額と同じ金額しか引き出せないようにすることです。これはまさに匿名投票に必要なシステムです。誰もが投票用紙を受け取り、それを使って投票します。誰がどの票を投じたかはわかりませんが、各人が 1 票だけ投じていることは確かです。


そこで、最も人気のあるコインミキサーの1つであるTornado Cashのソースコードを詳しく調べて、その仕組みを理解しました。これについては記事も書かれていました。機能を十分理解した後、コア機能を分離し、誰でも匿名投票を行うことができるzk-merkle-treeというライブラリを作成しました。概念実証用の投票アプリケーションも開発され、誰でも独自のシステムを構築できるようになりました。このシステムはブロックチェーンベースであるため安全ですが、同時に非常に使いにくくなっています。既存のブロックチェーン上に構築すると、スマートコントラクトの展開などのトランザクションコストなどの問題が発生する一方で、独自のブロックチェーンを運用するのはさらに大きな課題です。ブロックチェーンフリーで、数分で簡単にセットアップできるソリューションを求めていました。こうしてzkDemocracyが誕生しました。


zkDemocracy は、わずか数分でセットアップできる従来の NodeJS および MySQL ベースのシステムです。zkDemocracy は、完全なバックエンド レイヤーとして機能するスタンドアロン モードで動作することも、大規模なシステムに統合されたサービスとして動作することもできます。


このようなシステムで最初に生じる疑問は、「MySQL データベース上でブロックチェーン レベルのセキュリティをどのように確保できるか」ということです。


ブロックチェーンは、変更が不可能な追加専用のソリューションであるため、ほとんどの種類の不正行為を除外するのに役立ちます。実際には、不正行為を行う唯一の方法は、誰かが他の人に代わって投票するか、投票する権限のない人が投票することです。これらの可能性は、適切な投票者識別によって防止できます。これが保証されれば、不正行為は理論的に不可能になります。したがって、このような追加専用のシステムを MySQL 上に構築できれば、ブロックチェーンが提供するのと同じレベルのセキュリティを提供できます。


zkDemocracy は、データベース テーブルに挿入された各行を「チェックポイント ハッシュ」に関連付けるという方法でこの問題に対処しています。これは keccak256 ハッシュであり、フィールドのデータと前の行のチェックポイント ハッシュで構成されています。ブロックチェーンと同様に、チェックポイント ハッシュは連鎖しているため、データベースで何かが変更されると、変更された行以降のすべての行のチェックポイント ハッシュも変更されます。


誰かが投票者として登録したり、投票したりすると、システムはトランザクションが完了したことを確認するデジタル署名された認証済み領収書を提供します。この領収書にはチェックポイント ハッシュも含まれています。投票後はメンバー リストと投票リストの両方が完全に公開されるため、変更があったかどうかを誰でも確認でき、変更があった場合は、サーバーから提供されるデジタル署名された領収書を使用してそれを証明できます。


登録有権者の最新リストと最新のチェックポイント ハッシュはいつでもシステムから取得できるため、不正行為を即座に証明できます。さらに、チェックポイント ハッシュを定期的に (たとえば 10 分ごとに) ブロックチェーンに書き込むオプションがあり、ハッシュがブロックチェーンに書き込まれた後はデータベースを変更できないことがさらに確実になります。このソリューションは完全なブロックチェーン レベルのセキュリティを提供します。データを改ざんしようとすると、ブロックチェーン上のハッシュも変更する必要があるためです。


上記のソリューションでは、システムを運用するために使い慣れたテクノロジー (MySQL クラスターなど) を使用しながら、ブロックチェーンによって提供されるのと同じレベルのセキュリティを実現できることは明らかです。


ゼロ知識証明の生成と検証には、 Semaphore ライブラリを使用しました。これは zk-merkle-tree と同様に動作しますが、監査済みであり、開発者ベースが大きくなっています。


zkDemocracy には、グループと投票という 2 つの基本要素があります。グループとは、特定の選挙区の有権者、企業の株主などの有権者の集合です。同様に、投票は大統領選挙、国民投票、企業の意思決定などの投票イベントを表します。複数のグループが 1 つの投票イベントに参加できます。たとえば、国民投票では、すべての選挙区が投票に参加し、結果が集計されます。同様に、グループは複数の投票イベントに参加できます。したがって、選挙区のグループが確立されている場合、これらのグループで複数の国民投票を開催できます。つまり、グループと投票は nm 関係にあります。


それでは、zkDemocracy システム上に国民投票を構築した場合、どのように機能するかを見てみましょう。


最初のステップは、投票資格のある人を特定することです。紙ベースの投票システムでは、各選挙区にその選挙区の有権者リストを提供することでこれを行います。投票に来た人がいれば、その人の名前がリストから消され、その人は 1 回しか投票できないことが保証されます。


デジタル投票やオンライン投票では、このプロセスははるかに簡単です。州が何らかのデジタル ID を提供している場合、検証は完全に自動化できます。投票者は固有の誓約を提出し、それが名前とともにデータベースに記録されます。これがゼロ知識証明の半分です。投票者と誓約のリストは公開されており、チェックポイント ハッシュによって保護されており、デジタル署名された認証済みリストはいつでも要求できます。したがって、ID システムが安全であれば、この段階での不正行為は理論的には不可能になります。


デジタル身分証明書が提供されない場合は、手動での身元確認が必要です。これは対面で行うことも、ビデオ会議システムを介して行うこともできます (ただし、オンラインでの身元確認には高度なディープフェイク技術によるリスクがあります)。身元確認は 1 人で実行することもできますが、ランダムに選ばれた複数の人物が行う方が安全です。身元確認のビデオ録画を作成し、一定期間保存すると、セキュリティがさらに強化されます。この期間中、独立した組織が録画をランダムにチェックして、不正の可能性をさらに最小限に抑えることができます。この身元確認システムは、現在の紙ベースの投票で使用されているシステムと同等か、それ以上の安全性を備えています。


登録が正常に完了すると、投票者は好きなだけ投票に参加できるため、プロセスは非常に簡単になります。チェックポイント ハッシュと公開されている投票者リストにより、資格のある個人のみが投票できることが保証されます。各投票イベントのデータベース全体も公開されており、チェックポイント ハッシュによって保護されています。ゼロ知識証明を使用して、特定の投票が有効な投票者からのものであるかどうかを誰でも検証でき、各投票者は自分の投票がデータベースに正しく記録されているかどうかをいつでも確認できます。投票者は、システムによって提供されるデジタル署名された領収書を使用して、不正行為を簡単に証明できます。


zkDemocracy システムでは、データベースが公開され、誰でもアクセスでき、データベースの一貫性が証明可能であることを保証しながら、同時に投票者の匿名性を維持できることは明らかです。


このシステムは、GitHub の次の URL で入手できます: https://github.com/TheBojda/zkdemocracy


開発者向けに別の記事を書く予定です。その間、システムを使用するための詳細な開発者向けドキュメントとサンプル コードは GitHub でご覧いただけます。


この開発の目的は、民主主義制度を改善するための技術的条件が整っていることを証明することです。これらの機会をどのように活用できるかは私たち次第です...