見出し画像

6歳の子供に説明できなければ、理解したとはいえない#10「ゼロ知識証明」

自分の持っている秘密の情報を、それを欲しいという人に渡すとする。このとき、確かに秘密の情報を持っているということをその情報を見せることなく、相手に確かに持っていると信じてもらえるようにするにはどうするか。例えば、4桁の暗号番号を渡すときに、確かにもっていることを証明するためお金を振り込んでもらう前に番号を知らせてしまうと相手は振り込まずに番号だけ取得し逃げてしまうおそれがある。このような状況で相手に証明する手法の一つに「ゼロ知識証明」がある。非対話ゼロ知識証明などいくつか種類もある。多くのサイトがあるので興味があり、詳細を知りたい方はそちらを検索してほしい。ここでは、簡単に説明するにとどめる。

クルマを運転できる程度に視力がある応募者のみを選びたいとする。ただし、応募者は視力がいくつという検査結果を持っていないとする。選考者は検査結果をみずに応募者がたしかに適切な視力があることを知りたい。そこで、通常の視力検査と同様に円の一部が切れているマークをみせてマークの切れている方向を指で指してもらう。マークは自由に回転させることができ、先行者が回転させるときには応募者からみえないように自分の体で隠しながらおこなう。応募者が実はそれほど視力がなく、デタラメにあっちこっち答えたとする。たまたま最初の2,3回は正解になる可能性もあるが、何十回も試せば、デタラメに答えてもいずれバレてしまうだろう。つまり、本当に適切な視力があるときにのみ、何十回も正解が続くことになり、選考者は応募者が適切な視力があることを知ることができる。この場合、そもそも視力検査をしていることになってしまっているのでピンとこないかもしれないが、「検査結果をみていない」ことと、「視力が適切である」こと(つまり、視力がどれほどいいか、2.0まであるのかなどの情報を得られるわけではない)が成立している。

「ゼロ知識証明」の条件など

完全性(completeness): 真であることを確認する側(検証者)は、証明する側(証明者)の持っている命題が真であるならば、真であることが必ずわかること。
健全性(soundness): 証明者の持つ命題が偽であるなら、検証者は高い確率でそれが偽であると見抜けること。
ゼロ知識性(zero-knowledge): 証明者の持つ命題が真であるなら、検証者が不正して証明者から知識を盗もうとしても「命題が真である」以外の何の知識も得られないこと。


いいなと思ったら応援しよう!