[翻訳] ゼロ知識証明（ZKP）の理解


:::note info
本記事は下記の翻訳となります。
[『Understanding Zero-Knowledge Proof (ZKP)』](https://blog.bunzz.dev/understanding-zero-knowledge-proof-zkp/)
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1926720/9ea99301-8b1c-4ccb-0a3a-a8a2181a8cf8.png)

## ZKP とは何ですか

暗号学において、ゼロ知識証明（Zero-Knowledge Proofs）は、ある人が何かを知っているか、または何かを行ったことを他の人に証明することができるようにするものであり、その情報や行動の内容を実際に明かすことなく証明することができます。つまり、人物 1 は、実際の知識の詳細を人物 2 に明かすことなく、何かを知っていることを人物 2 に納得させることができます。

例えば、あなたが事件を調査する刑事であり、容疑者や他の人に情報源を明かしたくない場合でも、主張を裏付ける証拠を容疑者に示さなければなりません。ここでゼロ知識証明が役立ちます。

ゼロ知識証明は、情報源や実際の証拠を明かさずに、容疑者に主張を裏付ける証拠があることを示す方法と考えることができます。まるで証拠のぼかし画像や要点の要約を容疑者に示すようなものですが、全体の全貌は明かされません。

この例では、容疑者は検証者を、刑事は証明者を、証拠は証明されるべき主張を、情報源は証人を表しています。ゼロ知識証明は、証明者が主張の真実性を証明するために、主張の真実性以外の追加情報を明かすことなく、検証者を納得させることができる要約のようなものです。

この例からわかるように、ゼロ知識証明の主要なアイデアは、証明者が主張の真実性を証明するために、主張の真実性そのもの以外の追加情報を明かさないことが可能であるということです。

## ZKP の種類

ゼロ知識証明は、対話型と非対話型の 2 つの主要なカテゴリに分類することができます。

1. **対話型ゼロ知識証明**は、証明者と検証者の間でのやり取りを含みます。証明者はメッセージを検証者に送信し、検証者はチャレンジを返します。証明者はそのチャレンジを使用して新しいメッセージを生成し、このプロセスを繰り返して検証者が証明者の主張を納得するまで続けます。対話型ゼロ知識証明は、検証者が納得しない場合に追加情報を要求できるため、非対話型証明よりも安全性が高い場合がありますが、複数の通信ラウンドが必要なため、遅くリソースを多く消費します。
2. **非対話型ゼロ知識証明**、または zk-SNARKs（Zero-Knowledge Succinct Non-Interactive Argument of Knowledge）は、証明者と検証者の間でのやり取りを必要としません。代わりに、証明者は事前計算された検証キーを使用して検証者が検証できる証明を作成します。非対話型ゼロ知識証明は、対話型証明よりも速く効率的ですが、検証者が追加情報を要求する機会が必要なため、安全性が低下する可能性があります。

非対話型ゼロ知識証明は、効率性とスケーラビリティのために、ブロックチェーンアプリケーションでより一般的に使用されています。ただし、セキュリティが最優先事項であり、追加の通信ラウンドのコストが問題ではない場合には、対話型ゼロ知識証明を使用することもあります。

## ZKP の応用

ゼロ知識証明は、ブロックチェーン DApp（分散型アプリケーション）の開発において、プライバシー、セキュリティ、効率性を向上させるために幅広い応用があります。以下にいくつかの例を挙げます。

1. **認証**: ゼロ知識証明は、ブロックチェーン DApp で安全な認証とアクセス制御を提供するために使用することができます。従来のパスワードに基づく認証の代わりに、ゼロ知識証明を使用して、ユーザーが鍵自体を明かさずに特定の情報にアクセスできることを証明することができます。
2. **トランザクション**: ゼロ知識証明は、ブロックチェーン上のトランザクションの妥当性を検証するために使用することができます。送信者、受信者、トランザクション金額など、トランザクションに関する機密情報を明かさずに、プライバシーとセキュリティを向上させることができます。
3. **身元確認**: ゼロ知識証明は、個人情報を明かさずにユーザーの身元をブロックチェーン DApp で確認するために使用することができます。これは、プライバシーやセキュリティが重要な医療、金融、政府の業界で特に有用です。
4. **サプライチェーン管理**: ゼロ知識証明は、サプライチェーンにおける製品や商品の正当性を保証するために使用することができます。例えば、特定の企業が製品を製造したことを、製造プロセスの機密情報を明かさずに証明することができます。

