こんにちは。ぴゅーぱです!
今日は匿名通貨について話してみたいと思います。
日本ではCoincheckも取り扱いを続けるかはだいぶ怪しいところですし、これから規制の流れが強化されるであろう匿名通貨ですが、仕組みはとても面白いです。
数ある匿名通貨の中でも特に匿名性が高いZcash。他の匿名通貨であるDashやMoneroではオープンなアドレスや数量なんかも匿名化されています。
Zcashの「zk-SNARK」というプロトコルで採用されている「ゼロ知識証明」についての話です。
ゼロ知識証明とは
暗号学において、ゼロ知識証明(ぜろちしきしょうめい、zero-knowledge proof)とは、ある人が他の人に、自分の持っている(通常、数学的な)命題が真であることを伝えるのに、真であること以外の何の知識も伝えることなく証明できるようなやりとりの手法である。
引用 : ゼロ知識証明(Wikipedia)
うおーいみわかんね。って方のためにJean-Jacques Quisquaterらによる論文"How to Explain Zero-Knowledge Protocols to Your Children"で紹介されている洞窟の問題を例にしてゼロ知識証明について説明しています。
上のような通路の洞窟があったとしましょう。鍵がかかっている扉に行くルートは1と2の2種類があります。
Aさんはこの扉を開ける方法を知っています。BさんはAさんからこの扉を開ける方法をお金を払って教えてもらいたいけれど、そもそもAさんが本当にこの扉を開けられるか疑わしいのでAさんが嘘をついていないか予め確かめておきたい。
こんなときどうしましょう?
まだお金は支払われていないのでAさんはBさんに「鍵の開け方を知っている」という情報以外を与えずに「鍵の開け方を知っている」と証明しなければいけないのです。命題が真であることを伝えるのに、真であること以外の何の知識も伝えることなく証明する、ということの例になっています。
まずBさんに洞窟の外で待機してもらってAさんは1か2のどちらかのルートで扉の前までむかいます。Aさんが扉に到達したあとBさんはルートの分かれ道で1か2のどちらのルートで帰ってくるか指定します。
今回はAさんが1のルートで扉にむかったとしましょう。
<① Bさんが1のルートで帰ってくるように指定した場合>
Aさんはそのまま来た道を戻ります。
<② Bさんが2のルートで帰ってくるように指定した場合>
Aさんは扉の鍵を開けて2のルートでBさんのところに戻ります。
この1回の試行ではBさんはAさんが鍵の開け方を知っていると納得できません。1/2の確率でAさんは鍵の開け方を知らなくても指定されたルートから帰ってこれるからです。
そのため、この試行を何度も繰り返します。
10回の試行で10回指定されたルートで帰ってこられればAさんがウソをついている確率はかなり0に近づきます。信憑性をあげるならば、さらに試行を繰り返せばよいです。
こうして「鍵の開け方を知っている」という情報以外を与えずに「鍵の開け方を知っている」と証明することができました。これが「ゼロ知識証明」ということです。
zk-SNARKは高く評価されていて、イーサリアムにも応用されています。
2017年10月に行われたビザンチウムというアップデートでzk-SNARKが実装されました。イーサリアムを用いて投票を行うシステムを開発する際、匿名性が必要になります。zk-SNARKが実装されていることで、投票内容を明らかにすることなく確かに投票が行われていることを証明できるのです。
ALISのロジック変更の投票も将来的にこんな形で実施されるかもしれませんね。
ではまた次の記事でお会いしましょう!
↓私の他の記事とTwitterはこちらから↓