メインコンテンツへスキップ

ページの最終更新日時: 2026年2月23日

ゼロ知識証明とは何か

ゼロ知識証明は、証明したい主張そのものを明らかにすることなく、主張の妥当性を証明する方法です。 主張を証明しようとする側を「証明者」とよび、主張の検証に責任を持つ側を「検証者」とよびます。

ゼロ知識証明は、1985年の論文「The knowledge complexity of interactive proof systems (opens in a new tab)」で初めて登場しました。この論文では、今日広く使われているゼロ知識証明の定義が示されています:

ゼロ知識プロトコルとは、ある当事者(証明者)が、別の当事者(検証者)に対して、特定の記述が真であるという事実以外、一切の情報を明かすことなく何かが真であることを証明できる手法です。

ゼロ知識証明は長年にわたって改善され、現在では複数の実用的なアプリケーションで使用されています。

ゼロ知識証明が必要な理由

ゼロ知識証明は応用暗号学におけるブレークスルーであり、個人の情報セキュリティの向上を確かなものにしました。 たとえば、「私はX国の国民である」という主張を別の当事者(たとえば、サービスプロバイダー)に証明する方法を考えてみましょう。 この場合、パスポートや運転免許証など、主張を裏付ける「証拠」を提出する必要があります。

しかし、この手法には主にプライバシーの欠如という問題があります。 サードパーティのサービスと共有される個人識別情報(PII)は、ハッキングに対して脆弱な中央データベースに保存されます。 なりすまし犯罪が深刻な問題となっていることで、機密情報を共有するためのより強力なプライバシー保護手段が求められます。

ゼロ知識証明は、主張の妥当性を証明するために情報開示を必要としないことで、この問題を解決します。 ゼロ知識プロトコルは、ステートメント(「証拠」と呼ばれます)を入力として、妥当性の簡潔な証明を生成します。 この証明は、作成のために使用された情報を開示することなく、ステートメントが真であることを強く保証します。

先の例に戻ると、身分を証明するのに必要な唯一の証拠はゼロ知識証明です。 検証者は、証拠の特定の性質が真であることを確認できれば、主張そのものも真であると確信できます。

ゼロ知識証明のユースケース

匿名決済

クレジットカードの支払いは、通常、決済業者や銀行、その他の利害関係者(政府当局など)を含む複数の当事者の目に触れます。 金融監視は違法行為を特定する上でメリットがありますが、一般市民のプライバシーも損なわれます。

暗号通貨は、ユーザーがプライベートなピアツーピアトランザクションを行うための手段を提供することを目的としていました。 しかし、ほとんどの暗号通貨のトランザクションは公開ブロックチェーン上で公開されています。 ユーザーのIDは多くの場合、仮名(偽名)であり、自らの意思で現実世界のIDと結びつけている場合(例:TwitterやGitHubのプロフィールにETHアドレスを記載するなど)もあれば、オンチェーンおよびオフチェーンの基本的なデータ分析によって現実世界のIDと関連付けられる場合もあります。

完全に匿名のトランザクションを行うために設計された「プライバシーコイン」というものがあります。 ZcashやMoneroなどのプライバシー重視のブロックチェーンは、送信者/受信者アドレス、資産の種類、数量、トランザクションタイムラインを含むトランザクションの詳細を非公開にします。

ゼロ知識技術をプロトコルに組み込むことで、プライバシーに重点を置いたネットワークでは、がトランザクションデータにアクセスすることなくトランザクションを検証できるようになります。 EIP-7503 (opens in a new tab)は、イーサリアムブロックチェーン上でネイティブなプライベートの価値移転を可能にする提案設計の一例です。 しかし、このような提案は、セキュリティ上の懸念、規制上の課題、そしてユーザーエクスペリエンス(UX)の問題が複雑に絡み合っているため、実装が困難とされています。

ゼロ知識証明は、公開ブロックチェーン上のトランザクションの匿名化にも応用されています。 たとえば、Tornado Cashは、分散型かつ自己理型のサービスで、イーサリアム上でプライベートなトランザクションを行うことができます。 トルネードキャッシュはゼロ知識証明を応用して、トランザクションの詳細を難読化し、金融のプライバシーを保証します。 残念ながら、これらは「オプトイン」のプライバシーツールであるため、違法行為に使用される可能性もあります。 こうした課題を克服するには、最終的に公開ブロックチェーンでプライバシーを標準設定にする必要があります。 イーサリアムのプライバシーに関する詳細情報。

