---
title: "ゼロ知識証明とは？"
metaTitle: "ゼロ知識証明"
description: "初心者向けのゼロ知識証明の非技術的な入門。"
lang: ja
---

ゼロ知識証明は、ステートメント自体を明らかにすることなく、そのステートメントの有効性を証明する方法です。「プルーバー」は請求を証明しようとする当事者であり、「検証者」は請求を検証する責任を負います。

ゼロ知識証明は、1985年の論文「[The knowledge complexity of interactive proof systems](http://people.csail.mit.edu/silvio/Selected%20Scientific%20Papers/Proof%20Systems/The_Knowledge_Complexity_Of_Interactive_Proof_Systems.pdf)」で初めて登場し、今日広く使用されているゼロ知識証明の定義を提供しています。

> ゼロ知識プロトコルは、一方の当事者（プルーバー）が他方の当事者（検証者）に対して、**特定のステートメントが真であるという事実以外の情報を一切明らかにすることなく、何かが真であることを証明できる**方法です。

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

<VideoWatch slug="zero-knowledge-proofs-5-levels" />

## なぜゼロ知識証明が必要なのか？ {#why-zero-knowledge-proofs-are-important}

ゼロ知識証明は、個人の情報セキュリティを向上させることを約束したため、応用暗号技術におけるブレークスルーとなりました。ある請求（例：「私はX国の市民です」）を他の当事者（例：サービスプロバイダー）に証明する方法を考えてみてください。請求を裏付けるために、パスポートや運転免許証などの「証拠」を提供する必要があります。

しかし、このアプローチには問題があり、主にプライバシーの欠如が挙げられます。サードパーティのサービスと共有される個人を特定できる情報（PII）は、ハッキングに対して脆弱な中央データベースに保存されます。個人情報の盗難が深刻な問題となる中、機密情報を共有するためのよりプライバシーを保護する手段が求められています。

ゼロ知識証明は、**請求の有効性を証明するために情報を明らかにする必要性を排除する**ことで、この問題を解決します。ゼロ知識プロトコルは、ステートメント（「ウィットネス」と呼ばれる）を入力として使用し、その有効性の簡潔な証明を生成します。この証明は、作成に使用された情報を公開することなく、ステートメントが真であるという強力な保証を提供します。

先ほどの例に戻ると、市民権の請求を証明するために必要な唯一の証拠はゼロ知識証明です。検証者は、証明の特定の特性が真であるかどうかを確認するだけで、基礎となるステートメントも真であると確信できます。

## ゼロ知識証明のユースケース {#use-cases-for-zero-knowledge-proofs}

### 匿名決済 {#anonymous-payments}

クレジットカード決済は、決済プロバイダー、銀行、その他の利害関係者（例：政府当局）など、複数の当事者から見えることがよくあります。金融監視は違法行為を特定する上で利点がありますが、一般市民のプライバシーを損なうことにもなります。

暗号資産は、ユーザーがプライベートなピア・ツー・ピアのトランザクションを行う手段を提供することを目的としていました。しかし、ほとんどの暗号資産のトランザクションは、パブリックなブロックチェーン上で公開されています。ユーザーのアイデンティティは多くの場合仮名であり、意図的に現実世界のアイデンティティにリンクされているか（例：ツイッターやGitHubのプロフィールにETHアドレスを含めるなど）、基本的なオンチェーンおよびオフチェーンのデータ分析を使用して現実世界のアイデンティティと関連付けることができます。

完全に匿名なトランザクションのために設計された特定の「プライバシーコイン」があります。ZcashやMoneroなどのプライバシーに焦点を当てたブロックチェーンは、送信者/受信者のアドレス、資産の種類、数量、トランザクションのタイムラインなどのトランザクションの詳細を隠します。

ゼロ知識技術をプロトコルに組み込むことで、プライバシーに焦点を当てた[ブロックチェーン](/glossary/#blockchain)ネットワークは、[ノード](/glossary/#node)がトランザクションデータにアクセスすることなくトランザクションを検証できるようにします。[EIP-7503](https://eips.ethereum.org/EIPS/eip-7503)は、[イーサリアム](/)ブロックチェーン上でネイティブなプライベートな価値の移転を可能にする提案された設計の例です。しかし、このような提案は、セキュリティ、規制、UXの懸念が入り混じっているため、実装が困難です。

**ゼロ知識証明は、パブリックなブロックチェーン上のトランザクションの匿名化にも適用されています**。その一例がTornado Cashです。これは、ユーザーがイーサリアム上でプライベートなトランザクションを行えるようにする、分散型のノン・カストディアルなサービスです。Tornado Cashはゼロ知識証明を使用してトランザクションの詳細を難読化し、金融プライバシーを保証します。残念ながら、これらは「オプトイン」のプライバシーツールであるため、違法行為と関連付けられています。これを克服するためには、最終的にパブリックなブロックチェーン上でプライバシーがデフォルトになる必要があります。[イーサリアム上のプライバシー](/privacy/)について詳しく学びましょう。

### アイデンティティ保護 {#identity-protection}

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

ゼロ知識証明は、[分散型アイデンティティ (DID)](/decentralized-identity/)の文脈で特に有用です。分散型アイデンティティ（「自己主権型アイデンティティ」とも呼ばれます）は、個人に個人識別子へのアクセスを制御する能力を与えます。納税者番号やパスポートの詳細を明らかにすることなく市民権を証明することは、ゼロ知識技術が分散型アイデンティティをどのように可能にするかを示す良い例です。

<Alert variant="info">
  <AlertEmoji text="💡" />
  <AlertContent>
    <AlertTitle className="mb-2">
      ZKPとアイデンティティの実践：イーサリアム上のブータン国家デジタルID（NDI）
    </AlertTitle>
    <AlertDescription>
      <p>
        アイデンティティ管理システムにZKPを使用する現実世界の例として、イーサリアム上に構築されたブータン王国の国家デジタルID（NDI）システムがあります。ブータンのNDIはZKPを使用して、市民がID上の機密な個人データを明らかにすることなく、「私は市民です」や「私は18歳以上です」といった自分自身に関する事実を暗号技術的に証明できるようにします。
      </p>
      <p>
        ブータンNDIの詳細については、<a href="/decentralized-identity/#national-and-government-id">分散型アイデンティティのケーススタディ</a>をご覧ください。
      </p>
 
</AlertDescription>
 
</AlertContent>
</Alert>

### Proof of Humanity（人間性の証明） {#proof-of-humanity}

今日実際に使用されているゼロ知識証明の最も広く使われている例の1つは、[World IDプロトコル](https://world.org/blog/world/world-id-faqs)です。これは「AI時代のグローバルなデジタルパスポート」と考えることができます。これにより、人々は個人情報を明らかにすることなく、自分がユニークな個人であることを証明できます。これは、人の虹彩をスキャンして虹彩コードを生成するOrbと呼ばれるデバイスを通じて実現されます。虹彩コードはチェックおよび検証され、その人が生物学的にユニークな人間であることが確認されます。検証後、ユーザーのデバイス上で生成された（生体認証データにリンクされたり、そこから派生したりしていない）アイデンティティのコミットメントが、ブロックチェーン上の安全なリストに追加されます。その後、ユーザーがサインイン、投票、またはその他のアクションを行うために、自分が検証済みの人間であることを証明したい場合はいつでも、リストのメンバーであることを確認するゼロ知識証明を生成できます。ゼロ知識証明を使用する利点は、この人がユニークであるという1つのステートメントのみが明らかになることです。それ以外のすべてはプライベートに保たれます。

World IDは、イーサリアム財団の[PSEチーム](https://pse.dev/)によって開発された[Semaphoreプロトコル](https://docs.semaphore.pse.dev/)に依存しています。Semaphoreは、ゼロ知識証明を生成および検証するための軽量かつ強力な方法として設計されています。これにより、ユーザーは自分がグループ（この場合は検証済みの人間）のどのメンバーであるかを示すことなく、グループの一部であることを証明できます。また、Semaphoreは非常に柔軟であり、アイデンティティの検証、イベントへの参加、またはクレデンシャルの所有権など、幅広い基準に基づいてグループを作成できます。

### 認証 {#authentication}

オンラインサービスを使用するには、アイデンティティとそれらのプラットフォームにアクセスする権利を証明する必要があります。これには多くの場合、名前、メールアドレス、生年月日などの個人情報を提供する必要があります。また、長いパスワードを記憶する必要があったり、アクセスを失うリスクがあったりします。

しかし、ゼロ知識証明は、プラットフォームとユーザーの両方にとって認証を簡素化できます。公開入力（例：ユーザーがプラットフォームのメンバーであることを証明するデータ）と秘密入力（例：ユーザーの詳細）を使用してZK証明が生成されると、ユーザーはサービスにアクセスする必要があるときにそれを提示するだけでアイデンティティを認証できます。これにより、ユーザーのエクスペリエンスが向上し、組織は膨大な量のユーザー情報を保存する必要から解放されます。

### 検証可能な計算 {#verifiable-computation}

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

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

シャードなどの[オンチェーンのスケーリングソリューション](/developers/docs/scaling/#onchain-scaling)は、ブロックチェーンのベースレイヤーの大幅な変更を必要とします。しかし、このアプローチは非常に複雑であり、実装のエラーはイーサリアムのセキュリティモデルを損なう可能性があります。

[オフチェーンのスケーリングソリューション](/developers/docs/scaling/#offchain-scaling)は、コアとなるイーサリアムのプロトコルを再設計する必要はありません。代わりに、アウトソーシングされた計算モデルに依存して、イーサリアムのベースレイヤーのスループットを向上させます。

実際には次のように機能します。

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

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

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

チェーンは、オフチェーンのトランザクションを再実行せずに検証する方法を必要とします。そうしないと、オフチェーン実行の価値が失われます。

ここで検証可能な計算の出番です。ノードがイーサリアムの外部でトランザクションを実行すると、オフチェーン実行の正確性を証明するためにゼロ知識証明を提出します。この証明（[有効性証明](/glossary/#validity-proof)と呼ばれます）は、トランザクションが有効であることを保証し、イーサリアムが誰かの異議申し立てを待つことなく、結果をその状態に適用できるようにします。

[ゼロ知識ロールアップ](/developers/docs/scaling/zk-rollups)と[バリディウム](/developers/docs/scaling/validium/)は、有効性証明を使用して安全なスケーラビリティを提供する2つのオフチェーンのスケーリングソリューションです。これらのプロトコルは、オフチェーンで何千ものトランザクションを実行し、イーサリアムでの検証のために証明を提出します。証明が検証されると、それらの結果をすぐに適用できるため、イーサリアムはベースレイヤーでの計算を増やすことなく、より多くのトランザクションを処理できます。

レイヤー2 (L2) のスケーリングを超えて、ゼロ知識証明はイーサリアムのレイヤー1 (L1) のブロック実行自体を検証することもできます。[L1検証のためのzkEVM](/roadmap/zkevm/)は、バリデータがすべてのトランザクションを再実行するのではなく、証明をチェックすることでブロックを検証できるようにします。これにより、バリデータのハードウェア要件を引き上げることなく、より高いガスリミットが可能になります。

### オンチェーン投票における賄賂と共謀の削減 {#secure-blockchain-voting}

ブロックチェーンの投票スキームには、完全に監査可能である、攻撃に対して安全である、検閲に耐性がある、地理的な制約がないなど、多くの好ましい特徴があります。しかし、オンチェーンの投票スキームでさえ、**共謀**の問題と無縁ではありません。

「他者を欺き、騙し、誤解させることによって開かれた競争を制限するために調整すること」と定義される共謀は、悪意のあるアクターが賄賂を提供することで投票に影響を与えるという形をとる場合があります。たとえば、アリスは`option A`を好むにもかかわらず、ボブから賄賂を受け取って投票で`option B`に投票するかもしれません。

賄賂と共謀は、シグナリングメカニズムとして投票を使用するあらゆるプロセス（特にユーザーがどのように投票したかを証明できる場合）の有効性を制限します。これは、特に投票が希少なリソースの割り当てを担っている場合に、重大な結果をもたらす可能性があります。

たとえば、[クアドラティック・ファンディングのメカニズム](https://www.radicalxchange.org/wiki/plural-funding/)は、さまざまな公共財プロジェクトの中で特定のオプションに対する選好を測定するために寄付に依存しています。各寄付は特定のプロジェクトへの「投票」としてカウントされ、より多くの投票を獲得したプロジェクトは、マッチングプールからより多くの資金を受け取ります。

オンチェーンの投票を使用すると、クアドラティック・ファンディングは共謀の影響を受けやすくなります。ブロックチェーンのトランザクションは公開されているため、賄賂を贈る側は賄賂を受け取る側のオンチェーンのアクティビティを検査して、どのように「投票」したかを確認できます。このようにして、クアドラティック・ファンディングは、コミュニティの集約された選好に基づいて資金を割り当てるための効果的な手段ではなくなります。

幸いなことに、MACI（Minimum Anti-Collusion Infrastructure）などの新しいソリューションは、ゼロ知識証明を使用して、オンチェーンの投票（例：クアドラティック・ファンディングのメカニズム）を賄賂や共謀に対して耐性のあるものにしています。MACIは、中央管理者（「コーディネーター」と呼ばれる）が、各個人がどのように投票したかの詳細を明らかにすること_なく_、投票を集計し、結果を計算できるようにするスマート・コントラクトとスクリプトのセットです。それでも、投票が適切にカウントされたことを検証したり、特定の個人が投票ラウンドに参加したことを確認したりすることは可能です。

#### MACIはゼロ知識証明とどのように機能するのか？ {#how-maci-works-with-zk-proofs}

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

MACIでは、コーディネーターが投票を誤って処理したり結果を集計したりすることを不可能にすることで、計算の正確性を確保するためにゼロ知識証明が使用されます。これは、コーディネーターに、a) すべてのメッセージが正しく処理されたこと、b) 最終結果がすべての_有効な_投票の合計に対応していること、を検証するZK-SNARK証明を生成することを要求することで実現されます。

したがって、（通常そうであるように）ユーザーごとの投票の内訳を共有しなくても、MACIは集計プロセス中に計算された結果の整合性を保証します。この機能は、基本的な共謀スキームの有効性を低下させるのに役立ちます。ボブがアリスに賄賂を贈ってあるオプションに投票させるという先ほどの例を使用して、この可能性を探ることができます。

- アリスは公開鍵をスマート・コントラクトに送信して投票に登録します。

- アリスはボブからの賄賂と引き換えに`option B`に投票することに同意します。

- アリスは`option B`に投票します。

- アリスは密かに暗号化されたトランザクションを送信し、自分のアイデンティティに関連付けられた公開鍵を変更します。

- アリスは新しい公開鍵を使用して、`option A`に投票する別の（暗号化された）メッセージをスマート・コントラクトに送信します。

- アリスはボブに、自分が`option B`に投票したことを示すトランザクションを見せます（公開鍵がシステム内のアリスのアイデンティティに関連付けられなくなったため、これは無効です）。

- メッセージを処理する際、コーディネーターはアリスの`option B`への投票をスキップし、`option A`への投票のみをカウントします。したがって、アリスと共謀してオンチェーンの投票を操作しようとするボブの試みは失敗します。

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

しかし、コーディネーターが誠実であり続ける場合、MACIはオンチェーンの投票の神聖さを保証するための強力なツールとなります。これは、各個人の投票の選択の完全性に大きく依存するクアドラティック・ファンディングのアプリケーション（例：[clr.fund](https://clr.fund/#/about/maci)）の間で人気がある理由を説明しています。

[MACIについてさらに学ぶ](https://maci.pse.dev/)。

## ゼロ知識証明はどのように機能するのか？ {#how-do-zero-knowledge-proofs-work}

ゼロ知識証明を使用すると、ステートメントの内容を共有したり、真実をどのように発見したかを明らかにしたりすることなく、ステートメントの真実性を証明できます。これを可能にするために、ゼロ知識プロトコルは、いくつかのデータを入力として受け取り、出力として「真」または「偽」を返すアルゴリズムに依存しています。

ゼロ知識プロトコルは、以下の基準を満たす必要があります。

1. **完全性 (Completeness)**: 入力が有効な場合、ゼロ知識プロトコルは常に「真」を返します。したがって、基礎となるステートメントが真であり、プルーバーと検証者が誠実に行動する場合、証明は受け入れられます。

2. **健全性 (Soundness)**: 入力が無効な場合、ゼロ知識プロトコルを騙して「真」を返させることは理論的に不可能です。したがって、嘘をついているプルーバーは、誠実な検証者を騙して無効なステートメントが有効であると信じ込ませることはできません（ごくわずかな確率の余白を除いて）。

3. **ゼロ知識 (Zero-knowledge)**: 検証者は、ステートメントの有効性または虚偽性以外に、ステートメントについて何も学びません（ステートメントについて「ゼロ知識」です）。この要件はまた、検証者が証明から元の入力（ステートメントの内容）を導き出すことを防ぎます。

基本的な形では、ゼロ知識証明は**ウィットネス**、**チャレンジ**、**レスポンス**の3つの要素で構成されています。

- **ウィットネス**: ゼロ知識証明では、プルーバーはある隠された情報の知識を証明したいと考えます。秘密の情報は証明の「ウィットネス」であり、プルーバーがウィットネスの知識を持っていると仮定することで、その情報の知識を持つ当事者だけが答えられる一連の質問が確立されます。したがって、プルーバーはランダムに質問を選び、答えを計算し、それを検証者に送信することで証明プロセスを開始します。

- **チャレンジ**: 検証者はセットから別の質問をランダムに選び、プルーバーに答えるように求めます。

- **レスポンス**: プルーバーは質問を受け入れ、答えを計算し、それを検証者に返します。プルーバーのレスポンスにより、検証者は前者が本当にウィットネスにアクセスできるかどうかを確認できます。プルーバーが盲目的に推測して偶然正解を得ているわけではないことを確認するために、検証者はさらに質問を選びます。このやり取りを何度も繰り返すことで、プルーバーがウィットネスの知識を偽造している可能性は、検証者が満足するまで大幅に低下します。

上記は「対話型ゼロ知識証明」の構造を説明しています。初期のゼロ知識プロトコルは対話型証明を使用しており、ステートメントの有効性を検証するには、プルーバーと検証者の間で双方向の通信が必要でした。

対話型証明がどのように機能するかを示す良い例は、Jean-Jacques Quisquaterの有名な[アリババの洞窟の物語](https://en.wikipedia.org/wiki/Zero-knowledge_proof#The_Ali_Baba_cave)です。この物語では、ペギー（プルーバー）はビクター（検証者）に対して、魔法の扉を開くための秘密のフレーズを知っていることを、そのフレーズを明かすことなく証明したいと考えています。

### 非対話型ゼロ知識証明 {#non-interactive-zero-knowledge-proofs}

対話型証明は画期的でしたが、両当事者が利用可能であり、繰り返し対話する必要があったため、その有用性は限られていました。検証者がプルーバーの誠実さを確信したとしても、その証明は独立した検証には利用できませんでした（新しい証明を計算するには、プルーバーと検証者の間で新しいメッセージのセットが必要でした）。

この問題を解決するために、Manuel Blum、Paul Feldman、Silvio Micaliは、プルーバーと検証者が共有鍵を持つ最初の[非対話型ゼロ知識証明](https://dl.acm.org/doi/10.1145/62212.62222)を提案しました。これにより、プルーバーは情報自体を提供することなく、ある情報（つまりウィットネス）の知識を証明できます。

対話型証明とは異なり、非対話型証明は参加者（プルーバーと検証者）間の1回の通信ラウンドのみを必要としました。プルーバーは秘密の情報を特別なアルゴリズムに渡し、ゼロ知識証明を計算します。この証明は検証者に送信され、検証者は別のアルゴリズムを使用してプルーバーが秘密の情報を知っていることを確認します。

非対話型証明はプルーバーと検証者の間の通信を減らし、ZK証明をより効率的にします。さらに、証明が一度生成されると、（共有鍵と検証アルゴリズムにアクセスできる）他の誰でも検証できるようになります。

非対話型証明はゼロ知識技術のブレークスルーとなり、今日使用されている証明システムの開発に拍車をかけました。これらの証明タイプについて以下で説明します。

### ゼロ知識証明の種類 {#types-of-zero-knowledge-proofs}

#### ZK-SNARKs {#zk-snarks}

ZK-SNARKは、**Zero-Knowledge Succinct Non-Interactive Argument of Knowledge**の頭字語です。ZK-SNARKプロトコルには以下の特性があります。

- **ゼロ知識 (Zero-knowledge)**: 検証者は、ステートメントについて他に何も知らなくても、ステートメントの整合性を検証できます。検証者がステートメントについて持っている唯一の知識は、それが真か偽かということです。

- **簡潔 (Succinct)**: ゼロ知識証明はウィットネスよりも小さく、迅速に検証できます。

- **非対話型 (Non-interactive)**: 複数回の通信ラウンドを必要とする対話型証明とは異なり、プルーバーと検証者は1回しか対話しないため、証明は「非対話型」です。

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

- **知識 (Knowledge)**: ゼロ知識証明は、秘密の情報（ウィットネス）にアクセスできなければ構築できません。ウィットネスを持たないプルーバーが有効なゼロ知識証明を計算することは、不可能ではないにしても困難です。

前述の「共有鍵」とは、プルーバーと検証者が証明の生成と検証に使用することに同意する公開パラメータを指します。公開パラメータ（総称して共通参照文字列（CRS）と呼ばれる）の生成は、プロトコルのセキュリティにおいて重要であるため、機密性の高い操作です。CRSの生成に使用されるエントロピー（ランダム性）が不誠実なプルーバーの手に渡った場合、彼らは偽の証明を計算することができます。

[マルチパーティ計算（MPC）](https://en.wikipedia.org/wiki/Secure_multi-party_computation)は、公開パラメータを生成する際のリスクを軽減する方法です。複数の当事者が[トラステッド・セットアップのセレモニー](https://zkproof.org/2021/06/30/setup-ceremonies/amp/)に参加し、各人がいくつかのランダムな値を提供してCRSを生成します。1人の誠実な当事者が自分のエントロピーの部分を破棄する限り、ZK-SNARKプロトコルは計算上の健全性を維持します。

トラステッド・セットアップでは、ユーザーはパラメータ生成の参加者を信頼する必要があります。しかし、ZK-STARKの開発により、トラステッド・セットアップなしで機能する証明プロトコルが可能になりました。

#### ZK-STARKs {#zk-starks}

ZK-STARKは、**Zero-Knowledge Scalable Transparent Argument of Knowledge**の頭字語です。ZK-STARKはZK-SNARKに似ていますが、以下の点が異なります。

- **スケーラブル (Scalable)**: ウィットネスのサイズが大きい場合、ZK-STARKはZK-SNARKよりも証明の生成と検証が高速です。STARK証明では、ウィットネスが大きくなってもプルーバーと検証の時間はわずかに増加するだけです（SNARKのプルーバーと検証者の時間はウィットネスのサイズに比例して増加します）。

- **透明性 (Transparent)**: ZK-STARKは、トラステッド・セットアップの代わりに、公開で検証可能なランダム性に依存して、証明と検証のための公開パラメータを生成します。したがって、ZK-SNARKと比較してより透明性があります。

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

## ゼロ知識証明を使用する際の欠点 {#drawbacks-of-using-zero-knowledge-proofs}

### ハードウェアコスト {#hardware-costs}

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

### 証明の検証コスト {#proof-verification-costs}

証明の検証にも複雑な計算が必要であり、アプリケーションにゼロ知識技術を実装するコストが増加します。このコストは、計算の証明の文脈で特に関連性があります。たとえば、ZKロールアップはイーサリアム上で単一のZK-SNARK証明を検証するために約500,000ガスを支払い、ZK-STARKはさらに高い手数料を必要とします。

### トラスト前提 {#trust-assumptions}

ZK-SNARKでは、共通参照文字列（公開パラメータ）が一度生成され、ゼロ知識プロトコルに参加したい当事者が再利用できるようになります。公開パラメータは、参加者が誠実であると想定されるトラステッド・セットアップのセレモニーを通じて作成されます。

しかし、ユーザーが参加者の誠実さを評価する方法は実際にはなく、ユーザーは開発者の言葉を信じるしかありません。ZK-STARKは、文字列の生成に使用されるランダム性が公開で検証可能であるため、トラスト前提から解放されています。その間、研究者たちは証明メカニズムのセキュリティを高めるために、ZK-SNARKの非トラステッド・セットアップに取り組んでいます。

### 量子コンピューティングの脅威 {#quantum-computing-threats}

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

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

## 参考文献 {#further-reading}

- [ゼロ知識証明のユースケースの概要](https://pse.dev/projects) — _Privacy and Scaling Explorations Team_
- [SNARKs vs. STARKS vs. Recursive SNARKs](https://www.alchemy.com/overviews/snarks-vs-starks) — _Alchemy Overviews_
- [ゼロ知識証明：ブロックチェーン上のプライバシーの向上](https://www.altoros.com/blog/zero-knowledge-proof-improving-privacy-for-a-blockchain/) — _Dmitry Lavrenov_
- [zk-SNARKs — 現実的なゼロ知識の例と詳細な探求](https://medium.com/coinmonks/zk-snarks-a-realistic-zero-knowledge-example-and-deep-dive-c5e6eaa7131c) — _Adam Luciano_
- [ZK-STARKs — 量子コンピューターに対しても検証可能な信頼を構築する](https://medium.com/coinmonks/zk-starks-create-verifiable-trust-even-against-quantum-computers-dd9c6a2bb13d) — _Adam Luciano_
- [zk-SNARKsがどのように可能であるかのおおよその入門](https://vitalik.eth.limo/general/2021/01/26/snarks.html) — _Vitalik Buterin_
- [ゼロ知識証明（ZKP）が自己主権型アイデンティティのゲームチェンジャーである理由](https://frankiefab.hashnode.dev/why-zero-knowledge-proofs-zkps-is-a-game-changer-for-self-sovereign-identity) — _Franklin Ohaegbulam_
- [EIP-7503の解説：ZK証明を使用したイーサリアム上のプライベートな移転の有効化](https://web.archive.org/web/20251116093505/https://research.2077.xyz/eip-7503-zero-knowledge-wormholes-for-private-ethereum-transactions/) — _Emmanuel Awosika_
- [ZKカードゲーム：ZKの基礎と現実世界のユースケースを学ぶためのゲーム](https://github.com/ZK-card/zk-cards) - _ZK-Cards_

<Divider />

<QuizWidget quizKey="zero-knowledge-proofs" />
