この記事では、DFINITY ネットワークにおける高速かつ強力な整合性の技術的な実装について紹介します。主なキーワードは、しきい値グループ、しきい値リレー、確率的カード スロット コンセンサス、およびしきい値リレーです。

背景の紹介

DFINITY は PoS コンセンサス メカニズムを使用します。ネットワークに参加するには、デポジットとして一定量のステーク (DFINITY トークンなど) が必要です。すべてのノードは同等であり、収益を増やす唯一の方法は、ネットワークにノードを追加することです。すべての DFINITY ノードのデポジットは同じであり、より多くのデポジットを支払っても追加のメリットはないことを強調しておく必要があります。

PoS の利点の 1 つは、すべてのノードがプラットフォームに認識されているため、プラットフォームがノードを呼び出して特定の機能を実行し、これらのノードがオンラインであることを期待できることです。呼び出されたノードがオフラインの場合、ノードはデポジットの一部を失う可能性があります。

誰がネットワークに参加しているのかがわかっており、ほぼすべてのノードがオンラインであると仮定しているため、ノードにタスクをランダムに割り当てることができ、これらのタスクが完了することを比較的確信できます。これは DFINITY の基礎でもあります。

しきい値グループ

委員会

しきい値グループは、DFINITY のコンセンサス生成プロセス全体において非常に重要な概念です。しきい値グループを使用すると、意思決定者が 1 人だけという状況を回避でき、DFINITY の中核となります。ネットワーク内には常に、アクティブなしきい値グループのプールが存在します。各しきい値グループは、ネットワークに接続されているすべてのノードからランダムにサンプリングされ、1 つのノードが同時に複数のしきい値グループに含まれる可能性があります。

しきい値グループのすべてのノードが連携してランダム性を生み出し、各ラウンドで新しいしきい値グループがしきい値グループのプールから選択されます。

閾値グループは事前にランダムに選択され、プールに入れられます。次の図に示すように、期間 1 では、期間 2 のしきい値グループが選択されます。期間 1 の終了時に、この期間のしきい値グループは解散し、期間 2 のしきい値グループが動作し始めます。同じプロセスが無限に繰り返されます。

しきい値リレー

しきい値リレー

DFINITY のランダム性は、しきい値リレー検証可能なランダム関数によって生成されます。あなたがポーカー ゲームをプレイしていると想像してください。ディーラーが山札から出てくるカードを予測したり操作したりできないことを検証できる必要があります。これが、人前で足を引きずる理由です。シャッフルは、信頼できないノード (ポーカー プレーヤー) のネットワークに対する検証可能なランダム関数です。

しきい値リレーを作成するには、しきい値暗号化を使用します。まず、公開キー暗号化について見てみましょう。ドアに 2 つの鍵があり、1 つはドアをロックし、もう 1 つはドアを開けるとします。ドアの鍵は誰にでも渡すことができますが、他の人があなたのドアをロックできるかどうかは気にしません。大切なのは、その扉はあなただけが開けられるということです。

公開鍵暗号におけるデジタル署名は基本的にはこれと似ていますが、より抽象的です。 2 つのキーがあり、1 つはデータに署名でき、もう 1 つは署名の検証に使用できます。あなただけが署名を作成できるのであれば、他の人がデータの署名を検証できるのは良いことです。これが「公開キー秘密キー暗号化」の由来です。署名キーは非公開である必要があります。

しきい値暗号化は基本的に同じ原理ですが、1 つの違いがあります。しきい値暗号化では、秘密キーまたは署名キーが複数の共有 (シェア) に分割され、各共有を使用して署名を作成できます。しきい値の割合の署名共有が集約されると、公開キーを使用して検証できる完全なデジタル署名が作成されます。

完全なデジタル署名を作成するのに十分な割合の共有が存在しない場合、検証することはできません。 DFINITY の実際の実装では、集約率を過半数 (51%) に達させるだけで済みます。ここで知っておく必要があるのは、各しきい値グループには公開キーがあり、各グループのメンバーには秘密キーの共有があるということです。

以下に閾値署名のプロセスを示します。しきい値署名の優れた特徴は、どの署名を集約して完全な署名を作成しても、結果の署名が同じになることです。

最終的には大量のデジタル署名が作成されますが、その内容を事前に誰も知らない場合、これはランダム性の大きな原因となります。この署名は後でランダム ビーコンとして使用します。

では、ランダムなビーコンはどのように生成されるのでしょうか?ランダム性のソースから開始し、それを使用してしきい値グループを選択し、しきい値グループのメンバーがランダム性に署名します (しきい値グループの選択に使用されます)。

そのしきい値署名 (必要なのは 51% しきい値のみであり、ここではしきい値グループのメンバーは署名に影響を与えないことに注意してください) は、次のしきい値グループを選択するために使用されます。このプロセスは無期限に継続します。

