ゼロ知識証明(ZKP)は暗号技術を用いた証明の一種であり、ある一方の人物が、他の人物に対して、何らかの知識を持っていることを、それに関する追加情報を開示することなく証明することを可能にするというものです。より簡単に言えば、ZKPは、その何かが何であるかを実際に開示することなく、あなたが何かを知っていることを証明することを可能にするというものです。
ゼロ知識証明は、1985年にShafi Goldwasser、Silvio Micali、Charles Rackoffによって初めて紹介されました。ZKPの核となる原則は以下の通りです
完全性(Completeness)
証明者は、証明しようとする内容を検証者に説得力を持って示さなければならない。
健全性(Soundness)
検証者は、その証明についていかなる追加の知識も得ることなく、証明を検証できなければならない。
ゼロ知識(Zero-knowledge)
検証者は、やり取りの中で、証明者が証明している秘密 / 情報についていかなる知識も得てはならない。
ゼロ知識証明は、ある秘密の知識を持っている証明者のみが解くことのできる一連の数学的な問題を用いて機能します。検証者はこれらの問題を証明者に出題し、証明者は正解して証明者がその知識を持っていることを説得しなければなりません。しかし、検証者は証明者の回答から秘密についての詳細を知ることはできません。
Proof of Solvencyにおいてゼロ知識証明がなぜ重要なのか
公開されたProof of Reserves(準備金の証明)に含まれるウォレットの秘密鍵(PK)を管理していることを証明することは、Proof of Solvency(支払い能力の証明)の重要な要素となります。 すなわち、公表された準備金を構成する残高を計算するために使用されたウォレット(公開鍵とも呼ばれます)を管理していることを証明しなければなりません。
ゼロ知識証明の例
ここでは、ゼロ知識証明(ZKP)を用いて、対応する公開鍵の秘密鍵(PK)を所有していることを、 秘密鍵(PK)そのものを明かすことなく証明する例を示します。
-
検証者は、チャレンジと呼ばれる乱数を生成する。
-
検証者は、公開鍵でチャレンジを暗号化する。
-
検証者は、暗号化したチャレンジを証明者に送信する。
-
証明者は、アカウントの秘密鍵でチャレンジを復号化する。
-
証明者は、復号化したチャレンジを検証者に送信する。
-
検証者は、チャレンジが最初に送信したものと一致するか確認する。一致した場合、検証者は証明者が秘密鍵を知っていることがわかる。
これはゼロ知識証明の例であり、証明者は秘密鍵(PK)そのものを公開しません。公開鍵で復号できるようにチャレンジを暗号化できるのは、PKを持つ人物だけです。
検証者は、秘密鍵そのものに関する追加情報を得ることなく、 証明者が秘密鍵を知っていることを確認することができます。
ゼロ知識証明を使う利点
パスワード認証にゼロ知識証明を使用する利点は以下の通りです。
-
セキュリティの向上
ゼロ知識証明は、攻撃者がパスワードを盗むのを防ぐことができるため、パスワード認証のセキュリティを強化することができる。 -
プライバシーの向上
ゼロ知識証明は、攻撃者がパスワードそのももの詳細を知ることを防ぐため、パスワード認証のプライバシーを高めることができる。 -
複雑さの軽減
ゼロ知識証明により、パスワードを平文で保存する必要がなくなるため、パスワード認証を簡素化できる。
ゼロ知識証明は、私たちが情報を認証し、プライバシーを保護する方法に革命を起こす可能性を秘めた有望な技術です。ゼロ知識証明は、利便性を犠牲にすることなく、セキュリティとプライバシーの両方を実現する方法を提供してくれます。ゼロ知識証明が進化し続けるにつれて、パスワード認証を含むより幅広いアプリケーションで使用されることが期待できます。