見出し画像

【Crypto】 ゼロ知識証明

ゼロ知識証明 (Zero-Knowledge Proofs)

証明者が特定の情報を知っていることを、その情報自体を明らかにすることなく検証者に証明できる暗号技術です。検証者に対して、証明者が秘密情報を持っていることを証明できる一方で、その情報自体や具体的な方法は開示されません。また、証明プロセスを複数回繰り返すことで、証明の正当性をさらに高めることができます。
Ethereumでは、ゼロ知識証明は主にプライバシーの向上とスケーラビリティの改善に使用されています。zk-SNARKsやzk-STARKsは、ゼロ知識証明の一種であり、Byzantiumアップグレード以降、Ethereumでサポートされています。

簡単な例

例1:「色の見え方」ゲーム

アリスとボブは、それぞれ異なる色が見える特別なメガネを持っています。アリスは、自分が赤と緑の色を見分けられることをボブに証明したいですが、どちらの色がどのメガネで見えるかは秘密にしたいと考えています。

  1. アリスは、赤いボールと緑のボールを用意し、ボブに見せます。

  2. ボブは、アリスに背を向け、ボールを入れ替えるかそのままにするかを決め、アリスにどちらの手にどのボールがあるか教えずに手を伸ばします。

  3. アリスは、特別なメガネをかけて、ボブの手にあるボールの色を見分け、入れ替えたかどうかを答えます。

  4. このプロセスを何度も繰り返します。アリスが毎回正しく答えられるならば、彼女は本当に赤と緑の色を見分けられることが証明されます。

このゲームでは、アリスはボブに、自分が赤と緑の色を見分けられることを証明できましたが、どの色がどのメガネで見えるかは秘密に保たれました。これがゼロ知識証明の一例です。


例2:「魔法の扉」

想像してください、魔法の扉があります。この扉は、正当な所有者(アリス)しか開けることができません。アリスは、自分が扉の正当な所有者であることを証明したいと考えていますが、その方法をボブに知られたくありません。

ここで、アリスはゼロ知識証明を使って、自分が扉の正当な所有者であることを証明できます。

  1. アリスは、ボブに自分が扉の正当な所有者であることを証明するために、扉の前に立ちます。ボブはアリスの横で見ていますが、鍵を使ったロックの解除方法を見ることはできません。

  2. アリスは、ボブが見えないように鍵を使って扉を開けます。

  3. 扉が開いたことを確認したボブは、アリスが正当な所有者であると判断します。

この例では、アリスはボブに対して、自分が扉の正当な所有者であることを証明できましたが、鍵を使ったロックの解除方法は秘密に保たれました。


ゼロ知識証明は、秘密のデータや具体的な方法を開示せずに、その方法を使って出した結果を検証者が照合することができる技術です。


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

ブロックチェーン技術のプライバシー、スケーラビリティ、およびセキュリティの課題に対処するために必要とされています。

プライバシーの保護

ブロックチェーン技術は、その透明性と改ざん防止性から多くの利点を享受していますが、プライバシーの保護に課題があります。トランザクションの内容や参加者が公開されることにより、個人や企業の機密情報が漏洩するリスクがあります。
ゼロ知識証明は、トランザクションの正当性を証明しながら、実際の内容や参加者の情報を秘密に保つことができるため、プライバシーの保護に貢献します。


スケーラビリティの改善

ブロックチェーンネットワークは、トランザクションの検証と記録に多くのコンピューティングリソースを必要とし、ネットワークのスケーラビリティに制約をもたらします。
証明のサイズが小さく、検証が高速であるため、ネットワークの負荷を軽減し、スケーラビリティを向上させることができます。


不正行為の防止

ゼロ知識証明を利用することで、特定の情報を知っていることを証明できるため、改ざんや不正行為を防止することができます。
例えば、投票システムでは、ゼロ知識証明を使用して投票者が正当な投票権を持っていることを証明できます。これにより、不正投票を防止し、システムの信頼性を高めることができます。


仕組みや技術

インタラクティブ (Interactive) ZKPs

証明者と検証者が複数回のやり取りを行い、検証者が情報の正当性を判断します。これには、コミットメント、チャレンジ、およびレスポンスのフェーズが含まれます。

ノンインタラクティブ (Non-interactive) ZKPs

証明者は一度だけ情報を送信し、検証者はそれを検証します。これは、一般にzk-SNARKs(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)と呼ばれる技術を使用して実現されます。


難解性の仮定

ゼロ知識証明は、計算困難性の仮定に基づいています。これは、検証者が証明者の秘密情報を推測することが現実的な時間内には不可能であるという仮定です。この仮定により、検証者は証明者が正当な情報を持っていることを信頼できます。


ゼロ知識性、完全性、音響性

ゼロ知識性 (Zero-Knowledge)
検証者は、証明者の秘密情報を明らかにしないまま、その情報の正当性を確認できます。
完全性 (Completeness)
証明者が真実を主張している場合、検証者はその主張を確実に受け入れます。
健全性(Soundness) 
証明者の主張が偽であるならば、検証者はその主張が偽であることを高い確率で見抜くことができる。


zk-SNARKs (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)

zk-SNARKsは、ゼロ知識証明の一種で、証明が短く(Succinct)、ノンインタラクティブであることが特徴です。これにより、証明の生成と検証が高速になり、ブロックチェーンなどの分散システムでのスケーラビリティが向上します。zk-SNARKsは、公開鍵暗号の一種であるペアリングベース暗号を利用しています。


zk-STARKs (Zero-Knowledge Scalable Transparent Arguments of Knowledge)

zk-STARKsは、zk-SNARKsと同様にゼロ知識証明を提供しますが、信頼されたセットアップが不要であり、透明性(Transparent)が向上しているのが特徴です。これは、量子コンピュータに対する耐性も提供します。ただし、zk-STARKsは、現時点では証明サイズがzk-SNARKsよりも大きく、検証速度も若干遅いという課題があります。


具体例

Zcash

Zcashは、プライバシーセントリックな暗号通貨で、ゼロ知識証明技術の一種であるzk-SNARKsを利用しています。これにより、送信者、受信者、取引額の情報が第三者には見えないまま取引が行われ、プライバシーが保護されます。Zcashは、Bitcoinのコードベースにゼロ知識証明を実装した最初のプロジェクトの1つです。


Aztec Protocol

Ethereum上でプライバシー保護されたスマートコントラクトやトランザクションを実現するためのプロトコルです。Aztecでは、zk-SNARKsを利用して、取引データのプライバシーを保護しながら、取引の正当性を検証することができます。これにより、企業や個人が機密情報を保護しながら、Ethereum上で安全に取引を行うことが可能になります。


Tornado Cash

Ethereum上で匿名性の高いトランザクションを提供する分散型アプリケーション(dApp)です。ユーザーは、Tornado Cashを利用して、ETHやERC20トークンを送金する際に、送信者と受信者の関連性を隠すことができます。これにより、プライバシーが向上し、トランザクションの追跡を困難にします。Tornado Cashでは、zk-SNARKsが利用されています。


Loopring

Ethereum上で分散型取引所(DEX)を構築するためのプロトコルです。Loopringでは、ゼロ知識ロールアップ(zkRollup)という技術を利用して、取引のスケーラビリティを向上させています。
オンチェーンでトランザクションを圧縮し、オフチェーンで検証を行い、ゼロ知識証明を利用して、取引の正当性を保証します。これにより、取引の処理速度が向上し、手数料が削減されます。















































よろしければサポートお願いします!よりいい情報を発信します。