ID保護

現在のアイデンティティ管理システムは、個人情報を危険にさらしています。 ゼロ知識証明は、個人が機密情報を保護しながらアイデンティティを検証するのに役立ちます。

ゼロ知識証明は、分散型IDの文脈において特に有用です。 分散型アイデンティティ(「自己主権型アイデンティティ」とも呼ばれます)は、個人識別子へのアクセスを制御する機能を提供します。 納税者番号やパスポートの詳細を公開せずに市民権を証明することは、ゼロ知識技術が分散型アイデンティティを実現する良い例です。

人間性の証明

現在、実用化されているゼロ知識証明の最も広く使われている例の1つは、World IDプロトコル (opens in a new tab)です。これは、「AI時代のグローバルなデジタルパスポート」と考えることができます。 この仕組みにより、人々は個人情報を開示することなく、自分が唯一の個人であることを証明することができます。 これは「Orb」と呼ばれるデバイスを通じて実現されています。Orbは人の虹彩をスキャンし、そこから虹彩コードを生成します。 虹彩コードは照合・検証され、その人が生物学的に唯一の人間であることを確認します。 検証が完了すると、ユーザーのデバイス上で生成された「アイデンティティ・コミットメント」がブロックチェーン上の安全なリストに追加されます。このコミットメントは生体データとはリンクも派生もしていないため、プライバシーを保護しながら本人確認を行うことができます。 その後、ユーザーがログインや投票などの行動を行う際に、自分が認証済みの人間であることを証明したい場合には、リストへの登録を確認するゼロ知識証明を生成することができます。この証明により、ユーザーは自らの身元や個人情報を明かすことなく、確かに認証された人間であることを安全に示すことができます。 ゼロ知識証明を利用する優れた点は、たった一つの事実──「この人は唯一無二の存在である」──だけが明らかにされるということです。 それ以外のすべての情報は**非公開のまま保護されます。

World IDは、イーサリアム・ファウンデーションのPSEチーム (opens in a new tab)によって開発されたSemaphoreプロトコル (opens in a new tab)を利用しています。 Semaphoreは、軽量でありながら強力なゼロ知識証明の生成および検証を行うための仕組みとして設計されています。 Semaphoreは、ユーザーが自分が特定のグループ(この場合は認証済みの人間)に属していることを証明できるようにします。ただし、グループ内のどのメンバーであるかまでは明かさないようになっています。 Semaphoreは非常に柔軟性が高く、本人確認・イベントへの参加・資格情報の保有など、さまざまな基準に基づいてグループを作成することが可能です。

認証

オンラインサービスを利用するには、身分証明とそのプラットフォームへのアクセス権が必要です。 そのためには、名前、メールアドレス、生年月日などの個人情報を提供する必要があります。 長いパスワード覚えておく必要があるかもしれません。忘れてしまうとアクセスを失うリスクもあります。

しかし、ゼロ知識証明は、プラットフォームとユーザーの両方の認証を簡素化することができます。 公開の入力(プラットフォームにアカウントを所持していることを保証するデータなど)と秘密の入力(ユーザーの詳細など)からゼロ知識証明を一度生成しておけば、それを提示するだけでサービスを利用する際の本人確認ができます。 その結果、ユーザーエクスペリエンスが向上し、組織は膨大な量のユーザー情報を保存する必要がなくなります。

検証可能な計算

検証可能な計算とは、ブロックチェーンの設計を改善するためのゼロ知識技術の応用です。 検証可能な計算により、検証可能な結果を維持したまま他者に計算をアウトソースすることができます。 アウトソース先は、プログラムが正しく実行されたことを検証する証拠とともに計算結果を提出します。

検証可能な計算は、セキュリティを損なうことなくブロックチェーン上の処理速度を向上させるために不可欠です。 これを理解するには、イーサリアムをスケーリングするための提案されたソリューションの違いを把握する必要があります。

