ゼロ知識証明(ZKP)
ブロックチェーンにおけるゼロ知識証明の必要性
ブロックチェーン(特にパブリックチェーン)において、トランザクション履歴が追跡できるという性質は、強みである一方
プライバシーの問題を顕在化させる。
現実世界の個人・団体とブロックチェーン上のアドレスは、一般ユーザーに分かりやすい形では紐付いていないため、アドレスからアドレスへ送られるアセットの所有権に関するプライバシーは守られているように思えるがアドレスを出入りする資産の金額や頻度、IPアドレスなどから、現実世界にいるアドレスの管理者を特定することは不可能ではない。
一方で、トランザクションを完全に暗号化してしまうと、その正当性を第三者が検証できなくなってしまい、分散台帳の安全性が損なわれるうえ、マネーロンダリングやテロ資金供与対策(AML/CFT)の観点からも、第三者が検証不可能な暗号化は現実的ではない。そこでプライバシーを確保しつつ、分散台帳の検証性や法令遵守を実現する証明プロトコルとして「ゼロ知識証明」が注目されている。
「数式なんて見たくねぇ!ざっくり理解したい!」ならこの記事 がおすすめ ゼロ知識証明を土台に、Halo 2、zk-Rollup、Schnorr署名が成り立っています はじめに
ゼロ知識証明とは1985年に発案された「ある人が他の人に、自分の持っている(通常、数学的な)命題が真であることを伝えるのに、真であること以外の何の知識も伝えることなく証明できるようなやりとりの手法」である。
ゼロ知識性や対話証明の研究から確率的検査可能証明(Probabilisticaly Checkable Proof、PCP)が生まれた。
ex:命題
・巨大な合成数の素因子(素因数分解の解)を知っている、離散対数問題(DLP)の解を知っていること
・任意のNP完全問題の証拠を持っていること
・公開された情報yに対する秘密情報xを知っていること
今では認証や電子署名、公開鍵に応用されている
条件
ゼロ知識証明は次の3条件を満たしていないといけない。
(証明者はP(Prover)、検証者はV(Verifier)と略す。)
完全性(completeness)
真であることをVは、Pの持っている命題が真であるならば、真であることが必ずわかること。
つまり、命題Xが真の場合,(P,Vがプロトコルに従えば)Vは高確率で受理する
健全性(soundness)
Pの持つ命題が偽であるなら、Vは高い確率でそれが偽であると見抜けること。
言い換えると、命題Xが偽の場合,(P*がどのように振舞っても)Vが受理する確率は無視できるほど小さい
ゼロ知識証明は確定的証明ではなく、確率的証明であると言える。このとき非常に低い確率ではあるが、偽の命題を持っているのにそれが真であると示せてしまうことがあることを「健全性のエラー」と呼ぶ。
健全性とは、このエラーの起こる確率を実用的に十分小さくできることを意味する。
この条件が満たすところ、PはVを騙せない
ゼロ知識性(zero-knowledge)
Pの持つ命題が真であるなら、Vが不正してPから知識を盗もうとしても「命題が真である」以外の何の知識も得られないこと。
このゼロ知識性は、どんなV(知識を持たない)であっても、正しいPと対話したかのような対話記録を生成できることだと記述することもできる。PとVの対話証明で得られるデータは,(Pなしでも)模倣できる
前二者の性質は、ゼロ知識証明に限らず対話型証明システムに共通のものである。最後の性質があってはじめてゼロ知識証明となる。
なお健全性よりも強い知識健全性(knowledge soundness)とよばれる性質が用いられる場合もあり、この性質は「Vが証明を受理したならば、Pにオラクルアクセスすることで高確率で命題に対応する証拠を抽出できる(つまりPの秘密を取り出せる)効率的なアルゴリズムが存在する」ことを保証する。健全性を知識健全性に置き換えた場合は知識のゼロ知識証明(zero-knowledge proof of knowledge)と呼ばれる。(ちょっと意味わかんない)
対話証明とは
対話型と非対話型
ゼロ知識証明の検証プロセスでは証明者と検証者が互いに通信する「対話型」と、通信を必要としない「非対話型」の2種類が存在する。
対話回数が多いと計算量が多く検証に時間がかかってしまうため、ゼロ知識証明の研究においては、二者間の対話回数が少なくて済む方法が模索されてきた。現在では、証明者の主張を大勢の他者が検証できる(証明者と検証者がいちいち通信しなくて済む)非対話型の方法が開発されている
(Zcashに使われているゼロ知識証明プロトコル(zK-SNARK )は非対話型) 有名なのはフィアットとシャミアの「フィアットシャミア変換(フィアットシャミアヒューリスティック)」があり
電子署名や公開鍵に応用されている。この変換は、簡単にいえば検証者が送ってくるチャレンジを証明者のハッシュ関数に置き換えることで証明者が一方的に送りつけるだけでゼロ知識証明できる。
https://gyazo.com/799b951acbcd45337ad481362c1ddc78
電子署名は、秘密情報sで署名することで確かに本人が作成した文書であること(かつ改ざんがないこと)を保証するプロトコルであり、これは「署名した人が秘密情報ssを所持している」という知識の所持に対する非対話ゼロ知識証明(知識の証明)と言える署名は秘密情報を知らなければ作ることが出来ない。つまりAさんが署名していれば、
「"Aさんが秘密情報sを持っていたこと"をゼロ知識証明するチャレンジ」になる
詳細
主にこの資料を参考にgbecスライド作ったので動画で解説します LayerXの資料は強すぎて読めてないです
所感
実際にコードを触るような実証はしてないけど、紙とペンでだいぶ理解できた。
結局はプロトコルなので、課題解決に適用する判断材料の一つとして知っておくのは良いこと。