zkcream (Confidential Reliable Ethereum Anonymous Mixer) study overall
web3 での匿名投票を実現する CREAMについてStudyした概要をまとめます。
目的
- 匿名での投票実装例を知る
- 投票に関して外部から何が検証できるのかを知る
OriginalSource
概要
選挙の主催者は、TokenContractで招待を行い、選挙の結果はzero知識証明の仕組みで秘匿しながらVotingContractないに保存されます。
このプロトコルは、スマート・コントラクトとゼロ知識コンポーネントで構成されている。zkC.R.E.A.Mスマートコントラクトは、投票ステータス、パーミッション、証明の検証をオンチェーンで処理する。ゼロ知識コンポーネントはオフチェーンで動作し、ユーザーが証明を生成できるようにし、これらの証明が有効であれば、スマートコントラクトは状態を更新できる。
システム設計
zkC.R.E.A.Mはシンプルな設計を目指しており、基本的な機能は投票に使用されるトークンの受け取りを意味する「預け入れ」と、投票の実行を意味する「引き出し」である。
投票の秘密性を確保するため、投票者はデポジットを行う際にデバイス上でランダムな値を生成する。この乱数値を知っている人なら誰でも引き出せるので、トークンの出所(つまり、預け入れを行った住所)は秘密にすることができる。
zero knowledge (投票内容の秘匿に利用)
creamではcircomという zkproof 用のコンパイラを利用しています。
circom では .circom fileで定義した内容をコンパイルすることで、
snarkjsへInputするwasmを生成します。
snarkjs は zero knowledge のproof を生成するコードと、
それを solidity 上でverify するコードを生成します。
MACI: Minimal Anti-Collusion Infrastructure
ehereumの発明者vitalk自身が提案している、談合への耐性も実現しています。
冒頭の下記の文章で、投票に対する深い考察が述べられています。
談合への耐性が必要だが、ブロックチェーンの保証(主に正しい実行と検閲への耐性)も必要なアプリケーションがあるとする。投票はこのユースケースの最有力候補である。リンク先の記事で議論されている理由から談合耐性は不可欠であり、正しい実行の保証は投票集計メカニズムへの攻撃を防ぐために必要であり、投票の検閲防止は有権者からの投票をブロックする攻撃を防ぐために必要である。私たちは、中央集権的な信頼モデル(ボブが正直であれば談合への耐性があり、ボブが不誠実であれば談合への耐性はない)で談合への耐性を保証し、ブロックチェーンの保証を無条件で提供するシステムを作ることができます
仕組みの要約
システムの構成要素としては、参加者からの公開鍵のレジストリがあります。各参加者は、自分の鍵を個人的に管理し、デポジットを保持する必要があります。もし誰かが自分のアドレスの秘密鍵で署名を公開すれば、そのデポジットを奪い、アカウントをリストから削除することができます。これは、参加者が第三者に鍵へのアクセスを許すことを強く抑止します。
また、このシステムには、プライベートキーを持つオペレータが存在し、チェーン上のメッセージを処理します。参加者は、自分の行動を示すメッセージを公開することも、鍵の変更を要求するメッセージを公開することもできます。ユーザーが特定の行動を取ったことを証明したい場合、チェーン上のトランザクションがその行動を含むデータの暗号化バージョンであることをゼロ知識証明で示すことができます。
ただし、ユーザーは、早い段階で鍵を変更するトランザクションを送信していなかったことを証明することはできません。また、他のユーザーが鍵にアクセスして変更することを許可することも可能ですが、これは50%の成功率しかなく、デポジットをリスクにさらす可能性があります。
この提案された解決策は、キーの売却攻撃が行われる場面や、オリジナルのキーが不正な鍵変更を防ぐ信頼できるハードウェア内にある場合には対応できません。これらの問題は、より複雑な署名スキームや「対面ゼロ知識証明プロトコル」を使用することで緩和することが可能かもしれません。
参考:Mixer (匿名化)の状況
投票などの使用例は正しい使い道なのですが、 mixer の技術を使い、仮想通貨を匿名でやり取りするTornadoCashはマネーロンダリングで利用されるケースが多くあり2022年8月、米国財務省はこのサービスをブラックリストに掲載し、米国市民、居住者、企業の利用を違法とした。プロジェクトのウェブドメインとGitHubアカウントも閉鎖され、開発者の1人が逮捕されました。 https://en.wikipedia.org/wiki/Tornado_Cash
なので、もともとの mixer の技術を調べようと思うと すでにサイトがないということがあるようです。
Mixer自体の解説は下記Youtubeが参考になりました。
Discussion