ゼロ知識証明は、機密情報を明かさずに情報を交換する安全な方法を提供することで、ブロックチェーン DApp のプライバシー、セキュリティ、効率性を向上させることができます。

## ZKP の特性

ゼロ知識証明（ZKP）には、さまざまなアプリケーションでプライバシーやセキュリティを向上させるための価値あるツールとなるいくつかの特性があります。以下に、ZKP の主要な特性のいくつかを示します。

1. **完全性**: ZKP プロトコルは、正直な証明者が主張の真実性を正直な検証者に納得させることができる場合、完全であると言われます。
2. **正当性**: ZKP プロトコルは、不正直な証明者が高い確率で偽の主張の真実性を正直な検証者に納得させることができない場合、正当であると言われます。

3. **ゼロ知識**: ゼロ知識証明 (ZKP) プロトコルは、検証者が証人や入力について真実性以外の何も学ばない場合に、ゼロ知識と言われます。

## ゼロ知識証明プロトコルの種類

ゼロ知識証明プロトコルには、それぞれ独自の特徴と用途を持ついくつかの種類があります。以下は、最も一般的なゼロ知識証明プロトコルのいくつかです。

1. **zk-SNARKs**: zk-SNARKs (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) は、解そのものを明かさずに、一方の当事者 (証明者) が問題の解を知っていることを他方の当事者 (検証者) に証明するゼロ知識証明プロトコルの一種です。zk-SNARKs は、プライバシーを保護するためのブロックチェーンアプリケーションで広く使用されています。
2. **zk-STARKs**: zk-STARKs (Zero-Knowledge Scalable Transparent Argument of Knowledge) は、解を明かさずに問題の解を知っていることを一方の当事者が証明するゼロ知識証明プロトコルの一種です。zk-STARKs は、zk-SNARKs よりも透明性とスケーラビリティに優れており、パブリックブロックチェーンに適しています。
3. **Bulletproofs**: Bulletproofs は、実際の値を明かさずに、ある値が特定の範囲内にあることを証明する範囲証明の効率的な検証を可能にするゼロ知識証明プロトコルの一種です。仮想通貨の取引では、Bulletproofs により効率的かつプライベートな証明の検証が可能になります。
4. **SONIC**: SONIC (Scalable, Non-Interactive, and Covertly Verifiable Zero Knowledge) は、対話型のセットアッププロセスを必要とせずに効率的なゼロ知識証明を可能にするゼロ知識証明プロトコルの一種です。SONIC は、他のゼロ知識証明プロトコルよりも効率的かつスケーラブルに設計されており、さまざまなアプリケーションに適しています。
5. **PLONK**: PLONK (Permutation-based, Linear, and Non-interactive Zero-Knowledge) は、順列論証に基づくゼロ知識証明プロトコルの一種です。PLONK は効率的かつスケーラブルに設計されており、仮想通貨の取引などのブロックチェーンアプリケーションで使用するのに適しています。

これらは、利用可能なゼロ知識証明プロトコルのいくつかの例です。各プロトコルには長所と短所があり、選択するプロトコルは開発中のアプリケーションの具体的な要件に依存します。

## ゼロ知識証明の利点と欠点

ゼロ知識証明 (ZKP) には、開発者が認識しておくべきいくつかの利点と欠点があります。以下は、ZKP の主な利点と欠点のいくつかです。

### 利点：

1. 強化されたプライバシー：ZKP は、文自体の真実性以外の追加情報を明らかにせずに文の真実性を証明する方法を提供します。これにより、ZKP はプライバシーの強化と機密データの保護に貴重なツールとなります。
2. 強化されたセキュリティ：ZKP は、信頼できる中間者の必要性なしに、デジタル通貨などのさまざまなアプリケーションのセキュリティとプライバシーを向上させるために使用できます。
3. スケーラビリティ：ZKP は、暗号化などの他のプライバシー強化技術よりも一般にスケーラブルです。なぜなら、追加のストレージや計算リソースを必要としないからです。
4. 柔軟性：ZKP は、認証からデータ共有、セキュアな計算まで、さまざまなアプリケーションやユースケースに適用できる柔軟なツールです。

### 欠点：

