ゼロ知識証明とは?わかりやすく解説します
ブロックチェーンにおいて、取引履歴が追跡できるという性質は、強みである一方で、プライバシーという問題をはらんでいます。
ブロックチェーン上のアドレスは、分かりやすい形にはなっていないため、一見するとプライバシーは守られているように思えます。
ですが、アドレスを出入りする資産の金額やIPアドレス等から、アドレスの管理者を特定することは不可能ではありません。
一方で、トランザクションを完全に暗号化してしまうと、その正当性を第三者が検証できなくなってしまい、安全性が損なわれてしまいます。
加えて、マネーロンダリングやテロ資金供与対策という点からも、第三者が検証不可能な暗号化は現実的ではありません。
そこで、プライバシーを保ちながら、検証性を実現する方法として注目されているのが「ゼロ知識証明」です。
今回は、この「ゼロ知識証明」について解説していきたいと思います。
ゼロ知識証明とは
ゼロ知識証明とは証明者と検証者の二者間で行われるあるやりとりを意味します。
このやりとりでは、証明者がある秘密を知っていることを、その秘密の内容を明かさずに検証者に証明します。
例えば、生年月日等の個人情報を相手(検証者)に開示しなくても、自分(証明者)が成人であることを証明できるようなことです。
数学的には「命題が真であることを、それ以外の情報を与えずに証明する」と言います。
ゼロ知識証明の3つの性質
ゼロ知識証明には証明者による不正を最小限に抑えるために、守るべき3つのルールを満たす必要があります。
完全性
証明者が関連情報の知識を高い確率で正確に示す能力を指します。
証明者が秘密を持っていることが本当ならば、検証者はそれが本当であることが高確率で検証できることを意味します。
健全性
証明者の主張が誤りであれば、証明者がどのように振る舞ったとしても、検証者はその主張が誤りであることを見抜けます。
証明者が秘密を持っているというウソをついている場合、検証者は高確率でそのウソを見抜けることを意味します。
ゼロ知識性
真のゼロ知識であるためには、問題の情報が証明者と検証者の間で伝達されることなく、証明が完全性と健全性の両方を達成する必要があります。
検証者が証明の結果得られる知識は、証明者の命題が真であることのみであるという意味です。
対話型と非対話型
ゼロ知識証明の検証プロセスでは、検証者と証明者が互いに通信する「対話型」と、通信を必要としない「非対話型」の2種類があります。
対話回数が多いと、検証に時間がかかってしまうため、現在では、二者間の対話回数が少なくて済む「非対話型」の方法がメインに開発されています。
ゼロ知識証明の活用事例
ゼロ知識証明の活用事例を挙げておきたいと思います。
Zcash
匿名系の仮想通貨(暗号資産)で有名なコインの一つに「Zcash」があります。
ゼロ知識証明を用いたトランザクションを生成できるため、Zcashの送信アドレスと受信アドレス、送金額を秘し隠すことができます。
「zk-SNARKs」と呼ばれるゼロ知識証明の応用型を利用しています。
「Zcash」では、第三者が得られる情報は「取引が正当に行われた」という命題が真であることのみで、送金者・送金額・受取人等の情報は確認できません。
証明が簡潔な上に、証明者から検証者へメッセージを送るだけなので、ブロックチェーン上に記録する内容を少なく抑えることが可能になっています。