かとてん
(なんやゼロ知識証明って・・・)
(わけ分からんやんけ・・・)
かとてん
なぁ、まるお。
最近、Web3界隈で話題になってる「ゼロ知識証明」って一体なんなんや。
ゼロ知識証明とは?
まるお
ゼロ知識証明は、1980年代に生まれた「ある情報の内容を明かすことなく、その情報を知っているという事実を証明する技術」やな。
かとてん「ほう・・・、イマイチ意味が分からんな・・・。もうちょっと分かりやすく頼む。」
まるお「それじゃあもうちょっと具体的にしてみるか。」
まるお「具体例で分かりやすいのはパスワード認証にゼロ知識証明を使うケースやな。」
まるお「パスワードを認証するとき、パスワードを入力しなくても、代わりに「パスワードを知っている証拠」があれば認証しても問題ないやろ?」
かとてん「あー、確かに問題ないな。」
まるお「せやろ。」
まるお「だから、その証拠を得るためにゼロ知識証明を使う。」
まるお「そうすると、パスワード自体を相手に伝えることなくパスワード認証できるっちゅうワケや。」
まるお「このときの「パスワード自体を相手に伝える必要がない」ってのがミソやで。」
かとてん「あー、なるほど。完全に理解した。」
かとてん「プライバシーを守るのにめっちゃ使えそうな技術やな。」
まるお「そうなんや。」
まるお「だから「情報を伝えたくない=プライバシーを守りたい」ときに多く使われてるな。」
まるお「パスワード認証の他にも、本人確認(デジタル署名)やブロックチェーンのトランザクション認証(ZCash)なんかにも利用されとるで。」
まるお「最近ではzk-rollupやzk-EVMとかいろいろ出てきてるし、ゼロ知識証明は押さえておきたい技術の一つやな。」
どんな仕組み?
かとてん「ゼロ知識証明がどんなもんかってのは大体理解したけど、一体どんな仕組みなんや?」
まるお「ゼロ知識証明には、インタラクティブなものと非インタラクティブなものがある。」
まるお「まずは、インタラクティブなゼロ知識証明から説明しよか。」
かとてん「よろしく頼む。」
ゼロ知識対話証明
まるお「インタラクティブなゼロ知識証明はゼロ知識対話証明(Zero-Knowledge InteractiveProof(ZKIP))と呼ばれてる。」
まるお「ゼロ知識対話証明には「アリババの洞窟」っていう有名な例があるから、この例をもとに説明するで。」
商人は洞窟の中にある秘密の抜け道を通るための合言葉を盗賊から教えてもらいたい。
しかし、商人側には「お金を先に払ってしまうと偽の合言葉を教えられる問題(盗賊が合言葉を知らない)」があり、盗賊側には「合言葉を先に教えてしまうとお金をもらえない問題」がある。
これらの問題を解決して取引を確実なものとするために、商人に合言葉を伝えず、盗賊が本当の合言葉を知っているのかどうかを証明したい。
■証明方法
1 盗賊はどちらかの入口から洞窟に入る。
2 商人がランダムに選んだ入口から出てくるよう盗賊に指示する。
3 盗賊は商人に言われた方の出口から出る。
4 ①~③を繰り返す。
1 盗賊はどちらかの入口から洞窟に入る。
2 商人がランダムに選んだ入口から出てくるよう盗賊に指示する。
3 盗賊は商人に言われた方の出口から出る。
4 ①~③を繰り返す。
まるお「盗賊が正しい合言葉を知っていれば、試行回数に関係なく商人の要求通りに洞窟から出てこれるわな。」
まるお「つまり、「毎回指示された出口から出てこられれば正しい情報を持っていることを証明できる」ってワケや。」
まるお「ちなみに、10回やれば千分の一、40回やれば一兆分の一の成功率になるやで。」
かとてん「なるほどなー。」
まるお「ただし、ゼロ知識証明のプロトコルはこの3つの性質を満たす必要があんねん。」
1 完全性(completeness)
証明者の主張が正しいのであれば、検証者はその主張の正しさを高確率で検証できる。
2 健全性(soundness)
証明者の主張が間違っているのであれば、証明者がどのように振る舞ったとしても、検証者はその主張が偽りであることを見抜くことができる。
3 ゼロ知識性(zero knowledge)
検証者が証明者から他の知識(情報)を盗もうとしても、証明者の主張が正しいこと以外の知識(情報)を得ることはできない。
※洞窟の例では、証明者=盗賊、検証者=商人となる。
証明者の主張が正しいのであれば、検証者はその主張の正しさを高確率で検証できる。
2 健全性(soundness)
証明者の主張が間違っているのであれば、証明者がどのように振る舞ったとしても、検証者はその主張が偽りであることを見抜くことができる。
3 ゼロ知識性(zero knowledge)
検証者が証明者から他の知識(情報)を盗もうとしても、証明者の主張が正しいこと以外の知識(情報)を得ることはできない。
※洞窟の例では、証明者=盗賊、検証者=商人となる。
まるお「ゼロ知識証明のプロトコルを考えるときは注意してや。」
かとてん「了解やで!」
まるお「ほいじゃあ、次は非インタラクティブなゼロ知識証明の仕組みやな。」
かとてん「おう。」
非対話型ゼロ知識証明
まるお「非インタラクティブなゼロ知識証明は非対話型ゼロ知識証明(Non-interactive Zero-Knowledge Proof(NIZKP))と呼ばれてる。」
まるお「実は、ゼロ知識対話証明には対話の試行回数を重ねるのに時間がかかる問題と、対話の途中に攻撃されてしまうとセキュリティ面が弱くなる問題があるんや。」
まるお「ほんで、これらの問題を踏まえて考えられたのが非対話型ゼロ知識証明なんやで。」
かとてん「おぉ・・・、なんかすごそうやな。」
まるお「せやろ。実際、ものすごい可能性に満ち溢れた技術なんやで。」
まるお「まぁ、非対話型ゼロ知識証明の手法はいろいろあるんやけど、CRS(共通参照情報)モデルって呼ばれてる証明プロセスだとこんな仕組みになってるな。」
CRSモデル
1 証明者と検証者の間に信頼できる第三者を置く。
2 第三者が「証明に利用するための公開情報」を証明者と検証者に送る。
3 証明者はその公開情報を使って正しい情報を持っているという証明を生成する。
4 証明者は③の証明を一度だけ検証者に送る。
5 検証者は④で送られきた証明を検証する。
1 証明者と検証者の間に信頼できる第三者を置く。
2 第三者が「証明に利用するための公開情報」を証明者と検証者に送る。
3 証明者はその公開情報を使って正しい情報を持っているという証明を生成する。
4 証明者は③の証明を一度だけ検証者に送る。
5 検証者は④で送られきた証明を検証する。
まるお「これで証明者と検証者で対話を行わなくて良くなるっちゅうことや。」
まるお「ちなみに、zk-SNARKsとかはまさにこの仕組みを使っているで。」
かとてん「ほー。分かったような分からんような・・・やなぁ。」
まるお「まぁ大まかなイメージとしては、何回も対話せずとも第三者が情報の正しさを保証してくれるイメージでいいと思う。」
まるお「ワイ、数学は苦手やさかい、このくらいのザックリした説明で勘弁したってや。」
かとてん「大体わかったでええわ。サンクス!」
おわりに
まるお「さっきも言ったとおり、今回の説明はゼロ知識証明の大まかな説明にすぎん。」
まるお「ゼロ知識証明を本格的に理解するならもっと深いところまで理解せなあかんやろうし、何より数学的なところが重要になってくる。」
かとてん「でも理解できたら世界広がりそうな技術だよなー・・・。」
まるお「せやな。ワイも、もうちょっと詳しくなったらまた解説するわ。」
かとてん「期待してるで!!」