シャーディングのようなオンチェーンのスケーリングソリューションは、ブロックチェーンのベースレイヤーに大幅な改修を加える必要があります。 このアプローチは非常に複雑で、実装時のエラーによりイーサリアムのセキュリティモデルを損なう可能性があります。

オフチェーンのスケーリングソリューションは、イーサリアムのコアプロトコルを再設計する必要がありません。 代わりに、アウトソーシングされた計算モデルによってイーサリアムの基本レイヤーのスループットを向上させます。

実際の動作は次のとおりです。

  • イーサリアムは、すべてのトランザクションを処理する代わりに、別のチェーンに実行をオフロードします。

  • その別のチェーンは、トランザクションを処理した後、イーサリアムの状態に適用される結果を返します。

ここでの利点は、イーサリアムは何も実行する必要がなく、アウトソーシングされた計算の結果をイーサリアムの状態に適用するだけですむことです。 これにより、ネットワークの混雑が緩和され、トランザクションの処理速度も向上します(オフチェーンプロトコルは高速な実行に最適化されているためです)。

チェーンは、オフチェーンで行われたトランザクションを再実行せずに検証できる仕組みを持つ必要があります。そうでなければ、オフチェーン実行による効率化の利点は失われてしまいます。

ここで、検証可能な計算が役に立ちます。 ノードがイーサリアムの外でトランザクションを実行すると、そのノードはオフチェーン実行が正しいことを証明するゼロ知識証明を提出します。 この証明(と呼ばれる)は、トランザクションが有効であることを保証し、誰もがそれに異議を唱えるのを待つことなく、イーサリアムがその結果を自身のステートに適用することを可能にします。

ゼロ知識ロールアップバリディウムは、いずれも有効性証明を活用して安全かつスケーラブルな処理を実現する、2種類のオフチェーン・スケーリングソリューションです。 これらのプロトコルは、数千件ものトランザクションをオフチェーンで実行し、その結果の正当性を示す証明をイーサリアム上に提出して検証を受けます。 証明が検証されるとすぐに結果を適用できるので、イーサリアムは基本レイヤーの計算を増やすことなく、より多くのトランザクションを処理することができます。

オンチェーン投票における贈収賄と談合の削減

ブロックチェーンの投票スキームには、完全に監査可能で、攻撃に対して安全で、検閲に強く、地理的制約がないなど、多くの利点があります。 しかし、オンチェーン投票の仕組みでさえ、談合の問題を免れることはできません。

共謀は「他人を惑わせる、騙す、もしくは誤解を招くことで、開かれた競争を阻むための調整」と定義される通り、賄賂の提供によって投票に影響を与えるような、悪意のある行為者の形を取ることもあります。 例えば、アリスはoption Aを好んでいても、ボブから賄賂を受け取って投票でoption Bに投票するかもしれません。

贈収賄と共謀は、投票によって情報伝達を行うあらゆるプロセス(特にユーザーが自分の投票内容を証明できる場合)の有効性を損ないます。 これは重大な結果をもたらす可能性があり、限られたリソースを割り当てる責任を伴う投票であれば尚更です。

例えば、クアドラティック・ファンディングの仕組み (opens in a new tab)は、様々な公共財プロジェクトの中から特定の選択肢への支持を測るために、寄付に依存しています。 それぞれの寄付はプロジェクトに対する「投票」としてカウントされ、より多くの票を受け取るプロジェクトがマッチングプールからより多くの資金を得ます。

オンチェーン投票を用いると、クアドラティック・ファンディングは談合や買収の影響を受けやすくなります。なぜなら、ブロックチェーン上の取引はすべて公開されているため、賄賂を渡す側が相手の投票行動を直接確認し、「指示どおりに投票したか」を簡単に確かめられてしまうからです。 このようにしてクアドラティックファンディングは、コミュニティの総意に基づいて資金を割り当てる効果的な手段ではなくなります。

幸いなことに、MACI(Minimum Anti-Collusion Infrastructure)のような新しいソリューションが登場しています。これらはゼロ知識証明を用いることで、オンチェーン投票(例:クアドラティック・ファンディングの仕組み)を賄賂や談合に対して強くすることを可能にしています。 MACIは、中央管理者(「コーディネーター」と呼ばれる)が、各個人の投票方法の詳細を明らかにすること_なく_、票を集計し、結果をまとめることを可能にするスマートコントラクトとスクリプトのセットです。 それでも、投票が正しく集計されたことを検証したり、特定の個人が投票に参加したことを確認したりすることは可能です。

