
ゼロ知識証明の力:非中央集権型社会におけるプライバシー主導のイノベーション
TechFlow厳選深潮セレクト

ゼロ知識証明の力:非中央集権型社会におけるプライバシー主導のイノベーション
我々はZK技術の潜在能力のごく一部しか見ておらず、その真の可能性はまだ十分に発掘されていない。
執筆:Salus
1. はじめに
ゼロ知識証明(Zero-Knowledge、略してZK)技術は、分散型世界におけるプライバシーとセキュリティの問題を解決できる。本稿では、DEX、Oracle、投票、オークションの4つの事例を通じて、ZK技術が果たす重要な役割を説明する。ZK技術は、DEX上の取引を検証可能にしつつもユーザーのプライバシーを保護し、ユーザーの身元やその他の取引詳細を隠蔽するために利用される。また、オラクルから取得したデータの正確性を保証し、データの転送や計算プロセス中に改ざんされるリスクを防止できる。ブロックチェーン投票プロジェクトにおいては、資格を持つ有権者が匿名で投票でき、投票情報の事前改ざんを防ぐこともZK技術によって実現できる。さらに、ブロックチェーンオークションプロジェクトでは、入札者の身元に対するプライバシー保護を提供するとともに、虚偽入札の問題を解決することも可能である。
2. 分散型世界におけるプライバシーリスク
ブロックチェーンには秘密がない。すべての情報が公開されているため、プライバシー保護の面で欠点がある。さらに、多くのスマートコントラクトはオンチェーン外のデータに依存しており、これにより追加的なセキュリティリスクが生じる。以下では、これらの2つの特性が引き起こすセキュリティ問題および潜在的リスクについて詳しく考察する。
ブロックチェーンの公開透明性が引き起こすセキュリティ問題
ブロックチェーンの公開透明性は取引の追跡可能性を保証する一方で、セキュリティ上の問題も引き起こす。例えば、DeFiにおける個人情報の漏洩リスクやフロントランニング取引のリスクなどである。
情報漏洩:アドレスタグ染色法、取引IPマッチング、ブロードキャストノードプローブなどの手法により、容易にチェーン上のアドレスと現実世界での真の身元を関連付けることができる。これらの分析手法は、ユーザーの身元だけでなく、行動パターンや投資戦略も明らかにする。例えば、特定のアドレスが頻繁に取引を行うことや特定タイプの取引活動を行うことは、当該ユーザーの投資嗜好や習慣を示唆しており、こうした情報はしばしば不当な競争優位を得るために悪用される。
フロントランニング:攻撃者はブロックチェーンの透明性を利用して、未確認のトランザクションキューを監視することができる。彼らは未処理の取引を分析し、より高い手数料を設定することで、マイナーにその取引を優先的に処理させることができる。これにより、他のユーザーよりも先に取引を実行し、先制優位を得て利益を上げることが可能になる。このような行為は取引プロセスの公平性を歪めるだけでなく、市場操作を引き起こし、他のユーザーにとって不利な状況を生み出す。
したがって、DeFiプロトコルの設計・実装においては、これらの潜在的なセキュリティ脅威を十分に考慮すべきである。ユーザーが個人情報の漏洩や取引行動の分析といったリスクから守られるよう、追加的なプライバシー保護措置の導入を検討すべきである。
ブロックチェーンがオンチェーン外データを取得する際のセキュリティリスク
ブロックチェーンにおいて、スマートコントラクトは直接オンチェーン外データを取得できない。それらはブロックチェーン上の取引データや他のコントラクトの状態にしかアクセスできない。スマートコントラクトはブロックチェーン上で自動実行されるプログラムであり、その実行結果はすべてのノード間で一貫している必要がある。つまり、同じ入力に対して必ず同じ出力が得られなければならない。しかし、オンチェーン外データは変動する可能性があるため、スマートコントラクトが直接これらを取得すると、異なるノードが同じコントラクトを実行しても異なる結果になる可能性があり、これはブロックチェーンの一貫性を損なう。
しかし、多くの場面でスマートコントラクトはオンチェーン外のデータに依存する必要がある。例えば、DEXは特定の株式または暗号資産の最新価格を取得する必要がある。これらの価格データは通常、オンチェーン外の金融市場や他の取引所から取得しなければならない。ブロックチェーンシステムは一般的にオラクルを通じてオンチェーン外データを取得する。スマートコントラクトが必要とするとき、オラクルにリクエストを送り、オラクルがオンチェーン外データを取得してスマートコントラクトに返す。また、オラクルはオンチェーンデータをオンチェーン外に転送することもできる。
ただし、オラクルの導入は新たなセキュリティリスクをもたらす。ある種の状況下では、オラクルが誤った情報や悪意のある情報を提供する可能性がある。したがって、オラクルの設計と実装には安全性への配慮が極めて重要である。
投票やオークションに関わるブロックチェーンプロジェクトも、特別なセキュリティ保護対策を考慮する必要がある。ブロックチェーン技術は投票プラットフォームに透明性と改ざん防止の特性を提供する。しかし、有資格有権者の選別、有権者の匿名投票、投票情報の事前改ざん防止は新たな課題となっている。オンチェーンオークションの核心的な問題は虚偽入札とアカウントの可視性である。相手の資金状況が透けて見えるならば、先制優位を持つことになる。
3. プライバシー駆動によるシーン革新
3.1 ZK Private DEX
ブロックチェーンの公開透明性は、DeFi分野の多くのプロジェクトにプライバシー上の課題をもたらしている。この課題に対し、SalusはDEXを例に挙げ、ZK技術がDEXのプライバシー保護強化に果たす重要な役割を考察する。
プライバシー保護機能を持つprivate DEXを想定する。ZK技術を活用することで、取引情報の一部を隠しつつ、その有効性を検証できる。このDEXでは、登録ユーザー全員、銀行口座、預け入れおよび引き出しの資産名と数量といった部分的情報だけが公開される(図1参照)。取引当事者自身は自分のすべての取引情報を知っているが、他の取引者には完全な取引情報は見えない。以下に5つの具体的な取引イベントを例に挙げる:

