ゼロ知識証明って結局何なの?

はじめに

今回はゼロ知識証明の概略について、まとめていきたいと思います。この技術はブロックチェーン領域での活用もかなり期待されており、特にEthereumのセキュリティやスケーラビリティをより向上させるL2ソリューションであるzkEVMの実装に向けて各社開発に凌ぎを削っている状況です。

ただ実際問題、ゼロ知識証明の世界はかなり難解で、私も理解に大変苦心をしている状況です。そこで今回はゼロ知識証明とは何かの理解を促進するために私がこれまで参考にしてきたコンテンツなども活用しながら整理していきたいと思います。ゼロ知識証明やzkRollupをこれから学んでいく際の入り口的な立ち位置になれればと思います。

 

なぜゼロ知識証明が必要なのか

ブロックチェーンのオープンな特性は、ガバナンスの透明化など多くの利点を提供してきましたが、個人資産が外部から閲覧可能であることのリスクや、企業のプライベート性の高いデータの取扱いなど、まだまだ課題が残されています。今後はその透明性と秘匿性がユースケースごとに上手く使い分けされていくことが予想されますが、その中でゼロ知識証明が秘匿性を向上させる技術として活用されていく可能性が高いです。

 

ゼロ知識証明は、Shafi GoldwasserとSilvio Micaliによる1985年のMIT論文「The Knowledge Complexity of Interactive Proof-Systems」にて初めて説明された理論になります。この論文で著者らは、証明者がデータに関する追加情報を開示することなく、それが真であると検証者に説明することが可能であることを実証しています。

 

ブロックチェーン技術におけるゼロ知識証明にはzk-SNARKS、zk-STARKS、Plonkyなど様々な実装があり、それぞれ証明サイズ、証明者時間、検証時間に特徴があります。

PolygonがzkEVMの実装を目指して開発を進めているPolygon ZeroはPlonky2を活用したzkRollupとなっており、Plonky2が持つ再起的証明の特性を活かしてトランザクション処理の高速化を実現しています。

 

ゼロ知識証明の基本特性

ゼロ知識証明の主な特性は以下の3点です。

 

1. 完全性

命題が真であれば、検証者は証明者が正確な知識を持っていることを確信できる

2. 健全性

命題が偽であれば、不正な証明者は検証者に正確な知識を持っていることを一方的に納得させることができない

3. ゼロ知識性

命題が真であれば、検証者はそれが真であること以外、証明者から知識を取得することができない

 

ゼロ知識証明の作成では検証者が証明者に一連の動作を依頼します。その動作は証明者が正しい情報を持っている場合にのみ、実行することが可能となり、もし証明者が検証者の求める動作の結果を推測して回答するだけであれば、最終的には検証者のテストによって高確率で間違っていることが証明されることになります。ここからはその具体例として洞窟問題を用いて説明していきます。

 

概念を理解するための例「洞窟問題」

Jean-Jacques Quisquaterらの論文「我が子にゼロ知識証明をどう教えるか」で紹介されているのが、この洞窟問題になります。データを他者に開示することなく、データに関する知識を証明することを説明する概念的な例になります。

 

https://blog.chain.link/what-is-a-zero-knowledge-proof-zkp/

 

前提となる情報と証明の流れは以下の通りです。

 

◆基本情報

男性:検証者

女性:証明者

前提:

・男性(検証者)は女性(証明者)がAとBのどちらの道から入ったかを知らない

・女性(証明者)は洞窟の先にある扉を開けるパスワードを知っている

→つまり、女性はAとBのどちらの道からも外に出られる

証明したいこと:

女性(証明者)はパスワードを知っていることを男性(検証者)に証明したいが、パスワードの内容は知られたくない

 

さて、女性はパスワードの中身を男性に知らせずにどう自分がパスワード知っていることを証明するのかというのがこの洞窟問題のテーマになっています。

ここでゼロ知識証明の考え方を活用することになります。

 

◆検証の流れ:

・男性は女性がどの道から洞窟に入ったのかわからない洞窟の外に立つ

・女性はAとBの道のどちらかをランダムに選んで、その道を歩く

・男性は女性にAとBの二つの道のうちどちらかを使って洞窟の入り口に戻るように依頼する

→ここで女性が元々Aの道を選んでいて、男性からBの道から戻るように依頼された場合、それを実現する唯一の方法はパスワードを知っていることになります。

 

この一連のプロセスを何度も繰り返すことで、女性がパスワードの知識を持っていて、たまたま推測で選んだ帰り道が当たっていたわけではないことが確率的に証明されます。

なお、例えばこのプロセスを20回繰り返した場合、全てに応えられる可能性は約0.000001%というかなり低い確率になるということです。

概念的な話になりますが、以上がゼロ知識証明の考え方になっています。

 

おわりに

今回は難解なゼロ知識証明をイメージしやすくするために、私がこれまで参考にした情報を噛み砕いてまとめてみました。これが概念から実践的な内容になってくると数式も沢山登場してくるので、一朝一夕に本質的な理解に辿り着くことは難しいかもしれませんが、ゼロ知識証明を今後学んでいくための概念理解の一助になれたら幸いです。

 

参考:https://blog.chain.link/what-is-a-zero-knowledge-proof-zkp/