
今回は、ゼロ知識証明について説明していきます(*’ω’*)
Zcashで用いられているこちらの手法ですが、私が最初聞いた時は「例えはわかるんだけど、どこか引っかかる、、」ってもやもやする部分があったりもしました。
だからこそとことんわかりやすくしてみたので、しっかり理解しておきましょう。
仮想通貨だけでなくって、暗号化やパスワードなどでゼロ知識証明が用いられるそう。
私はきっと今後Zcash以外で出会うことはありませんが笑、他の分野にも活用できるかもしれません!
ゼロ知識証明とは?
![[仮想通貨用語]Zcashなど、ゼロ知識証明の解説・説明をイメージ](https://ocrybit.com/wp-content/uploads/2019/08/190803-60.jpg)
簡単に説明すると
ゼロ知識証明を簡単に説明すると「答えは知ってるけどその答えは教えずに、相手に対して本当に知っていることを伝える」といった感じです。
ゼロ知識証明という言葉を無理やりイメージさせるなら「直接的な知識は与えない(与える知識はゼロ)だけど、証明できる」イメージです!
あまり難しく考えるとごちゃごちゃになっちゃうかもしれないので、フラットに考えていきましょうね(*⁰▿⁰*)
わかりやすく解説していきます
徳井くんと小沢ちゃんがいると仮定します。
そして、徳井くんは小沢ちゃんのことが好き過ぎて、いろんなところから情報を随時仕入れているんですね。
そして、ちょうど小沢ちゃんは最近ダイエットをかなり極秘でかなり本格的に始めたそう。
もちろん徳井くんはありとあらゆる手段を駆使し、誰よりもいち早くその情報をGETしました。
しかも徳井くんの家はホットヨガを経営していることもあり、ダイエットのことに関しては親からかなりの知識を詰め込まれたおかげでその手のエキスパートでもあるんです。
徳井くんはどうにか小沢ちゃんの力になりたい(そして他の人より優位になりたい)、、けど単刀直入にいうのはレディに対して失礼。
そこで、徳井くんは小沢ちゃんに「ダイエットしてるんでしょ〜?」と、直接は死んでも言わない。遠回しに伝えてみることにしました。
徳井「小沢ちゃん、最近始めたことあるでしょ?」
小沢「また徳井くんね、特にないよ?むしろ最近やめたことならあるよ、てまり部」
徳井「昨日でしょ?それは知ってるけど、小沢ちゃんに言いたいことがあって」
小沢「なに?」
徳井「まず脂肪燃焼するには、ピーマンとかパプリカとか混ぜたマリネが効果的ってテレビで言ってたんだけどさ」
小沢「ん?」
徳井「隣のクラスの子、食事を抜いて頑張ってたらしいけど結局戻っちゃったらしいよ」
小沢「だからなんなの?」
徳井「俺的にはそのままでもいいと思うんだけどなあ、エマワトソンみたいなラインになりたいって言ってるらしいじゃん、がんばって!」
小沢「ねえなんで私が始めたこと知ってんの!?怖い通り越して尊敬するんだけど」
小沢ちゃんは、徳井くんが「ダイエット」について言っていると確信した模様です。
お互いうまくいくといいですね(*’ω’*)
直接的には言っていないものの、その事象に関連する話を何度も繰り返すことによって、当てずっぽうで言っているのではないと確信しますよね。
それは、もちろん1回や2回言われたところで確信を持つことはなくとも、それが5回、10回となると確実に知っていることがわかります。
もう一つ、例えば透視できる能力があるとして、2つの箱のうち1つだけボールが入っているとします。外からどちらにボールが入っているかはわかりません。
そして、毎回シャッフルし透視できる人に当てさせ、最初の1回や2回はまぐれで当たったとしても、10回連続で当たるとなると確信を持ちますよね。
現に、二つのどちらかを選ぶので正解率は50%、それを10回連続して当てることができる確率は1/1024なので、数字的にもかなり信憑性が増しています。
イメージ的にはこんな感じで、何度かその事象に関連することを言って全部道理が合っており、かつその事象を直接的に言っていない上で証明することがポイントです!
これらを踏まえてさらに解説
先ほどは一般的にわかりやすく解説してみたので、少し暗号通貨技術寄り?にして解説していきます。
そして、ゼロ知識証明を採用している暗号通貨の代表にZcashがあげられます。
このZcashのゼロ知識証明を解説する際によく例えられているのが、合言葉が必要な扉です!

合言葉を知っている向井さんと、今の生きがいは「合言葉を知ること」な尾形さんがいると仮定します。
その合言葉がいる扉に行くにはAの道とBの道の2通りあり、AとBの行き着く先に扉があります。そして、扉を開くとAとBは通じあっています。
扉を開く合言葉は価値のかなり高いものなので、向井さんもなるべく教えたくありません。しかし、尾形さんはなんとしても知りたいのでお金を払うと言っています。
ですが、向井さんが知っていると言っているものの、その合言葉が万が一間違っていたら尾形さんはお金の払い損になってしまいます。
本当の合言葉を知っていると証明する方法ですが、そのAの道、Bの道のどちらかに向井さんが先に進み(まずはAの道に進んだとします)、そのあとに向井さんがどちらに進んだかは知らない尾形さんは、AとBの道の分岐点で待っています。
この際に向井さんと尾形さんが一緒に付いていかない理由としては、後ろでこっそり合言葉を盗み聞きしないためです。
そして向井さんは扉を例の合言葉で開いて、尾形さんは分岐点に立ったまま、1回目は「Bの道から出て来てほしい」と向井さんに聞こえるように叫びます。
向井さんはAの道から入ってようがBの道から入ってようが、扉さえひらけば繋がっているのでどちらからでも出てくることは可能です。
そして、その一回だけの試みだと万が一合言葉を知らなくても50%の確率で出てくることは可能になってしまうので、何度も繰り返し行います。
先ほどにもお伝えした通り10回連続で成功する確率は1/1024なので、向井さんが10回この行為を繰り返して尾形さんのいう通りの道から出て来たら、向井さんは合言葉を本当に信じることができますよね。
もし10回で信じれなければ20回くらいすればいいと思います。ここまでくると20回連続で当たる確率は約0.0001%です。まあ間違いないですよね笑
このように、直接その内容は伝えなくても知っていると確信を持つことができます。
Zcashにおけるゼロ知識証明

簡単に解説すると
Zcashは、送受信者両方のアドレスや、送金金額、その履歴などの取引内容をすべて暗号化することで非常に高い匿名性を誇っています。
そして、暗号化されたデータは閲覧権のあるユーザーのみ見ることができる仕組みをとっています。
閲覧権のあるユーザーはどうやってその情報を見ることが可能かというと、通貨の取引内容が匿名化されたものを解除する「閲覧鍵」を用います。
その閲覧鍵を持っているけど、その持っている事実は伝えずに第三者に証明する、ということです。
そして、その閲覧できる鍵は暗号通貨を送金するのと同じ感覚で、ユーザー間で送り合うことが可能なので利便性にも長けています。
Zcashなど仮想通貨のゼロ知識証明を、詳しく解説します
まず、暗号通貨の取引の際には「ハッシュ」という乱数が組み合わさった情報が用いられます。
そしてこのハッシュがゼロ知識証明に使用されるのですが、先ほどわかりやすく例えたものをハッシュに適用します。
もちろんハッシュは公開せずに元のハッシュの一部を別の値に変更を行い、その変更のみを共有した上で(変更点のみの共有によって全部が漏れる心配はないため)、ハッシュ変更後の値などの確認、ハッシュの一部を何度もやりとりし繰り返したりの手法を行います。
元のハッシュ値を本当に知っていれば確実に何度でも答えることが可能なので、こうして本当に相手が正しいハッシュを持っているかどうか確認することができます。
Monero、Dashなど他通貨とのちがい

Monero、DashコインもZcashと同じく匿名性が特徴な暗号通貨です。
Moneroの匿名性は「リング著名」という方法をとっており、簡単に説明するといろんな取引をいったん一つに束ねてどこから送金されているのかわからないようにするため、受取人は誰から送られたのかわかりません。
続いてDashは「プライベートセンド」という方法をとっており、送金者と受取人の間に管理ノードという仲介が存在し、その管理ノードが送金者から送られて来た複数の取引をシャッフルして受取人に渡します。
そうすることによって匿名性が保たれているのですが、Zcashが採用しているゼロ知識証明の匿名性はmonero、Dashよりも非常に高い匿名性を誇っています。
Zcashは非常に高い匿名性を誇ってはいるのですが、これはもちろんメリットにもデメリットにもなります。
ちなみに「Zcash」については以下の記事で詳しく説明しております。