図1 部分的情報のみがわかるPrivate DEX、出典 https://arxiv.org/pdf/2309.01667.pdf
このprivate DEXプラットフォームで5件の取引が発生し、それぞれに対応するイベント情報は以下の通りである:
-
Aliceがプラットフォームに1000米ドルを入金。
-
Bobがプラットフォームに10BTCを入金。この時点でのBTC価格は1000米ドル。
-
Aliceがプラットフォーム上で取引を行い、800米ドルを0.5BTCに交換。この時点でのBTC価格は1600米ドル。
-
Aliceがプラットフォームから0.3BTCを引き出し。この時点でのBTC価格は2000米ドル。
-
プラットフォームはAliceの総支出と総収益を記録。それぞれ480米ドルおよび600米ドル。
このprivate DEXプラットフォームはZK技術に基づきプライバシー保護機能を実現しており、完全な取引情報は取引参加者のみが閲覧可能である。プラットフォームは完全な取引イベント情報を公表せず、代わりにプライベートなイベント情報を提供する。次に、これらのプライベートイベント情報が何を指すのか、どのように検証されるかを詳しく説明する:
-
1000米ドルを入金する際、銀行口座はAliceの身元を表示する。その後、Aliceはプラットフォームが生成した資産証明書または署名を受け取る。二重支払いを防止しコンプライアンスを確保するため、署名メッセージには資産詳細以外の追加属性を含める必要がある。これらには、一意の資産識別子、すなわちAliceのユーザー識別子が含まれる。これらの情報はユーザーの匿名性を保つために非表示にするべきである。Aliceには、ZK技術を用いてブラインド化されたユーザー識別子(the blinded user identifier)が登録資格情報(registration credential)と一致することを証明することが要求される。税務申告-顧客コンプライアンス要件(tax-report-client-compliance)を満たすため、資産売却による収益および出金取引は計算対象となる。そのため、入金および取引時に資産購入時の正確なコストを含める必要がある。このため、資産証明書に購入価格を追加属性として導入する。
-
Bobが10BTCを入金する際、プラットフォームはBobの身元を知らない。この取引は法定通貨の入金ではないためである。
-
Aliceが800米ドルを0.5BTCに交換する際、Aliceは1000米ドルの資産証明書を使用し、残りの200米ドルと0.5BTCの新しい証明書を要求する。その詳細は非表示のままとする。プラットフォームは特定条件下でこの要求を承認する。条件には、ZK技術を用いて十分な米ドルを保有していることを証明すること、証明書が同じユーザー識別子を共有していること、残高が非負であること、BTC価格が最新の証明書と一致すること、取引の合計価値が等価であることなどが含まれる。
-
0.3BTCを引き出す際、交換資産を除き、取引操作と同様である。Aliceはブロックチェーン上で引き出し済みBTCの領収書を検証する。
-
総支出が480、総収益が600の場合、Aliceは自身の身元付き有効登録証明書を提示し、新規インデックス付き更新登録証明書の発行を要求する。これにより支出と収益をゼロにリセットし、規制当局に提示するための文書証明書を取得する。文書証明書にはAliceの真の身元、正しい支出480および収益600、およびいくつかの規制支援情報が含まれる。支出と収益は情報漏洩を避けるためプラットフォームが非表示にしており、Aliceはコミットされた支出と収益が登録証明書の値と等しいことを証明すべきである。プラットフォームはブラインド署名(sign blindly)を行う。Aliceはブラインド署名を解除し、メッセージと署名のペアを税務申告のために規制当局に提出する。
3.2 zkOracle
ブロックチェーンベースの農業保険スマートコントラクトを想定する。このコントラクトはオラクルが提供する天候データに基づき、被保険農家への補償支払いの可否を判断する。例えば、ある地域で深刻な干ばつが発生した場合、その地域の農家はこの保険コントラクトから補償を受け取れる。
しかし、オラクルが何らかの理由で誤ってその地域の天候状況を報告した場合、例えば実際には深刻な干ばつが発生しているのに、オラクルが降雨量が正常と報告した場合、このような誤った情報によりスマートコントラクトが誤った判断を下し、実際に干ばつに苦しむ農家への補償支払いを拒否してしまう。
上記の例から、オラクルが提供するデータの正確性を保証することは極めて重要であることがわかる。zkOracleはZK技術に基づくオラクルであり、信頼不要かつ安全なオラクルである。以下では、従来のオラクルとzkOracleの主な違いを具体的に紹介し、なぜZK技術がその中で重要な役割を果たすのかを説明する。
従来のオラクルは3つの異なるタイプに分類でき、以下の4つの次元から各オラクルの差異を説明・比較する:

本稿では、Output OracleおよびI/O Oracleに焦点を当てる。これらのオラクルのデータはいずれもブロックチェーン由来であり、すでにブロックチェーンによる検証と保護が行われている。オラクルの計算および転送プロセスの安全性をどう確保するかが議論の中心となる。
安全なオラクルを実現するため、output oracleおよびI/O oracleをZK技術で改造し、output zkOracleおよびI/O zkOracleを実現できる。以下では、従来のoracle、output zkOracle、I/O zkOracleの動作フローを比較し、output zkOracleおよびI/O zkOracleがどこをZK改造したかを説明する。
1. 従来型オラクル(Traditional Oracle)
従来型オラクルの動作フローは図2の通りである:
ステップ①:データソースからデータを取得
ステップ②:computationコンポーネント内でデータを計算
ステップ③:計算結果を出力

図2 従来型オラクル(Traditional Oracle)
従来型オラクルの動作フローのステップ②とステップ③にZK技術を適用してZK改造を行うことができ、ステップ①は変更しない:
2. Output zkOracle
ステップ②-ZK改造:計算およびZK証明の生成
computationコンポーネント内で、データソースから取得したデータに対してZK技術を用いた計算を行う。通常は並べ替え、集約、フィルタリングなどであり、計算結果としてZK証明が出力される。これにより計算および出力内容が検証可能となる。
ステップ③-ZK改造:ZK証明の検証
ステップ②で計算されたZK証明は、スマートコントラクトまたは他の任意の環境で検証できる。これによりステップ②の計算の正当性を確認できる。

図3 Output zkOracle
3. I/O zkOracle
ステップ②-ZK改造:計算およびZK証明の生成
I/O zkOracleの計算コンポーネントは、output zkOracleとinput zkOracleから構成される。前述のoutput zkOracleと比べ、I/O zkOracleの計算内容は増加しており、input zkOracleではオンチェーン外の計算結果をスマートコントラクト呼び出しのcalldataとして設定することを含む。両者の組み合わせにより、複雑なオンチェーン外計算を活用してスマートコントラクトの自動化操作を実現することが可能になる。
ステップ③-ZK改造:ZK証明の検証
ステップ②の計算出力には、オンチェーンデータ(スマートコントラクト呼び出しのcalldataとして)および検証可能なZK証明が含まれる。このZK証明はスマートコントラクトまたは他の任意の環境で検証可能であり、これによりステップ②の計算の正当性を確認できる。