1. 複雑さ：ZKP の実装は、暗号学と数学の専門知識を必要とする複雑で困難な作業です。これにより、開発者が ZKP をアプリケーションに統合することが困難になる場合があります。
2. パフォーマンスのオーバーヘッド：ZKP は追加の計算オーバーヘッドを導入することがあり、アプリケーションのパフォーマンスに影響を与える可能性があります。ただし、最適化と効率的な ZKP プロトコルの使用により、このオーバーヘッドを削減することができます。
3. 信頼の前提条件：ZKP は、基礎となる暗号プリミティブのセキュリティや、証明の生成と検証に使用されるハードウェアとソフトウェアの整合性など、特定の信頼の前提条件に依存しています。これらの信頼の前提条件における脆弱性や弱点は、ZKP のセキュリティとプライバシーを危険にさらす可能性があります。
4. 限られた採用：ZKP はまだ比較的新しい技術であり、その採用は現在、一部のニッチなアプリケーションに限定されています。ただし、技術が成熟し、より多くのユースケースが特定されるにつれて、この状況は変わる可能性があります。

## 開発者はどのように ZKP を実装できますか？

ゼロ知識証明（ZKP）プロトコルの実装は、暗号学、数学、プログラミングの専門知識を必要とする複雑な作業です。DApp でゼロ知識証明を実装するには、特殊な暗号プロトコルを使用して情報の安全な交換を可能にする必要があります。ただし、以下は開発者が ZKP プロトコルを実装するために従うことができる一般的な手順です：

1. **ZKP プロトコルの選択**：最初のステップは、特定のアプリケーションに適した ZKP プロトコルを選択することです。いくつかの ZKP プロトコルが利用可能であり、それぞれに長所と短所があるため、選択はアプリケーションの具体的な要件に依存します。
2. **証明システムの設計**：次のステップは、証明を生成し検証するために使用される証明システムを設計することです。これには、解決すべき問題の定義、入力と出力変数の特定、および満たす必要がある制約の決定が含まれます。
3. **証明生成アルゴリズムの実装**：証明システムが設計されたら、開発者は証明を生成するアルゴリズムを実装する必要があります。これには、入力変数の証人の作成、コミットメントの生成、および証明の構築など、さまざまな数学的な計算が含まれます。
4. **証明検証アルゴリズムの実装**：次のステップは、証明を検証するアルゴリズムの実装です。これには、証明システムで指定された制約に対する証明のチェック、コミットメントの検証、および証人の妥当性のチェックが含まれます。
5. **ZKP プロトコルをアプリケーションに統合**：最後に、ZKP プロトコルをアプリケーションに統合する必要があります。これには、アプリケーションのワークフローの適切なポイントで証明生成および検証アルゴリズムを呼び出すコードの記述が含まれます。

ZKP プロトコルの実装は、詳細な注意と基礎となる数学と暗号学の強い理解を要する難しい作業であることに留意する価値があります。開発者は、これらの分野の専門家と相談したり、既存のライブラリやツールを活用して実装を簡素化することができます。

---

---

:::note info
【Bunzz とは】
Bunzz はアジア最大級の DApps 開発インフラを運営する、web3×LLM におけるリーディングカンパニーです。「公共財としてのスマートコントラクト」の実現に向けて、各種 web3 インフラやサービスを開発・提供しております。

【Our Projects】

- **[Smart Contract Hub | スマートコントラクトの Github](https://www.bunzz.dev/)**
- **[DeCipher | "Read me" for All of Contracts](https://www.bunzz.dev/decipher)**
- **[Bunzz for Enterprise | Tier1 の技術リソースを日本企業に提供](https://enterprise.bunzz.dev/ja)**
- **[Bunzz Audit | 透明かつ持続的なコントラクト監査の仕組みを実現](hhttps://www.bunzz.dev/audit)**

【Social Links】

- [X(旧 Twitter))](https://twitter.com/BunzzDev)
- [Discord Community](https://t.co/6hHgssJdvW)
- [Youtube](https://www.youtube.com/@bunzzdev)
- [Instagram](https://www.instagram.com/bunzzdev/)

【お問合せ】
web3 開発・コンサルティングのご相談はこちらから 👉[Google Form](https://forms.gle/4tgQjWSw2MMMZW6E6)
:::

:::note info
Bunzz R&D エンジニア荒巻さんの著書[『スマートコントラクトの仕組みと法律』](https://amzn.to/3V03sNH)が好評発売中です 📕
<a href="https://amzn.to/3V03sNH" rel="nofollow" referrerpolicy="no-referrer-when-downgrade">
<img
    src="https://m.media-amazon.com/images/I/81wopoZ1K4L._SY522_.jpg"
    alt="『スマートコントラクトの仕組みと法律』（中央経済グループパブリッシング）"
    width="200px"
    height="auto"
    Style="border: 0px;"
  />
</a>
:::