要点

  • 2022年11月、バイナンスはマークルツリー暗号を使用してユーザーが保有資産を確認できるようにするプルーフ・オブ・リザーブ・システムをリリースした。

  • Binance は、ゼロ知識証明の形式である zk-SNARK を実装することでソリューションを強化しました。

  • ユーザーは、各アカウントの純残高の合計がマイナスではないこと、およびすべてのユーザー資産がバイナンスが主張するユーザー資産の純残高の一部であることを非公開かつ安全に確認できるようになりました。

Binance の新しいプルーフ・オブ・リザーブ・ソリューションがどのように機能するかを見てみましょう。 zk-SNARKとマークルツリー情報を組み合わせることで、ユーザーはBinanceのリザーブのステータスを確認するためのより良い新しい方法を得ることができます。

過去数か月間、Binance 開発チームは最先端の支払能力証明の構築に熱心に取り組んできました。このツールは、FTXの崩壊後に業界を襲った信頼の危機の中で、集中型暗号通貨取引所にとって重要なツールとなっています。バイナンスで保有されているユーザー資金は1:1の比率で裏付けされており、さらに準備金も加えられており、これを問題なく一般に証明する方法を見つけることが、業界の信頼を回復するためのバイナンス計画の主要な部分となっている。 

2022 年 11 月に、マークル ツリー暗号化技術を使用したプルーフ オブ リザーブ システムをリリースし、ユーザーがバイナンスでの保有資産を確認できるようにしました。これは Binance ユーザーの資金の透明性を高める上での進歩ですが、このソリューションの初期設計には 2 つの欠陥がありました。

  1. ユーザーのプライバシーを保護するために、マークル証明のリーフ ノードはユーザーの所有権ハッシュを表します。したがって、マークル ルートはリーフ ノードの残高情報の量を反映できません。

  1. 準備金が検証中の事業体は、必要な準備金の合計が小さく見えるように、ツリーのどこかに偽の口座の下にマイナスの残高を追加する可能性があります。 Vitalik Buterin のブログにある次の図は、悪意のあるマークル ツリーの例を示しています (ただし、この場合、ルートはすべてのリーフ ノードの残高の合計を反映しているため、プライバシーの問題が生じる可能性があります)。

私たちは現在、この欠陥を修正し、それによってバイナンスのプルーフ・オブ・リザーブ・システムを強化できるソリューションを手に入れました。ゼロ知識証明プロトコル zk-SNARK に依存することで、次のことを証明できます。

  1. マークル ツリーのすべてのリーフ ノードは、Binance が各資産に対して主張するユーザー残高の合計に寄与しています。

  2. 正味合計残高 (ユーザーが所有するすべての資産の USD 値全体) がマイナスのユーザーはマークル ツリーに含まれません。

マイナス残高とパフォーマンスについての一言

Binance はマージン、暗号融資、先物取引商品を提供しているため、各ユーザーの各暗号資産の残高は資産と負債の両方で構成される可能性があります。ユーザーの特定の暗号資産の残高はマイナスになる可能性がありますが、すべての暗号資産の合計純残高がマイナスになることはありません(すべてのローンは完全に担保されているため)。

この仮想シナリオでは、Alice が Binance に 10,000 BUSD を入金し、その後 4,000 BUSD を担保として 2 BNB を借りたとします (Binance が常に過剰担保であると仮定し、1 BNB = 1,000 BUSD のレートで)。次の表は、Alice の貸借対照表を示しています。

BNB(価格:1000BUSD)

BUSD(価格:1BUSD)

合計純残高 (BUSD)

資産

義務

資産

義務

アリス

2

2

10000

0

10000

次に、アリスが 1 BNB を 1,000 BUSD でボブ (同じく 10,000 BUSD を入金している) と取引すると、取引が一致した後の貸借対照表は次のようになります。

BNB(価格:1000BUSD)

BUSD(価格:1BUSD)

合計純残高 (BUSD)

資産

義務

資産

義務

アリス

1

2

11000

0

10000

ボブ

1

0

9000

0

10000

この場合、アリスの BNB 残高は合計 -1 になりますが、これはマークル ツリー内の有効なノードではなく、BNB という 1 つの資産のみを含みます。しかし、純残高の合計を見ると、アリスはまだ 10,000 BUSD です。

もう 1 つの課題は、Binance のユーザー ベースの規模からもたらされます。実行可能なソリューションは、数千万人のユーザーに対してユーザー証明と zk-SNARK 証明を生成する必要があり、その中には当社のプラットフォーム上で 300 以上の暗号資産を所有している人もいるかもしれません。 

全体として、私たちは合理的な時間内に以下の事実の証拠を提供したいと考えています。

  1. 各 Binance ユーザーの資産は、スナップショットに示されている、請求されたユーザーの合計残高の一部です。ユーザーは、ブロックチェーン エクスプローラー (イーサリアム ウォレットの場合は Etherscan、BNB チェーン ウォレットの場合は BscScan など) を使用して、Binance が管理するアドレスに保持されている資産に基づいて、当社が主張する合計ユーザー残高を確認できます。

  2. 各ユーザーの合計ネット残高はマイナスではありません。これは、バイナンスが検証済みの準備金のサイズを人為的に減らすために、マイナス残高のダミーアカウントを作成しないことを意味します。

