ゼロ知識証明とは?ZCash、Ethereumの基盤技術:情報の中身を相手に知らせずに、正しい情報を知っていることを伝える方法

ゼロ知識証明とは?

近年、暗号通貨(仮想通貨)コミュニティの間で話題になっている「ゼロ知識証明」、またの名を「Zk-Snark」と呼ばれる技術について紹介していきます。ゼロ知識証明とは、ある人(証明者)が別のある人(承認者)に対して、与えられた情報が「真実である」ということ以外の情報を相手に与えずに、その情報が実際に「真実」であることを証明する手法のことです。

例えば、こちらの実験について考えてみてください。仮に、ここに色を判別することができない「色盲」の方がいらっしゃったとしましょう。そして、ここにそれぞれ色の違う2つのボールがあるとします。

あなたの目にはこの2つが違うボールであると区別することができますが、色盲の方には、2つのボールがまったく同じものに見えていると仮定します。さて、ここで問題です。あなたはこの色盲の方に対して、2つのボールが異なるものであることを証明することになりました。どっちがどのボールであるか、またそれぞれのボールがどの色なのかという情報を、相手に一切与えずに、自分が「2つのボールを見分けることができる(=正しい情報を持っている)」ことを、色盲の方に証明するにはどうすればよいでしょうか?

 

ここで、ゼロ知識証明の出番です。あなたは下記のような実験をします。

まずはじめに、色盲の方がボールを両手にひとつずつ取り、背中に手を回して隠します。次に、色盲の方が片方のボールをとりだし、あなたに見せます。そして、もう一度ボールを背中に隠したあと、また2つのうちひとつのボールをあなたに見せて、最初に見せたボールと同じものであるか、異なるものであるかを尋ねてきます。色盲の方はボールの色の情報については知りませんが、自分が今どっちのボールを相手に見せているかについて、把握しています。この試行を数回繰り返して、1回目にみせたボールと2回目にみせたボールが、すり替わったかどうかについて答え続けることになります。ここで、色盲の方があなたにどちらのボールをみせるかについては、50%の確率で固定されているものとします。

あなたはボールの色をみることで、ボールがすり替わったかどうかについて「YES/NO」で確実に答えることができます。しかし、2つのボールの区別がつけられない状態でこの試行に挑戦すると、正答率は50%に収束していきます。

すなわち、この試行を何度か繰り返して試行に対する正答率をみることで、あなたが正しい知識を持っているかどうか(本当にボールの区別がつくのかどうか)がわかります。例えばこの正答率50%の試行を10連続でクリアできる確率は1/1024なので、ある程度試行回数を重ねることで、本当に知識を持っているのかどうかについて、知識そのものの情報を相手に知らせずに証明することができます。ゼロ知識証明も、これとまったく同じような仕組みを用いて、相手に情報の中身を一切知らせずに、自分が知っている情報が正しいことを相手に証明します。

情報の中身について公開せずに、知っていることを伝える

今回話題になっている、暗号通貨領域におけるゼロ知識証明では、このボールの色ではなく、ランダムな文字列である「ハッシュ」という情報を用います。証明者(ボールの判別をする人)は、承認者(色盲の人)に対して、試行を通して実際のハッシュの値を公開することなく、ハッシュに関する知識の証明をします。ある規則を用いて元のハッシュを別の値に変換し、「ハッシュ変更の規則は?」「ハッシュ変更後の値は?」という2つの問いかけのうちひとつを証明者に対して問いかけます。(2つとも問いかけると、元の値が明らかになってしまうため、問いかけられるのは片方のみです。)元のハッシュの値を知っていれば、確実に正解を出せるため、同じように試行を繰り返して、本当に正しい知識を保有しているのかどうか、判別していきます。

なぜ現在、このゼロ知識証明のことが話題になっているのでしょうか?暗号通貨のどの領域にこの技術を用いることができるのでしょうか?


zk-SNARKとは?

流通量が8億4000万ドル以上もの流通量を誇る暗号通貨であるZCash(ジーキャッシュ、ZEC)は、このゼロ知識証明という技術によって支えられています。ZCashは、ゼロ知識証明を用いることで、トランザクションの完全なプライバシー(匿名性)を実現した世界初のパーミッションレス型の暗号通貨です。ZCashは、シールド(アドレスの匿名化)をネットワークのうちの広範囲に適用することで、攻撃者にとって目当てのトランザクションを掘り当てるコストを大幅に増大させています。これによって攻撃をするインセンティブを削ぐことで、ネットワークの安全性を保つ試みをしています。

ZCashは、ZCashが開発した「zk-SNARK」と呼ばれるゼロ知識証明技術によって支えられています。ZCashは、このzk-SNARKsを用いて、トランザクションのアドレスや送金額といったプライバシーにかかわる重要な情報を隠したまま、トランザクションの正当性を証明することができます。

ZCashは、匿名トランザクションの送り主が、トランザクションの正当性についての試行をクリアすることでネットワークの安全性が担保されています。

・各匿名トランザクションの、アウトプット値とインプット値の総和が算出されます。

・送り主は、インプット値のプライベートキーを持っていることを証明することで、トランザクションを使用する権利を入手します。

・インプットノートのプライベート使用キーは、トランザクション全体の署名と暗号で結びつけられます。このようにして、トランザクションがこのプライベートキーを知らない人によって改ざんされる恐れをなくします。

ZCASHは、①一般アドレスから一般アドレスに送るパブリックトランザクション(一般アドレスは情報が匿名かされていないので、トランザクションの内容が完全に公開されている)、②一般アドレスから匿名アドレスへのトランザクション、③匿名アドレスから一般アドレスへのトランザクション、④匿名アドレスから匿名アドレスへのトランザクション(完全非公開のトランザクション)、の4つの使用パターンにわかれます。このように、プライバシーを保つ技術が確立している点で素晴らしい一方で、マネーロンダリングといった用途に使われることも懸念されています。ビットコインと違い、ZCashでは誰がどんな取引をしたのか特定することはできません。

 

イーサリアムに導入されたzk-SNARK

最近行われたEthereum(イーサリアム)のByzantiumアップグレードによって、イーサリアムにこのzk-SNARKsの機能が追加されたことで話題になりました。イーサリアムのスマートコントラクトに、この承認アルゴリズムの技術基盤が組み込まれました。イーサリアム上でzk-SNARKsを用いることで、トランザクションのアドレスや送金額といったプライバシーに関わる情報を隠したまま、トークンを送金することができるようになりました。

2017年11月に行われたDevCon3という開発者向けのカンファレンスで、The Open Vote Networkというシステムが発表されました。これはすなわち、ゼロ知識証明を用いることで、イーサリアムプラットフォーム上で匿名投票を行うことができる機能のことです。ゼロ知識証明が暗号通貨に導入されたのはとても最近のことなので、これを活用したアプリケーションの開発はまだ少ないですが、イーサリアムブロックチェーンにプライバシーという新たな要素が含まれるようになりました。

今後の技術の動向にも注目です。

この記事をシェアする:
BBC編集部
About BBC編集部 253 Articles
ブロックチェーンビジネス研究会(略称:BBC)編集部です。海外の業界ニュースや、ブロックチェーンや暗号通貨について基礎的な内容を発信していきます。