見出し画像

「知っている」この一言を証明する【ゼロ知識証明とは】

こんにちは!
仮想通貨にどっぷりな
るー(@Rapelucy1003)です。

今回の記事は
ゼロ知識証明についてです。

まあ、これもLayer2における
zk rollupを理解するための予備知識です。

ゼロ知識証明、名前くらいは聞いたこと
あるでしょう。

ただ、なんじゃいそれは
って感じだと思うので
さくっと説明して、深堀していきましょう!

ゼロ知識証明とは?

もう漠然と一言で言ってしまえば

「知っている」っていう一言で
相手を納得させる技術です。

要するにですね。

画像1

読み手の皆様が、るーさんて
誰かを知っていますか?

と、問われたときに
「知っている」ということを
私がどんな人であるのか
私との関係性を説明せずに

相手に
るーのことを「知っている」ことを
納得させる技術です。

この不可能にも思える証明仕方を
どうやって相手に納得させるのか
それが、ゼロ知識証明の技術面のお話に
なるんです。

いやいや、もうちょっと専門的に。

はい。ざっくりしすぎましたね。(笑)
もちょっと詳しく言うのであれば

ゼロ知識証明とは
証明者が、承認者に対して
与えられた情報が「真実」であるということ
以外の情報を相手に伝えずに
その情報が、実際に「真実」であることを
証明する技術
のことです。

ゼロ知識証明は、暗号学で使われている
証明プロトコルの一つです。

ここでいう、「証明」の定義について
少し紹介しておきましょう。

証明とは、ざっくり言えば
ある主張が正しいことを納得させる手段です。

なので、ゼロ知識証明とは
ゼロ知識=秘密にしたい内容を漏らさず
証明=秘密を知っていることを認めさせる

というイメージです。

ゼロ知識証明における3つの必要条件

画像2

ゼロ知識証明

つまり

秘密にしたい内容を漏らさずに
秘密を知っていることを認めさせるためには
次の3つの条件を満たす必要があります。

・完全性(completeness)
・健全性(soundness)
・ゼロ知識性(zero-knowledge)

ひとつずつ解説行きましょう。

とりあえず、ふ~ん。って感じで
読んどいてくださいな。

あとで例を交えて
もう少し掘り下げます^^

-----------------------

完全性(completeness)

証明者が本当に正しい情報を
持っているということを、
検証者が必ずわかる必要がある。

-----------------------

健全性(soundness)

証明者が嘘を付いている場合、
検証者には高確率でその嘘が
見抜ける仕組みであること。

-----------------------

ゼロ知識性(zero-knowledge)

証明が終わったあと、検証者が知るのは
「証明者が持っている情報は正しい」
という情報のみであること。

-----------------------

言葉だけじゃわかりずらいので
わかりやすい例を持ってきましょう。

「ウォーリーをさがせ!」で、
 ゼロ知識証明(?)

先日、私のコミュニティー
雑談しましてですね…
(さらっと、コミュの宣伝)

ゼロ知識証明のわかりやすい例として
「ウォーリーをさがせ!」を
教えていただきました(*´ω`)

こちらを参考にして
ゼロ知識証明をわかりやすく解説しますね

-----------------------

ゲーム内容とゲームの趣旨

画像3

アリスとボブが
「ウォーリーをさがせ!」という絵本で、
ウォーリーを見つけるゲームをします。

そして

先にウォーリーを見つけたアリスが
「先に見つけたこと」を証明するという趣旨です。

この時にアリスは
ウォーリーの正確な場所を教えず
「先に見つけたこと」を証明する必要があります。

-----------------------

証明方法その1

画像5

アリスは、ウォーリーだけをチョキチョキと
切り抜いて、ボブに見せます。

(絵を切り取れば、確かに
見つけたことの証明になりますよね。笑)

ここで、アリスは
ウォーリーの絵をコピーしたわけではないことを
証明するために、絵全体の裏面に
'透かし'を入れておきました。

(コピーしたものだと、太陽に
かざしても透けないけど、日本札なら
透けて見えるよね)

-----------------------

証明その2

画像6

アリスは絵本に、真っ黒な紙を被せて、
ウォーリーの箇所だけ切り抜きます。

こうするとウォーリーだけが見えますと。

(ウォーリーがいることはわかるけど
 どのあたりにいるのかわかんないもんね)

位置情報はボブには一切開示していません。
アリスは紙を、絵に被せるだけでいつでも、
ウォーリーを見つけたことを証明できます。

-----------------------

さて、こうすることで
アリスは、「どこに」ウォーリーがいるのか
伝えることなく

「見つけた」という事実のみ
伝えることができますね。

これが、ゼロ知識証明における
相手を納得させる方法なんです。

「ウォーリーをさがせ!」で、
 3つの条件(?)

さきほど紹介しました
ゼロ知識証明における3つの必要条件

・完全性(completeness)
・健全性(soundness)
・ゼロ知識性(zero-knowledge)

を、ウォーリーの例はしっかりと
満たしているんです。

完全性(completeness)

証明者であるアリスは、
何度同じゲームをしても、同じ証明方法で
検証者(ボブ)を納得させることができるよね。

-----------------------

健全性(soundness)

証明者であるアリスが嘘を付いている場合

(例えば、黒い紙をランダムに切り取る
と、ウォーリーは見つからない)

検証者ボブには目に見えて嘘を
ついていることがわかりますよね。

-----------------------

ゼロ知識性(zero-knowledge)

証明が終わったあと、検証者ボブが知るのは
「証明者アリスが、ウォーリーを
先に見つけた」

という情報のみであること。

どこに、ウォーリーがいるのかは
ボブは知らないですもんね。

-----------------------

さて、ざっくりとまとめよう

結構長くなりました。

でも、ゼロ知識証明がなんぞや
っていうことをふわっとでも
理解していただけたでしょうか?

長々話した私が、さくっと
ゼロ知識証明を説明するなら
次のように答えます。

ゼロ知識証明とは
「知っている」という一言で

相手を納得させる技術です。

加えて

証明するときには
・嘘を付いたらすぐわかる証明法であること
(健全性)
・証明するための証拠が必要であること
(完全性)
・「知っている」という事実しか知らないこと
(ゼロ知識性) を満たす必要があります。

と、まあ。
私の中ではこんな感じの理解です・w・

このゼロ知識証明は今後
盛り上がるであろうlayer2でも
用いられる技術なので
知っていて損な知識ではないかと!

今回の記事も長くなりました!
最後までお付き合いありがとうございました
( *´艸`)









この記事が気に入ったらサポートをしてみませんか?