MACIはいかにしてゼロ知識証明と連携するか

最初に、コーディネーターがMACIのスマートコントラクトをイーサリアムにデプロイし、その後、ユーザーはスマートコントラクトに公開鍵を登録することで、投票にサインアップできるようになります。 公開鍵で暗号化したメッセージをスマートントラクトに送ることで投票を行います(有効な投票は、ユーザーのIDに関連付けられた最新の公開鍵で署名されている必要があり、かつ、他の基準も満たさなければなりません)。 投票期間が終了した後、コーディネーターがすべてのメッセージを処理し、票を集計し、その結果をオンチェーン上で検証します。

MACIでは、ゼロ知識証明が計算の正確性を確保します。これにより、コーディネーターによる票の誤処理や結果の誤集計が発生することはありません。 これは、コーディネーターに、a) すべてのメッセージが正しく処理されたこと、b) 最終結果がすべての_有効な_票の合計に対応していること、を検証するZK-SNARK証明を生成させることで達成されます。

したがって、通常は各ユーザーの投票の内訳を共有しなくても、MACIは集計作業中に計算された結果の完全性を保証します。 この機能により、安易な共謀スキームによる影響を阻止することができます。 先述のアリスを買収するボブの例で、この可能性を探ってみましょう。

  • アリスは、公開鍵をスマートコントラクトに送信することで投票への登録を行います。
  • アリスはボブからの賄賂と引き換えにoption Bに投票することに同意します。
  • アリスはoption Bに投票します。
  • アリスは暗号化されたトランザクションを秘密裏に送信し、自分のIDに紐付けられた公開鍵を変更します。
  • アリスは新しい公開鍵を使い、option Aに投票するために、別の(暗号化された)メッセージをスマートコントラクトに送信します。
  • アリスはボブにoption Bに投票したことを示すトランザクションを見せます(この公開鍵はシステム上でもはやアリスのIDに関連付けられていないため無効です)
  • メッセージの処理中、コーディネーターはアリスのoption Bへの投票をスキップし、option Aへの投票のみをカウントします。 したがって、ボブがアリスと談合してオンチェーン投票を操作しようとする試みは失敗します。

MACIを使用するには、コーディネーターが贈賄者と共謀したり、自ら有権者に賄賂を渡そうとしたりしないことを信頼する_必要が_あります。 コーディネーターは、(証明を作成するために必要な)ユーザーのメッセージを復号化することができ、各人の投票内容を正確に検証することができます。

ただし、コーディネーターが誠実に行動する場合、MACI はオンチェーン投票の公正さを保証するための強力な手段となります。 このことが、個々の投票選択の完全性に大きく依存するクアドラティック・ファンディングのアプリケーション(例:clr.fund (opens in a new tab))の間で人気がある理由です。

MACIの詳細はこちら (opens in a new tab)

ゼロ知識証明のしくみ

ゼロ知識証明により、主張の内容を共有したり、真実を発見した方法を明らかにすることなく、主張が真であることを証明できる方法です。 これを可能とするために、ゼロ知識プロトコルは、入力データを取り、出力として「真」または「偽」を返すアルゴリズムに依存しています。

ゼロ知識プロトコルは以下の基準を満たさなければなりません。

  1. 完全性: 入力が有効な場合、ゼロ知識プロトコルは常に「真」を返します。 したがって、主張が正当で、証明者と検証者が正直に行動する場合、証明は受け入れられます。

  2. 健全性: 入力が無効な場合、ゼロ知識プロトコルを騙して「真」を返させることは理論的に不可能です。 したがって、主張が正当でないのであれば、偽の証明者は正直な検証者を欺いて、主張が正当であると信じこませることはできません(ただし、わずかな確率で例外がありえます)。

  3. ゼロ知識性: 検証者は、ある記述についてその有効性や虚偽性を超えることを何も学習しません(記述について「ゼロ知識」しか持たない)。 この要件により、検証者が証明から元の入力(すなわち、主張の内容)を導き出すのを防ぐことができます。