ランダムソート - 確率的なカードスロットのコンセンサス

確率的スロットコンセンサス

このプロトコルにはネットワークに接続されているすべてのノードのリストがあるため、このリストとランダムなビーコンを入力として受け取り、ランダムな順序のリストを出力できます。このランダムな並べ替えは、確率的なカード スロットのコンセンサスを通じて実行する必要があります。

最上位のノードは、より高い優先順位 (ランク) を持つと見なされます。優先順位は、ノードがチェーンにブロックを追加する確率に影響します。優先順位が高いほど、確率も高くなります。

ノードはこれを自分で実行し、ブロックを作成してブロードキャストする前にブロックに優先順位を付けることができます。実際には、ブロックを作成してブロードキャストする必要があるのは少数 (たとえば 5 つ) のノードのみであるため、これにより計算リソースとネットワーク リソースが節約されます。

ブロック署名

DFINITY ネットワークでは、ランダムなしきい値グループの作成もブロックの署名に役立ちます。

各しきい値グループのメンバーは同じルールに従います。つまり、ブロックを受け取り、ブロックが無効な場合は破棄されます。有効な場合、その優先度がチェックされます。

優先度が以前に受信したブロックよりも低い場合、そのブロックは破棄されます。優先順位が高い場合は、秘密鍵共有を使用して署名し、ブロックと署名共有をブロードキャストします。

ブロックが完全で検証可能な署名を生成するために必要な数の署名シェアを収集すると、そのブロックは「公証された」とみなされ、ブロックはチェーンに追加されます。

ブロック生成プロセス全体は次のとおりです。

DFINITY の効率的なブロック確認

しきい値リレーの検証可能なランダム関数の使用に基づいて、DFINITY ネットワークのブロック確認時間はわずか 2 ブロックで、確認時間は 2.5 秒程度で済み、1 秒あたりのトランザクション処理量は約 50 です。一般に、ブロック確認の速度は確かに非常に高速であり、そこで VRF が果たす大きな役割も理解する必要があります。

しきい値グループの作成方法

1) ネットワークに参加する新しいクライアントは、VRF アルゴリズムを通じて異なるグループにランダムに割り当てられます。

2)閾値グループのパラメータ(グループサイズ、閾値などを含む)を初期化する。

3) 初期化が完了すると、作成に成功したグループの公開鍵がネットワークに登録されます。

4) しきい値グループの作成はブロックチェーンのビジネス プロセスから切り離されているため、図に示すように、赤と緑のグループを同時に作成します。

5) 新しく追加されたしきい値グループとクライアント (またはマイナー) は、アクティブ化される前に 2 EPOCH サイクル待つ必要があります。

適切なエポック長の選択方法: 正確性を確保するには、エポックにはチェーン フォークよりも多くのブロックが含まれている必要があります。ただし、軽量クライアントはキー フレームのブロック ヘッダー情報のみを保存するため、効率性の観点から、エポックはできるだけ長く、たとえば 1 週間を定義する必要があります。

確率的スロットプロトコル保証ブロック生成とフォークの回避

しきい値署名リレー構造への確率的スロット プロトコルの導入により、ネットワーク内のマイナーが常に最適なメイン チェーン上でブロックを生成することが保証されると同時に、VRF アルゴリズムと組み合わせることで、高い一貫性と効率的なブロック確認時間が実現されます。

高さ h ごとのブロック生成プロセスは次のとおりです。

1) VRF アルゴリズムを通じて現在の高さしきい値グループのプロセスを並べ替えます。

2) ソートされたプロセスを異なるスロットに分割し、システム内の優先順位としてマークします。

3) さまざまなスロットのプロセスにスコアを付け、重みをマークします。

4) DFINITY では、タイムアウトベースのメカニズムも導入されています。つまり、最初に選択したプロセスがブロックを生成しない場合、次のプロセスがブロックの生成を実行するまでの時間です。

図に示すように、完全なブロック生成プロセスは次のとおりです。最高スコアを何度も連鎖させます。

疑問が残った

しきい値リレー構造と確率的スロット プロトコルを通じて、効率的なブロック生成と極めて低い確率のチェーン フォーク イベントを実現できます。ただし、次の 2 つの状況のように、ネットワーク上で悪意のある攻撃者による攻撃に遭遇する可能性は依然としてあります。

1) 利己的マイニング攻撃: 悪意のある敵は、マイニングされたブロックを選択的に保持し、徐々に解放することで、正直なノードと比較してトランザクションを制御するという利点を得ると同時に、利己的マイニング攻撃は、最終整合性数値を達成するために必要な確認を増加させます。

2) 賭け金なし: 悪意のある対戦相手は、幸運にも一連の 0 スロット (つまり、最高の優先順位) として選択されるだけで、いつでもすべてのフォークに投票し、高さ h 以降のフォークを作成できます。リプレイ攻撃を実装します。