図4 I/O zkOracle
3.3 匿名投票
ブロックチェーン上で行われる投票活動では、すべての情報が公開されており、投票者のプライバシー情報が潜在的な攻撃者に取得される可能性がある。ブロックチェーンベースの投票プロジェクトは以下の2つの大きな課題に直面している:
-
投票者の身元プライバシー:投票者のプライバシーを守るため、匿名身元で投票を行う必要がある。
-
投票結果の検証可能性:投票データの改ざんを防ぐため、投票結果の真実性を検証できる仕組みを設計する必要がある。
ブロックチェーンベースの投票プロジェクトにおいて、投票者の身元プライバシーを保護しつつ、投票結果の検証可能性を確保することは、巧妙な処理が求められる課題である。ZK技術を活用することで、この両者のバランスを効果的に実現できる。
ブロックチェーン匿名投票プロジェクトでは、ZK技術とmerkle treeを組み合わせて匿名投票を実現し、検証を行う。投票プロセスを以下の3つの主要段階に分ける:
1. ハッシュおよび署名方式で投票者に匿名身元を生成
投票者は投票前に自身の真の身元情報を用いて資格確認および身元検証を行う必要がある。検証に合格後、真の身元とは無関係な匿名身元(anonymous identity)を得る。投票者はこの匿名身元で投票を行うことで、個人情報の漏洩を防ぐことができる。
2. ZK技術およびmerkle treeを用いて投票者の匿名身元を検証
投票者は匿名身元で投票を行う前に、その匿名身元の検証が必要であり、検証に合格した投票者のみが投票可能となる。
すべての投票者の匿名身元を保存するためにMerkle treeを使用し、これにより改ざん防止および投票者身元情報の完全性を保証する。
投票者の匿名身元情報をもとに生成されたアイデンティティコミットメントを葉ノードとし、一定数の葉ノードからMerkle treeを構築する。Merkle treeに基づく検証回路を用いて投票者の身元を検証する。検証には以下の3つのデータが必要である:
-
現在の投票者のアイデンティティコミットメント。これを入力ターゲットノード(input target node)と呼ぶ。
-
Merkle treeのルートノード(root node)。
-
入力ターゲットノードからルートノードまでのパスインデックス(path index)。パスインデックスはMerkle tree内でのターゲットノードの位置情報を表し、左を0、右を1で表す。
入力ターゲットノードとパスインデックスからルートノードを生成する過程で、兄弟ノードとユーザー情報から生成されたアイデンティティコミットメントを用いてユーザーの身元を確定する。ユーザーの投票の唯一性を確保するため、ハッシュ処理された身元識別子と外部識別子を投票証明として使用する。
3. 投票および検証
この段階は以下の6つのステップに分けられ、図5に示す:
-
問題の計算:投票者の匿名身元をMerkle treeに挿入し、検証を行う。
-
等価変換:問題を順次ZK低次回路(low-order circuit)、R1CS構造(rank-1 constraint system)、QAP(quadratic arithmetic program)問題に変換し、検証および証明鍵の生成プロセスを行う。
-
共通パラメータ生成:ZKシステムの安全性を確保するため、証明生成および証明検証に使用される共通文字列を生成するための信頼できるセットアップが必要である。
-
ZK証明の生成:ZK回路を用いて投票者にZK証明を生成できる。このような証明を生成するには、投票者の匿名身元情報および投票情報をZK回路の入力とする必要があり、このステップは通常オンチェーン外で完了する。その後、生成されたZK証明はブロックチェーンにアップロードされる。
-
ZK証明の検証:オンチェーンで証明を検証する、すなわち投票の有効性を検証する。つまり、投票者の投票がこの回路有界システムを満たしているかを検証する。検証に成功すれば1を返し、失敗すれば0を返す。
-
投票コントラクト(Voting contract):投票コントラクトは展開された検証コントラクトおよび検証鍵を用いて投票結果を検証する。ユーザーとコントラクトのインタラクション過程において、ZK証明の生成および検証はすべてZK回路に基づいて計算され、これにより投票者の身元情報が大きく保護される。

