ゼロ知識プロトコルは、1つの当事者(証明者)が、他の当事者(検証者)に、特定の文が真実であることを除いて、情報を一切明かさずに証明できる方法です。
ゼロ知識証明は数年の間に改善され、現在はいくつかの実世界のアプリケーションで使用されています。
しかし、このアプローチには問題点があります。主にプライバシーの欠如です。第三者サービスと共有される個人を特定できる情報(PII)は、ハッキングのリスクにさらされる中央データベースに保存されています。身元盗用が重大な問題となっている中、機密情報を共有するためのプライバシー保護手段が求められています。
ゼロ知識証明は、主張の妥当性を証明するために情報を明らかにする必要がないようにすることで、この問題を解決します。ゼロ知識プロトコルは、主張(証人と呼ばれる)を入力として使用して、その妥当性の簡潔な証明を生成します。この証明は、その主張が真実であることを強力に保証し、それを作成する際に使用された情報を公開せずに済みます。
先ほどの例に戻ると、市民権主張を証明するために必要な唯一の証拠は、ゼロ知識証明です。検証者は、証明の特定の属性が真実であるかどうかをチェックするだけで、基になる文が真実であると納得することができます。
ゼロ知識プロトコルは次の基準を満たさなければなりません:
完全性: 入力が有効である場合、ゼロ知識プロトコルは常に「true」を返します。したがって、基になる文が真であり、証明者と検証者が正直に行動する場合、証明は受け入れられます。- 正当性:入力が無効である場合、ゼロ知識プロトコルを 'true' と返すことを理論的には欺くことは不可能です。したがって、ウソをつくプローバは、信頼できる検証者を無効なステートメントが有効であると信じさせることはできません(確率のわずかな余地を除いて)。- ゼロ知識:検証者は、その真偽を超えてステートメントについて何も学びません(ステートメントについて「ゼロ知識」を持っています)。この要件は、検証者が証明から元の入力(ステートメントの内容)を導出するのをも防ぎます。基本的な形で、ゼロ知識証明は、証人、挑戦、応答の3つの要素で構成されています。
証人:ゼロ知識証明を用いて、証明者は隠された情報の知識を証明したいと考えています。秘密の情報は証明の「証人」であり、証明者が証人の知識を仮定することで、情報の知識を持つ者にのみ回答できる一連の質問を確立します。したがって、証明者は無作為に質問を選択し、答えを計算して検証者に送信することで証明プロセスを開始します。- チャレンジ:検証者はセットから別の質問をランダムに選び、証明者に回答するよう求めます。- 応答: プロバーは質問を受け入れ、答えを計算し、それを検証者に返します。プロバーの応答により、検証者は以前に証人にアクセスできているかどうかを確認できます。プロバーが単に適当に推測して正しい答えを得ていないことを確認するために、検証者はさらに多くの質問を選びます。このやり取りを何度も繰り返すことで、証人の知識を偽造する可能性は著しく低下し、検証者が満足するまで続けられます。上記は、'インタラクティブゼロ知識証明'の構造を説明しています。初期のゼロ知識プロトコルでは、文の妥当性を検証するには、証明者と検証者の間でのやり取りが必要でした。
相互証明がどのように機能するかを示す良い例は、ジャン=ジャック・キスカテールの有名なアリババの洞窟物語
物語では、ペギー(証明者)は、魔法の扉を開く秘密のフレーズを明かさずに、ヴィクター(検証者)にそのフレーズを知っていることを証明したいと思っています。
この問題を解決するために、Manuel Blum、Paul Feldman、およびSilvio Micaliは最初の提案をしました非対話型ゼロ知識証明
検証者と検証者が共有キーを持っている場合、これにより検証者は情報(すなわち、証人)の知識を提供せずにその情報を証明することができます。
対話型証明とは異なり、非対話型証明は参加者(証明者と検証者)間で1ラウンドの通信のみが必要でした。証明者は秘密情報を特別なアルゴリズムに渡してゼロ知識証明を計算します。この証明は検証者に送信され、検証者は別のアルゴリズムを使用して証明者が秘密情報を知っていることを確認します。
非対話型証明は、証明者と検証者の間の通信を減らし、ZK-証明をより効率的にします。さらに、証明が生成されると、それは共有キーと検証アルゴリズムへのアクセス権を持つ他の誰でも検証できます。
非対話型証明は、ゼロ知識技術にとって画期的なものであり、現在使用されている証明システムの開発を促進しました。以下でこれらの証明タイプについて説明します。
公共パラメータを生成する際のリスクを軽減する方法です。複数の当事者が参加します。信頼されたセットアップセレモニー
, それぞれの人がいくつかのランダムな値を貢献してCRSを生成します。1つの誠実な当事者が自分のエントロピーの部分を破壊すれば、ZK-SNARKプロトコルは計算上の妥当性を保持します。
信頼できるセットアップは、パラメータ生成の参加者を信頼する必要があります。しかし、ZK-STARKの開発により、信頼されていないセットアップで機能する証明プロトコルが可能になりました。
暗号通貨は、ユーザーがプライベートでピア・ツー・ピアの取引を行う手段を提供することを意図していました。しかし、ほとんどの暗号通貨取引は公開されたブロックチェーン上で明らかになっています。ユーザーのアイデンティティはしばしば擬似的であり、意図的に実世界のアイデンティティにリンクされていたり(例:TwitterやGitHubプロファイルにETHアドレスを含めることによって)、または基本的なオンチェーンおよびオフチェーンのデータ分析を使用して実世界のアイデンティティと関連付けられることがあります。
完全匿名取引向けに設計された特定の「プライバシーコイン」があります。ZcashやMoneroなどのプライバシー重視のブロックチェーンは、送信者/受信者アドレス、資産タイプ、数量、取引のタイムラインなどの取引詳細を保護します。
プロトコルにゼロ知識技術を組み込むことで、プライバシーに焦点を当てたブロックチェーンネットワークは、ノードが取引データにアクセスする必要なく取引を検証することができます。
ゼロ知識証明は、公開ブロックチェーン上で取引を匿名化するためにも適用されています。その例として、Ethereum上でユーザーがプライベート取引を行うことを可能にする分散型の非キュストディアルサービスであるTornado Cashがあります。Tornado Cashは、取引の詳細を曖昧にし、財務プライバシーを保証するためにゼロ知識証明を使用しています。残念ながら、これらは「オプトイン」のプライバシーツールであるため、違法な活動と関連付けられています。これを克服するためには、プライバシーは最終的に公開ブロックチェーン上のデフォルトとならなければなりません。
ゼロ知識証明は特にの文脈で特に有用です分散型アイデンティティ. 分散型アイデンティティ(自己主権アイデンティティとも呼ばれる)は個人に個人識別子へのアクセスを制御する機能を提供します。 納税番号やパスポートの詳細を明かさずに市民権を証明することは、ゼロ知識技術が分散型アイデンティティを可能にする良い例です。
ただし、ゼロ知識証明は、両プラットフォームとユーザーの認証を簡単にすることができます。 ZKプルーフが生成されたら、ユーザーは単にそれを提示して、サービスにアクセスする際に自分の身元を認証できます。 これにより、ユーザーのエクスペリエンスが向上し、組織は膨大なユーザー情報を保存する必要性から解放されます。
検証可能な計算は、セキュリティを低下させることなく、ブロックチェーン上の処理速度を向上させる上で重要です。これを理解するには、Ethereumのスケーリングのための提案されたソリューションの違いを知っていることが必要です。
オンチェーンスケーリングソリューション、シャーディングなどのようなものは、ブロックチェーンの基本層を広範囲に修正する必要があります。しかし、このアプローチは非常に複雑で、実装上のエラーがEthereumのセキュリティモデルを損なう可能性があります。
オフチェーンスケーリングソリューションコアのEthereumプロトコルを再設計する必要はありません。代わりに、Ethereumの基本層のスループットを向上させるために、アウトソーシングされた計算モデルに依存しています。
実践での動作方法は次のとおりです:
チェーンは、オフチェーン取引を再実行せずに検証する方法が必要です。そうでないと、オフチェーン実行の価値が失われます。
これが検証可能な計算が重要となるポイントです。ノードがイーサリアムの外でトランザクションを実行する際、オフチェーン実行の正確性を証明するためにゼロ知識証明を提出します。この証明(
バリデーションプルーフ)は、取引が有効であることを保証し、イーサリアムがその結果を状態に適用できるようにするものであり、誰かがそれに異議を唱えるのを待つ必要はありません。
ゼロ知識ロールアップそしてvalidiumsは、セキュアなスケーラビリティを提供するために有効性証明を使用する2つのオフチェーンスケーリングソリューションです。これらのプロトコルは、オフチェーンで数千の取引を実行し、イーサリアム上で検証のための証明を提出します。その結果は、証明が検証されるとすぐに適用でき、イーサリアムがベースレイヤー上での計算を増やさずにより多くの取引を処理できます。
「オープンな競争を制限するために共謀し、他者を欺き、詐欺し、誤解させること」と定義される共謀は、悪意のある行為者が賄賂を提供して投票を影響させる形を取ることがあります。 例えば、アリスは、自分がオプションAを好むにも関わらず、ボブからオプションBに投票するための賄賂を受け取るかもしれません。
贈収賄や共謀は、投票を信号機構として使用するプロセスの効果を制限します(特にユーザーが投票した方法を証明できる場合)。これは、特に投票が希少なリソースを割り当てるための責任がある場合、重大な影響を与える可能性があります。
例えば、二次資金調達メカニズム
寄付に頼って、さまざまな公共物件の中で特定のオプションの選好を測定します。各寄付は特定のプロジェクトへの「投票」として数えられ、より多くの投票を受けたプロジェクトがマッチングプールからより多くの資金を受け取ります。
オンチェーン投票を使用すると、二次資金調達は共謀に対して脆弱になります:ブロックチェーン取引は公開されているため、賄賂を受ける側のオンチェーンの活動を調査することができ、どのように「投票」したかが分かります。このように、二次資金調達は、コミュニティの集約された選好に基づいて資金を割り当てるための効果的な手段ではなくなります。
幸いなことに、MACI(最小アンチ共謀インフラストラクチャ)などの新しいソリューションでは、ゼロ知識証明を使用して、オンチェーン投票(例:二次資金調達メカニズム)を賄賂や共謀に対して耐性を持たせています。MACIは、中央管理者(「コーディネーター」と呼ばれる)が投票を集計し、個々の投票方法の詳細を明らかにせずに結果を集計できる一連のスマートコントラクトとスクリプトです。それでも、投票が適切に集計されたことを検証したり、特定の個人が投票ラウンドに参加したことを確認することは可能です。
MACIでは、コーディネーターが投票を誤って処理したり、集計結果を誤って計算することを不可能にするために、ゼロ知識証明が使用されています。これは、コーディネーターにZK-SNARK証明を生成するよう要求することによって実現されます。これにより、a) すべてのメッセージが正しく処理されたこと、b) 最終結果がすべての有効な投票の合計に対応していることが検証されます。
そのため、通常の場合と同様に、ユーザーごとの投票の内訳を共有しなくても、MACIは集計プロセス中に計算された結果の整合性を保証します。この機能は、基本的な共謀計画の効果を低下させるのに役立ちます。ボブがアリスに賄賂を贈って特定のオプションに投票するように依頼するという前述の例を使用して、この可能性を探ることができます。
しかし、コーディネータが正直である場合、MACIはオンチェーン投票の信頼性を保証する強力なツールを表します。これが、二次資金提供アプリケーションの間で人気がある理由です(例えば、clr.fund
)それは個々の投票選択の信頼性に大きく依存しています。
.
ただし、ユーザーが参加者の誠実さを評価する方法は実際にはありません。ユーザーは開発者の言葉を信じなければなりません。ZK-STARKsは、文字列を生成する際に使用されるランダム性が公開可能であるため、信頼前提から解放されています。一方、研究者は、ZK-SNARKsのための信頼されていないセットアップに取り組んでおり、証明メカニズムのセキュリティを高めています。
ECDSA) for encryption. ECDSAアルゴリズムは現在は安全ですが、将来的には量子コンピューターの開発によってそのセキュリティモデルが崩壊する可能性があります。
ZK-STARKは、暗号化に衝突耐性ハッシュを使用しているため、量子コンピューティングの脅威に対して免疫力があると考えられています。楕円曲線暗号に使用される公開鍵・秘密鍵ペアとは異なり、衝突耐性のハッシングは量子コンピューティングアルゴリズムにとって破るのがより難しいです。