zk-SNARKとは何ですか?

ソリューションの詳細に入る前に、ゼロ知識証明メカニズムの概要を簡単に説明します。 zk-SNARK などのゼロ知識プロトコルを使用すると、一方の当事者、つまり証明者は、証明者が特定の制約の下で特定の入力を使用して特定の計算を正確に実行したことを、入力を公開することなく、別の当事者、つまり検証者に実証することができます。計算には時間がかかる場合がありますが、基礎となる数学的メカニズムは、検証者が証拠を迅速かつ安全に評価するのに役立ちます。

証明者 (Binance) は、証明したい一連の計算制約を定義することから始めます。制約は、高級プログラミング言語 (この場合は gnark のフォーク バージョン) で表現できる回路で定義されます。

次に、証明者は大量の計算を実行し、すべてのユーザーの ID と貸借対照表をハッシュし、事前に定義された制約を満たす計算証明を生成します。これを行うために、計算トレース (証人) とパブリックまたはプライベートの入力を使用します。 

検証者 (ユーザー) は証明を取得し、回路からの公開入力を使用してそれを検証し、すべての制約が満たされて計算が正確に実行されたことを確認します。検証計算は証明時間に比べて非常に短時間で完了します。証明者が事前に定義された回路で証明を生成しない場合、証明者は検証に合格するための有効な証明を生成できません。

zk-SNARK の仕組みを詳しく知りたい場合は、この一連の記事をご覧ください。

私たちのソリューション

改良されたプルーフ・オブ・リザーブ・ソリューションの基本的な構成要素は依然としてマークル・ツリーです。上の例の場合、次のようになります。

マークル ツリーに加えて、Binance の各顧客が所有する各資産の合計純残高のリストを表すグローバル状態も維持します。

偶発性を証明するために、マークル ツリー構築のための zk-SNARK 証明を構築します。ユーザー残高の各セット (マークル ツリーのリーフ ノード) に対して、私たちの回路は次のことを保証します。

  1. このユーザーの各資産の残高は、上記のグローバル状態リストに含まれています。

  2. ユーザーの合計純残高はマイナスではありません。 

  3. マークル ツリー ルートの変更は、このユーザー情報をリーフ ノード ハッシュに更新した後に有効になります。

実装の詳細については、この技術仕様と回路 (制限事項) のソース コードを参照してください。 

各提案の証明の例では、以下を公開します。

1. マークル証明: 各ユーザーのハッシュ (アリスの場合、上の図の青いノードで表されます)。

2. zk-SNARK の証明と、すべてのユーザーに対する回線の公開入力 (各資産の合計ネット残高のリストのハッシュとマークル ルート)。 

マークル証明を検証することで、ユーザーは自分の貸借対照表がマークル ツリーのルートに含まれていることを確認できます。 zk-SNARK 証明を検証することで、ユーザーはマークル ツリー構造が回路で指定された制約を満たしていることを確認できます。

このソリューションのセキュリティは、証明キーと検証キーの設定に大きく依存しています。私たちは分散キーのセットアップに取り組んでいます。既存の分散型信頼ベースのセットアップ セレモニーについて言えば、イーサリアムのセレモニーが良い例です。間もなく、トラストレス セットアップ用の MPC ソリューションが提供される予定です。

パフォーマンス

残高を含める必要がある Binance ユーザーの数を考慮すると、マークル ツリー構造からすべてのユーザーを一度に含める単一の証明を取得する方法はありません。これに対する解決策は、ユーザーを 864 人ずつのバッチに分割して、より小規模な回路と並行した証明手順を実行することです。

各ユーザーが 350 の異なるアセットを持っている 864 ユーザーのバッチの場合、各アセット残高が [0, 2^64-1] の範囲内にあると仮定します。 32 コア 128GB サーバーの場合、zk 証明の生成時間は約 110 秒、証明の検証時間は 1 ミリ秒未満です。 

Binance は同時に 1,000 個のプルーフを開始し、2 時間以内にすべてのアカウントのプルーフを生成します。この証明の 1 時間のサーバーコストは約 0.56 USD であるため、すべてのユーザーをカバーするすべての zk 証明を生成するための総コストは約 1000 USD になります。

結論

この新しいソリューションによって生成される最初のユーザー プルーフ イテレーションは、次回のプルーフ オブ リザーブの発表で提供される予定です。さらに、当社はユーザー データ プロセッサ、証明者、回路、および検証者をオープンソース化しているため、当社と同じモデルに依存する集中型取引所は、ユーザーと資産に対する証明を簡単に生成できます。 

これがデジタル資産業界の透明性を新たなレベルに押し上げる上で重要な役割を果たすことを期待しています。  また、Vitalik のブログで言及されているソリューションを実装してパフォーマンスを向上させることにも取り組んでいます。これにより、より低コストでより頻繁に証拠を提供できるようになります。

これは zk-SNARK の最初のバージョンであるため、システムを継続的に改善できるようにコミュニティからのフィードバックをお待ちしています。

コードと詳細情報

  • 私たちのソースコード

  • Binance の証拠準備金: マークル ツリーとは何ですか

  • Binance Academy - ゼロ知識証明で暗号通貨の透明性を向上

  • Vitalik のブログ: 安全な CEX の取得: 支払能力の証明とそれ以降