図5 投票検証プロセス
これにより、ブロックチェーン匿名投票プロジェクトを実現できる。
3.4 プライバシーオークション
ブロックチェーン公開オークションには欠点がある。ブロックチェーン取引はすべて公開されているため、誰でも入札者の入札額および資金状況を観察できる。ある入札者が他の入札者の入札額を知っていた場合、あるいは他の入札者の身元を知っていた場合、ブロックチェーンの公開取引情報からそのアカウントの利用可能資金を把握できる。この入札者は他の入札者の入札額または利用可能資金に基づき、自らの入札額を調整してオークションに勝利できる。公開ブロックチェーンオークションは、入札者の身元公開および資金露出という課題に直面している。プライバシーオークションはこのような不公平な現象を防止できる。
プライバシーオークションでは、入札者は身元や利用可能資金を明かさずに入札額を提出できる。プライバシーオークションを実現するには、以下の2つの難関を克服しなければならない。
-
買い手の身元保護:買い手アカウントの身元は秘匿する必要がある。なぜなら、アカウントを明らかにすれば、オークション中の利用可能資金も明らかになってしまうため。
-
売り手の利益保護:オークションは悪意ある入札者(買い手)が利用可能資金を超える入札を行うことを防止する必要がある。
ZK技術を用いて入札者の身元プライバシーを保護しつつ、彼らが入札額を支払える利用可能資金を持っていることを検証できる。
プライバシーオークションでは、各入札者は2つのアカウントアドレスを必要とする:
-
公開质押アカウント(Public staking account):オークション参加料の事前振替に使用。
-
プライベートアカウント(Private account):入札者が落札価格を満たすための実際の資金を保持するアカウント。つまり、入札者が落札した場合、このアカウントの資金が落札価格の支払いに使用される。
この2つのアカウントアドレスはまったく関連がないため、他の人は入札者の质押アカウントの取引からプライベートアカウントの最高入札額を特定できない。
プライバシーオークションのプロセスは以下の通り:
1. ZK技術を用いてアカウントアドレスおよび利用可能資金を検証
各入札者はアカウントアドレスのハッシュ値および利用可能資金のハッシュ値を事前にMerkle treeに提出する。ZK技術を用いて、ユーザーが実際にそのアカウントアドレスおよび利用可能資金を保有していることを検証する。すなわち、ハッシュ値の原像(元データ)がアカウントアドレスおよび利用可能資金と一致することを検証する。
2. アカウント検証により人為的な価格引き上げを防止
入札者が入札額を提出する前に、プライバシーオークションコントラクトは前入札者のアカウントを検証できる。同一アカウントによる人為的な価格引き上げを防ぐため、前入札者と現在の入札者は同一人物であってはならない。このような設定では、一人が同時に2つの质押アカウントと2つのプライベートアカウントを管理することを完全に防げないが、注意すべきは、2つのアカウントを持つことは各アカウントの利用可能資金が減少することを意味する点である。これは落札機会をさらに低下させる。なぜなら、資金がMerkle treeに质押された後は、プライベートアカウントに移動できなくなるためである。
3. ZK技術を用いて入札者の利用可能資金が入札額以上かを検証
比較器回路(comparator circuit)を用いて、入札者の利用可能資金が入札額以上かを検証する。主に以下の内容を検証する:
-
利用可能資金と入札者の入札額を比較。比較器のZK回路がtrueを返せば、入札者の利用可能資金が入札額以上であることを示し、すなわち入札が有効である。そうでなければ無効。
-
この回路には改ざん防止のための中間チェックも含まれる(witness file)。
-
アカウントアドレスおよび利用可能資金のハッシュ値がMerkle treeに存在するかを検証。
これにより、ブロックチェーンプライバシーオークションプロジェクトを実現できる。
4. まとめ
ブロックチェーンプロジェクトが直面するセキュリティ上の課題を無視してはならない。ZK技術はDeFiプロジェクトにプライバシー保護機能を提供し、ユーザー身元の漏洩やフロントランニング攻撃といったセキュリティ問題を回避できる。また、オラクルに対してより安全なデータ検証方法を提供できる。ブロックチェーン投票プロジェクトでは、ZK技術を応用することで匿名投票を実現し、投票者の身元プライバシーを保護しつつ、投票情報の真実性を検証できる。ブロックチェーンオークションプロジェクトでは、この技術を用いて入札者の身元プライバシーを保護しつつ、彼らが十分な入札資金を保有していることを検証し、売り手の利益を守ることができる。
しかし、これはZK技術の潜在能力のごく一部にすぎず、その真の力はまだ完全には掘り起こされていない。今後、より多くのブロックチェーンプロジェクトでZK技術が活用され、ユーザーにより良いプライバシー保護とセキュリティ保障が提供されることを期待したい。
TechFlow公式コミュニティへようこそ
Telegram購読グループ:https://t.me/TechFlowDaily
Twitter公式アカウント:https://x.com/TechFlowPost
Twitter英語アカウント:https://x.com/BlockFlow_News