DFINITY Network は次の回避策を提案しています。

中心的なアイデアは公証人を導入することであり、公証人の署名が現在の高さに存在する必要があります。このように、ブロックのリリースが遅れると、公証人の署名が取得されず、ブロックは無効とみなされます。

Notary モードのブロック生成プロセス

2 つの潜在的な脅威を解決するために、ブロックに対する署名を実行し、ブロック生成の原理を分析する公証人を導入しました。

1) 現在の高さ h が前のグループのしきい値署名を受け取った後、グループ メンバーは独自のタイマーを開始し、BLOCK_TIME 以内にトランザクション情報を収集します (処理は実行されません。注意: DFINITY は厳密なクロック同期に依存しません)。

2) BLOCK_TIME を待機している間、確率スロット プロトコルがプロセスにスコアを付け、パッケージ化されたプロセスを選択します。

3) BLOCK_TIME、つまり 5 秒の待機時間が経過した後、2 番目の判定が行われます。 ① 最高スコアのチェーンがスコア付けされているかどうか。 ② ブロックが有効であるかどうかを確認し、スロットが責任のあるプロセスとして選択されているかどうかを確認します。パッケージ化; ③ 公証人がブロックを検証し、プロセスはブロックのしきい値グループによって署名されたシャードをブロードキャストします。

署名はいつ終了されますか?しきい値に達し、現在の高さのグループ署名が結合されると、現在の高さの署名フラグメントは署名されなくなります。

いくつかの要約ポイント:

1) 通常のネットワーク動作では、ネットワーク同期を考慮して BLOCK_TIME が十分に大きく設定されている場合、各グループ メンバーは最高スコアを持つチェーンのみを優先します。

2) 公証人グループは、最高スコアを持つチェーンを表すブロックのみを認証します。

3) この方法ではフォークを防止し、最終的な一貫性を迅速に達成できます。

同じスコアの問題を解く

悪意のある攻撃者によって制御されるスロット 0 のプロセスは、そのブロックの異なるバージョンを多数 DOS にブロードキャストする可能性があります。この悪意のあるプロセスは、ビザンチン動作によりすぐにネットワークから排除されますが、発生する前にそれを防ぐにはどうすればよいでしょうか?

解決策: プロセスが同じ最高スコアを持つブロックを見つけた場合は、同じスコアをまだ検出していないノードにのみそのブロックを転送します。グループ メンバーが同じ最高スコアのブロックを見つけた場合、署名は実行されず、別のスロットから次にスコアが高いブロックへの署名が開始されます。

まとめ

DFINITY ネットワークは、全体的なアーキテクチャ設計を通じて、ブロックを効率的に生成する機能を提供します。悪意のある行為はネットワークによって無視され、公証人によって処罰されます。

理想的な世界では、DFINITY ネットワークは結果整合性を達成するために 2 つのブロックとしきい値グループ リレーのみを必要とし、これは競合するブロックチェーン プラットフォームにとって大きな利点となります。 BLOCK_TIME が 5 秒に設定されている場合、平均確認時間はわずか 7.5 秒です。

DFINITY のカッパー リリース バージョンには、ブロック生成時間、トランザクション確認時間、燃料消費量の点で、第 1 世代 (ビットコイン) および第 2 世代 (イーサリアム) のブロックチェーン テクノロジーに比べて明らかにパフォーマンス上の利点があります。

質問

質問: 期間 2 のしきい値グループは期間 1 中に選択されています。この場合、期間 2 のしきい値グループのメンバーは DDOS 攻撃に対して脆弱になりますか?

答え: 答えはノーです。 DFINITY では、これらのメンバーは非表示になっているため、プラットフォームがこれらのメンバーを選択しましたが、彼らが誰であるかは誰も知りません。

問題: BLS キーを作成する場合、通信の問題がボトルネックになります。 DFINITYしきい値グループにはノードがいくつありますか?この問題を改善するにはどうすればよいでしょうか?

回答: しきい値グループには 400 のノードがあります。通信には費用がかかりますが、解決すべき問題になるほどで​​はありません。

質問: しきい値グループのメンバーが秘密鍵を公開した場合はどうすればよいですか?

回答: コンセンサスに達するには秘密鍵共有の特定のしきい値 (51%) が必要であるため、1 つの共有が漏洩しても問題はありません。

質問: ブロックを開始するために選択されるノードは何個ですか?

答え: 答えは 0 です。ブロックを開始するために各ノードを選択できます。特定の確率は、優先順位が高いほど、確率が高くなります。ブロックが開始されると、実際には約 5 つのノードが実装されます。

気になるICコンテンツ

テクノロジーの進歩 | 世界的なイベント

IC Binance チャネルを収集してフォローする

最新情報を常に入手してください