要点
ゼロ知識証明では、ある当事者が、基礎となるデータを開示せずに、ある主張が真であることを別の当事者に証明できます。
zk-SNARKは、暗号領域で用いられる一種のゼロ知識証明プロトコルで、口座残高などの情報を検証するために、プライベートな詳細を開示せずに行えるようにします。
バイナンスは、メルクルツリーと組み合わせたzk-SNARKを使い、ユーザーが個別の口座データを開示せずに、準備金の証明(Proof of Reserves)に自分の残高が含まれていることを検証できるようにしています。
取引所の準備金を超えて、ZK証明はブロックチェーン・エコシステム全体で、ZKロールアップ、身元確認、投票システムなどにますます使われています。
はじめに
ブロックチェーンのユーザーは「透明性」と「プライバシー」の両方を大切にします。多くの場面では、この2つの目的は対立しているように見えます。つまり、何かが正しいことを証明するには、その裏にある詳細を開示する必要があることがしばしばあります。ゼロ知識証明は、この緊張関係を解消する方法を提供します。
zk-SNARKsのようなゼロ知識証明プロトコルと、メルクルツリーのような暗号データ構造を組み合わせることで、情報そのものを開示せずに情報の正当性を証明できます。この記事では、これらのツールがどのように機能し、バイナンスが準備金の証明(Proof of Reserves)にどのように適用しているかを説明します。
ゼロ知識証明とは何ですか?
ゼロ知識証明では、ある当事者(証明者)が、ある主張が真であることを、当該主張の内容に関する情報を何も共有せずに、別の当事者(検証者)に納得させられます。この概念は1985年の学術論文で初めて登場し、その後、実用化された暗号技術の基盤要素となりました。
簡単なたとえ話:鍵のかかった金庫の暗証番号(組み合わせ)をあなたが知っているとします。あなたは金庫を開けて、あなたが金庫の中に入れておいたメモを読んでもらったあとで、もう一度閉めることで、そのことを友人に証明できます。これで友人は、あなたが暗証番号を何であるかを一度も言わないまま、それを知っていると確信できます。
より深い技術的な説明は、「ゼロ知識証明とは何か、そしてブロックチェーンにどのような影響を与えるのか」に関するアカデミーの記事をご覧ください。
なぜゼロ知識証明は役に立つのですか?
ZK証明は、機密データを公開せずに主張を証明する必要があるあらゆる場面で役立ちます。従来のシステムでは、資産の保有や特定の資格を持っていることを証明するには、基礎となる情報を共有する必要がある場合が多く、プライバシーとセキュリティ上のリスクにつながります。
暗号資産分野での一般的なユースケースは次のとおりです:
秘密鍵の所有を、秘密鍵自体を開示せずに証明する。
取引所が個別の口座残高を開示せずに、総ユーザー準備金を検証できるようにする。
ZKロールアップによって、オンチェーンにすべてのトランザクションを公開せずにスケーラブルなブロックチェーン取引を可能にする。
これらの証明は、入力されたデータをもとに計算し、入力そのものの詳細を漏らすことなく、真か偽かの結果を返すアルゴリズムを使用します。
ゼロ知識証明の技術的特性
有効なゼロ知識証明は、次の3つの性質を満たす必要があります:
完全性(Completeness)。主張が真である場合、誠実な検証者は証明によって納得します。
健全性(Soundness)。主張が偽である場合、いかなる証明者も、それが真であることを検証者に納得させることはできません。
ゼロ知識(Zero-knowledge)。主張が真である場合、検証者は「真である」という事実以上のことを学びません。
zk-SNARKとは何ですか?
zk-SNARK(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)は、ゼロ知識証明プロトコルの一種です。短い証明(小さな証明サイズ)であること、非対話型(証明者と検証者の間で行き来がないこと)、そして暗号学的に健全であることを目的に設計されています。
zk-SNARKを使うと、証明者は入力に関する情報を何も明かさずに、隠された値の知識があること、または計算が正しく行われたことを示すことができます。暗号資産取引所の文脈では、これは、すべてのユーザー残高の合計が主張される準備金(リザーブ)と一致することを、個々の残高を表示することなく証明することを意味します。
検証のステップは、証明自体を生成するのに必要な時間に比べて非常に高速です。これにより、zk-SNARKは、取引所の監査やブロックチェーンのスケーラビリティといった大規模用途に実用的になります。
メルクルツリー(Merkle Tree)とは?
メルクルツリーは、大量のデータを効率よく整理する暗号データ構造です。各データはハッシュに変換され、そのハッシュ同士をペアで組み合わせながら、最終的に単一のルートハッシュが生成されます。入力値のどれかが変わるとルートハッシュも変わるため、不正改ざんが検知しやすくなります。
ハッシュ関数
メルクルツリーは動作のためにハッシュ関数に依存しています。ハッシュ化は任意の長さの入力を受け取り、固定長の出力を生成します。同じ入力は常に同じ出力を返します。入力をほんの少し変えるだけでも、まったく別の出力になります。
たとえば、SHA-256ハッシュ関数に100冊の本を通すと、固有の64文字の文字列が生成されます。その本のうち1文字を変更すると、出力は完全に変わります。この性質により、元の内容をすべて比較しなくても、データの完全性を検証しやすくなります。
暗号資産におけるメルクルツリー
ブロックチェーンでは、各トランザクションがハッシュ化されて一意のリーフノードになります。リーフノードのペアはさらに組み合わされてハッシュ化され、ブランチノードが作られます。この処理は、単一のメルクルルートが生成されるまで続きます。このルートは、あるブロック内のすべてのトランザクションを暗号学的に要約したものです。
取引所にとって、メルクルツリーは顧客残高を整理する方法を提供し、各個人アカウントを開示することなく監査可能にします。
メルクルツリー単体で使うことの限界
暗号資産取引所は、すべての顧客口座残高からメルクルツリーを構築して、準備金の証明(Proof of Reserves: PoR)を支えることができます。しかし追加の保護策がない場合、このアプローチには弱点があります。
ZK層がないと、取引所はツリーから一部の口座を除外したり、見かけ上の総債務を減らすために、負の残高を持つ偽の口座を挿入したりできてしまう可能性があります。自分のリーフノードだけを確認するユーザーは、他のすべての口座を見ない限り、それを検知する手段がありません。
信頼できる第三者監査人を使うことも一つの解決策ですが、その場合、監査人と、監査人がアクセスできるように渡されたデータの両方を信頼する必要があります。
zk-SNARKとメルクルツリーがどのように連携するか
zk-SNARKをメルクルツリーと組み合わせることで、第三者への信頼が不要になります。取引所は全ユーザー残高のメルクルツリーを構築し、その後、次を数学的に保証するzk-SNARK証明を生成します。
すべてのユーザー残高がメルクルツリーに含まれている(口座が省略されていない)。
負のネット残高を持つユーザーがいない(偽造データがない)。
メルクルルートが有効で、変更されていない。
ユーザーは、自分の残高がメルクルルートに貢献したことを検証できます。また、他人の残高を見ずに、ツリーが正しく構築されたことを確認するためにzk-SNARK証明も検証できます。
バイナンスがこの仕組みを適用する方法
バイナンスは、証明したい内容の制約を、プログラマブルな回路(programmable circuit)として定義します。メルクルツリー内の各ユーザー残高リーフノードについて、回路は次の3つの条件をチェックします。
ユーザーの資産が、総ネット残高の計算に含まれている。
ユーザーの総ネット残高が0以上である。
そのユーザーのデータを取り込んだ後も、メルクルルートが有効である。
次にバイナンスは、全メルクルツリーに対するzk-SNARK証明を生成します。準備金の証明(PoR)のリリースのたびに、バイナンスは各ユーザーのメルクル証明と、公開入力(public inputs)を伴うzk-SNARK証明を公開します。誰でも、公に利用可能なオープンソースのコードを使って、両方を独立に検証できます。
このアプローチは、監査人を信頼することに頼るのではなく、数学的な裏付けを提供します。
準備金の証明(PoR)を超えたより幅広い用途
ZK証明技術は、取引所の監査を超えて大きく広がっています。ZKロールアップは現在、イーサリアム上での主要なレイヤー2スケーリング手法の1つであり、オフチェーンでトランザクションを処理し、ZK証明をメインチェーンに提出して有効性を確認します。これにより、安全性を維持しながらスループットを高められる可能性があります。
スケーラビリティ以外にも、ZK証明は身元確認(年齢や管轄要件を満たすことを、自分の完全な身元を開示せずに証明する)、プライベートな投票システム、機密のスマートコントラクト実行などに向けて検討されています。技術はまだ成熟段階ですが、金融・ガバナンス・デジタルアイデンティティにまたがる応用可能性は非常に大きいです。
よくある質問(FAQ)
簡単に言うと、ゼロ知識証明とは何ですか?
ゼロ知識証明では、基礎となる情報を開示せずに、何かを知っている、またはある主張が真実であることを証明できます。これは、組み合わせを何であるか一度も言わずに金庫を開けてメモを見せることで、金庫の組み合わせを知っていることを証明するのに似ています。
なぜバイナンスは準備金の証明にzk-SNARKsを使うのですか?
バイナンスはzk-SNARKsを使って、顧客残高が個別の口座情報を公開せずに完全に裏付けられていることを証明します。ZK証明は、すべての口座が含まれており、負の残高が存在しないことを、監査人を信頼する必要なしに数学的に検証する仕組みを提供します。
zk-SNARKsとZKロールアップの違いは何ですか?
zk-SNARKsは、ゼロ知識証明プロトコルの一種です。ZKロールアップはレイヤー2のスケーリング解決策で、多数のトランザクションをまとめるためにzk-SNARKs(または類似の証明)を使用し、有効性の証明を1つだけメインブロックチェーンに提出します。zk-SNARKsはその基盤となる暗号技術で、ZKロールアップはその技術の1つの適用例です。
ユーザーはバイナンスの準備金の証明を独自に検証できますか?
はい。バイナンスは各ユーザーのメルクル証明と、公開入力(public inputs)を伴うzk-SNARK証明を公開します。ユーザーは、公開されたバイナンスのオープンソースコードを使って、自分の残高がメルクルツリーに含まれていること、そしてzk-SNARK証明がツリーが正しく構築されたことを確認していることを検証できます。
ゼロ知識証明は取引所の準備金にしか使われないのですか?
いいえ。ZK証明には幅広い用途があります。ブロックチェーンでは、トランザクションのスケーリング、身元システム、機密のコントラクト実行のためにZKロールアップで使われています。暗号資産の外でも、データ開示を伴わないプライバシー保護型の投票、年齢確認、資格の検証などに向けて研究されています。
最後に
zk-SNARKsとメルクルツリーを組み合わせることで、取引所はユーザーデータを損なうことなく、準備金の暗号学的な証拠を提供できます。準備金の監査を超えて、ZK技術はブロックチェーンのスケーラビリティ、身元システム、分散型ガバナンスの分野でその居場所を見出しつつあります。
さらなる読み物
ゼロ知識証明とは何か、そしてブロックチェーンにどのような影響を与えるのか
zk-SNARKsとzk-STARKsの説明
ZKロールアップとは?
準備金の証明(Proof of Reserves)とは何か、そしてバイナンスでどのように機能するのか
メルクルツリーとメルクルルートの説明
免責事項:本コンテンツは一般的な情報および教育目的のために「現状有姿(as is)」で提供されるものであり、いかなる種類の表明または保証も伴いません。これは、金融・法律・その他の専門的助言として解釈されるべきではなく、特定の製品またはサービスの購入を推奨する意図もありません。適切な専門家アドバイザーからご自身の判断に資する助言を得てください。コンテンツが第三者の寄稿による場合、そこに示される見解は当該第三者の寄稿者に帰属し、バイナンス・アカデミーの見解を必ずしも反映するものではありません。デジタル資産の価格は変動する可能性があります。投資の価値は下がることも上がることもあり、投資した金額を取り戻せない場合があります。投資判断に関する責任はすべてご自身にあります。また、バイナンス・アカデミーは、ご利用者が被る可能性のある損失について一切の責任を負いません。詳細は、利用規約、リスクに関する警告、ならびにバイナンス・アカデミーの規約をご覧ください。