基本的な形式では、ゼロ知識証明は証拠チャレンジレスポンスの3つの要素で構成されます。

  • 証拠: ゼロ知識証明では、証明者は何らかの隠された情報の知識を証明しようとします。 秘密の情報は証明の「証拠」であり、証明者が証拠を知っていると仮定すると、情報を持っている当事者だけが答えることのできる一連の質問が設定されます。 したがって、証明者はランダムに質問を選ぶことで証明プロセスを開始し、答えを計算し、それを検証者に送ります。

  • チャレンジ: 検証者はセットの中からランダムに別の質問を選び、証明者にそれに答えるよう求めます。

  • レスポンス: 証明者は質問を受け入れ、答えを計算し、それを検証者に返します。 証明者のレスポンスにより、検証者は証明者が実際に証拠を所持しているのかどうかを確認することができます。 証明者があてずっぽうに正解を得ているわけではないことを確かめるために、検証者はさらに多くの質問をします。 このインタラクションを何度も繰り返すことにより、証明者が証拠を知ったかぶりしている可能性は、検証者が満足するレベルまで大幅に低下します。

以上が「インタラクティブなゼロ知識証明」の構造の説明です。 初期のゼロ知識プロトコルはインタラクティブな証明を使用しており、主張の妥当性を検証するためには、証明者と検証者の間で行ったり来たりの疎通が必要でした。

対話型証明がどのように機能するかを示す良い例として、Jean-Jacques Quisquaterの有名なアリババの洞窟の物語 (opens in a new tab)があります。 物語の中で、Peggy(証明者)はVictor(検証者)に対して、自分が魔法の扉を開く秘密のフレーズを知っていることを証明したいと思っていますが、フレーズを教えたくありません。

非対話型ゼロ知識証明

インタラクティブな証明は革命的でしたが、二者を用意して繰り返し対話する必要があったため、有用性は限定的でした。 たとえ検証者が証明者の公正さを確信していたとしても、独立した検証に証明は利用できません(新しい証明を計算するには、証明者と検証者の間で新規のやりとりが必要です)。

この問題を解決するために、Manuel Blum、Paul Feldman、Silvio Micaliは、証明者と検証者が共有鍵を持つ、最初の非対話型ゼロ知識証明 (opens in a new tab)を提案しました。 これにより、証明者は情報自体を提供することなく、ある情報に関する知識(すなわち証拠)を持ち合わせていること示唆できます。

対話型証明とは異なり、非対話型証明は参加者(証明者と検証者)間の一往復のコミュニケーションのみを要します。 証明者はゼロ知識証明を計算するための特別なアルゴリズムに秘密の情報を渡します。 この証明は検証者に送信され、別のアルゴリズムによって証明者が秘密の情報を知っていることが確認されます。

非対話型証明は証明者と検証者の間の疎通を減らし、ゼロ知識証明をより効率的にします。 さらに、一旦証明が生成されると、共有鍵と検証アルゴリズムへのアクセス権を持っていれば、誰でも検証することができます。

非対話型証明はゼロ知識技術のブレークスルーであり、今日の証明システムの開発を促進しました。 これらの証明の種類について以下に説明します。

ゼロ知識証明の種類

ZK-SNARKs

ZK-SNARKはZero-Knowledge Succinct Non-Interactive Argument of Knowledgeの頭字語です。 ZK-SNARKプロトコルには、次の利点があります。

  • ゼロ知識: 検証者は、ステートメントについて他に何も知らなくても、そのステートメントの完全性を検証できます。 検証者が持つステートメントについての唯一の知識は、その真偽です。

  • 簡潔性: ゼロ知識証明は証拠よりも小さく、迅速に検証できます。

  • 非対話型: 複数回の通信を必要とする対話型証明とは異なり、証明者と検証者が一度しか対話しないため、この証明は「非対話型」です。

  • Argument(論拠): この証明は「健全性」の要件を満たしているため、不正行為は極めて起こりにくいです。

  • (Of)Knowledge(知識): 秘密情報(証拠)にアクセスしなければ、ゼロ知識証明を構築することはできません。 有効なゼロ知識証明を計算するための証拠を持っていない証明者にとっては、不可能ではないにしても困難です。

前述の「共有鍵」は、証明者と検証者が、証明の生成と検証に使用することに合意した公開パラメータのことです。 公開パラメータの生成(総称して共通参照情報(Common Reference String: (CRS)) は、プロトコルのセキュリティにとって重要であるため、デリケートな作業です。 CRSを生成する際に使用されるエントロピー(ランダム性)が不正な証明者の手に渡ると、偽の証明の計算に利用されてしまいます。

マルチパーティ計算(MPC) (opens in a new tab)は、公開パラメータを生成する際のリスクを低減する方法です。 複数の当事者がトラステッド・セットアップ・セレモニー (opens in a new tab)に参加し、各人がCRSを生成するためにランダムな値を拠出します。 1人の公正な当事者がエントロピーの一部を破壊する限り、ZK-SNARKプロトコルの計算において健全性が保たれます。

信頼されたセットアップは、ユーザーにパラメータ生成を担当する参加者を信頼するよう要求します。 しかし、ZK-STARKの開発により、信頼されていないセットアップでも証明プロトコルが有効となりました。

ZK-STARKs

ZK-STARKは、Zero-Knowledge Scalable Transparent Argument of Knowledgeの頭字語です。 ZK-STARKはZK-SNARKと似ていますが、以下の違いがあります。

  • スケーラブル: 証拠のサイズが大きい場合、ZK-STARKはZK-SNARKよりも証明の生成と検証が高速です。 STARKの証明の場合、証拠が大きくなっても、証明と検証にかかる時間の増加はわずかです(証拠の大きさに対して、SNARKの証明と検証にかかる時間は線形に増加します)。

  • 透明性: ZK-STARKは、トラステッド・セットアップの代わりに、公に検証可能なランダム性に基づいて証明と検証のための公開パラメータを生成します。 したがって、ZK-SNARKと比較して透明性が高まります。

ZK-STARKはZK-SNARKよりも大きな証明を生成するため、一般的に検証のオーバーヘッドが高くなります。 しかし、大規模なデータセットを証明する場合など、ZK-STARKがZK-SNARKよりも費用対効果が高い場合があります。

ゼロ知識証明を使用する際の欠点

ハードウェアコスト

ゼロ知識証明を生成するには、非常に複雑な計算が必要であり、専用の機械で効率的に実行することが推奨されます。 こうした機械は高価であるため、一般の個人には手が届かないことがほとんどです。 さらに、ゼロ知識技術を使用するアプリケーションもハードウェアコストを考慮する必要があり、エンドユーザーのコストを増加させる可能性があります。

証明の検証コスト

証明を検証するのにも複雑な計算が必要であり、アプリケーションにゼロ知識技術を導入するコストが増加します。 このコストは、証明するための計算という文脈では特に重要です。 たとえば、ゼロ知識ロールアップでは、イーサリアム上のZK-SNARKの証明を1つ検証するのに最大500,000ガスが支払われます。

信頼性の前提条件

ZK-SNARKでは、一旦生成されたCRS(公開パラメータ)は、ゼロ知識プロトコルの参加者の間で再利用することができます。 公開パラメータは、信頼されたセットアップセレモニーによって作成されます。ここでは、参加者が公正であると仮定されます。

しかし、参加者の公正さを確実に評価するのは現実的に不可能で、デベロッパーの言葉を信じるしかありません。 ZK-STARKは、文字列の生成に使用されるランダム性が公に検証可能であるため、信頼性を前提とする必要はありません。 一方、ZK-SNARKの証明メカニズムのセキュリティを強化するため、研究者たちは信頼されないセットアップの開発に取り組んでいます。

量子コンピューティングの脅威

ZK-SNARKは、暗号化に楕円曲線暗号技術を使用しています。 楕円曲線上の離散対数問題は現在、解くことが困難とされています。しかし、量子コンピューターの開発により、このセキュリティモデルは、将来的に破られる可能性があります。

ZK-STARKは、量子コンピューティングの脅威に耐性があると考えられています。そのセキュリティでは、衝突困難性ハッシュ関数のみに依存しているためです。 楕円曲線暗号で使われている公開鍵と秘密鍵のペアリングとは異なり、衝突困難性ハッシュは量子アルゴリズムでも突破するのが困難です。

参考リンク

最終更新: 2026年2月23日

この記事は役に立ちましたか?