見出し画像

インターネットコンピュータでコンセンサスを達成する

ブロックチェーンの新しいコンセンサスプロトコルの非同期ファイナライズは信じられないほど高速です—ファイナリティは1秒未満で発生します。
Manu Drijvers、エンジニアリングマネージャー(コンセンサス)| DFINITY


正確性と信頼性は、インターネットコンピュータのビジョンに不可欠です


インターネットコンピュータは、スマートコントラクトがインタラクティブなWebコンテンツをエンドユーザーのブラウザに直接安全に提供できるようにする、世界初のWeb速度のインターネット規模のパブリックブロックチェーンです。インターネットコンピュータは、パブリックインターネットの機能を拡張してソフトウェアをホストできるようにし、次世代のdappとオープンインターネットサービスを可能にします。



インターネットコンピュータは、インターネットコンピュータプロトコル(ICP)を介して通信する世界中のデータセンター内のマシンを利用しています。このようにコラボレーションすることで、マシンは仮想インターネットコンピューターを形成し、開発者はキャニスタースマートコントラクトと呼ばれるソフトウェアを安全で信頼性の高い方法で作成および展開できます。「安全」とは、キャニスターの状態がキャニスターの規則に従ってのみ変化し、改ざんできないことを意味し、「信頼できる」とは、キャニスターの実行が突然停止しないことを意味します。



インターネットコンピュータは、新しいコンセンサスプロトコルを使用してこれらのプロパティを実現します。さまざまなマシンまたはレプリカは、コヒーレント状態を維持するために、どの入力をどの順序で処理するかについてコンセンサスに達する必要があります。すべてのソフトウェアは、1台だけでなく、世界中の多くのマシンによって実行されます。マシンの大部分は一緒にソフトウェアの真の状態を定義します。一部の個々のレプリカが改ざんされた状態を報告したり、接続の問題があったり、悪意がある場合でも、レプリカの大部分がソフトウェアを正しく実行している限り、これは違いを生みません。



さらに、インターネットコンピュータを拡張する必要があります。つまり、プラットフォーム上でキャニスタースマートコントラクトの形で分散型アプリケーションをますます実行できるようになります。このスケーラビリティ要件を達成するために、キャニスターをより小さなグループに分割し、各グループはサブネットと呼ばれるもので実行されます。サブネットは、世界中のさまざまなレプリカから電力を供給されており、それらはすべて、そのサブネットで実行されているキャニスターを実行します。異なるサブネット上のキャニスターも安全に通信できます。インターネットコンピュータにはいつでもサブネットを追加できるため、その容量を増やすことができます。


コンセンサスが重要な理由


マシンの大部分が正しく機能している限り、サブネットの正しい状態に影響を与えることなく、任意の数のレプリカが使用できないか、悪意がある可能性があります。レプリケーションを使用してセキュリティを確保するこのアプローチには、コンセンサスプロトコルが必要です。サブネットは、さまざまなメッセージ、つまりユーザーからキャニスターへのメッセージ、およびキャニスターからキャニスターへのメッセージを処理する必要があります。また、すべてのレプリカが常に同じ状態になるように、すべて同じメッセージを同じ順序で処理する必要があります。ただし、サブネットに電力を供給する各レプリカは、実際には異なる順序でメッセージを表示する場合があります。コンセンサスプロトコルを使用して、サブネットに電力を供給しているすべてのノードが、処理するメッセージの順序について合意できるようにします。


ブロックチェーンを使用してコンセンサスに到達します。サブネットが処理する必要のあるメッセージはグループ化されてブロックに配置され、各ブロックは前のブロックを指し、それによってブロックのチェーンを形成します。セキュリティの特性は、すべてのレプリカがブロックチェーンで合意したときに達成され、それによって実行するメッセージの順序が与えられます。



より正確には、「安全性」と呼ばれるものが必要です。つまり、2つの正直なレプリカが、特定の時点までブロックチェーンに同意していると考えた場合、実際には、その時点までのブロックチェーンについて同じ見解を持っている必要があります。



次に、「活気」が必要です。つまり、ブロックチェーンは成長し続け、ますます多くのブロックに同意し続け、追加のメッセージを継続的に処理します。



第三に、「有効性」と呼ばれるものが必要です。これは、すべてのブロックとブロック内のメッセージが実際に有効であることを意味します。これにより、たとえば、ブロック内のすべてのメッセージが送信者によって正しく署名されます。



ここでの難しさは、サブネットに電力を供給しているノードの一部に障害が発生したり、オフラインになったり、積極的に悪意を持ったりした場合でも、これら3つのプロパティを保持する必要があることです。より正確には、サブネット内のノードの3分の1未満がオフラインまたは悪意がある限り、これらのプロパティをすべて保持する必要があります。以下の例では、多くの場合4つのノードを使用します。つまり、これらのプロパティの多くても1つが悪意のあるものである場合は、これらのプロパティを満たす必要があります。Genesisでは、インターネットコンピュータは、複数の破損したレプリカを許容できる、より大きなサブネットを使用します。


単一のサブネットにズームインして、ブロックチェーンを使用してコンセンサスに達する方法を確認しますが、インターネットコンピューターは多くのサブネットで構成されているため、多くのブロックチェーンで構成されていることを覚えておくことが重要です。ピアツーピアのゴシップネットワークの上に構築することにより、コンセンサスプロトコルを提示します。レプリカは「このメッセージを送信する」とよく言われます。つまり、ゴシップネットワークを使用して、サブネット上の他のレプリカとメッセージを交換することを意味します。また、メッセージの順序のみに焦点を当てます。プロトコルの他のいくつかの部分は、これらのメッセージの処理を処理します。
インターネットコンピュータのニーズに合わせてコンセンサスプロトコルを設計することを選択したことに注意することが重要です。スループット、レイテンシー、そしてプロトコルのシンプルさを最適化しようとしています。


私たちのプロトコルには、4つの主要な部分が含まれています。



まず、ブロック作成があります。この部分は、ブロックチェーンを構築できる候補ブロックを作成します。
第二に、公証があります。この部分は、有効なブロックチェーンを構築できる有効なブロックを特定する役割を果たします。
第三に、ランダムビーコンがあります。ランダムビーコンは、プロトコルをさらに強化するために使用できるランダム性を提供します。
最後に、最終決定があります。これにより、実際に合意に達したときに通知されます。



ブロック作り


サブネット上のレプリカはブロックメーカーとして機能し、チェーンを拡張するためのブロックを提案します。このサブネット上で実行されるキャニスターによって処理される必要があるいくつかのメッセージが利用可能になります。特定の高さ(29など)までのブロックチェーンがある場合があります。処理されるのを待っているメッセージを収集し、それらを1つのブロックにグループ化し、このゴシップネットワークで他のレプリカに送信することでブロックチェーンの拡張を提案します。


一部の参加者が実際に誤動作している場合でも、このプロトコルを機能させたいことを覚えておくことが重要です。つまり、この1つのブロックメーカーは実際には悪意があり、行き詰まり、私たちの生活を損なう可能性があるため、ブロックチェーンを拡張するために1つのブロックメーカーを選択することはできません。したがって、ブロックメーカーとして機能する多くのレプリカが必要です。



公証


同じ理由で、これらのブロック提案は実際には無効である可能性があります。これに対処するために、ラウンドで機能する公証プロセスがあり、すべてのラウンドで、ブロックチェーンを拡張できる有効なブロックが少なくとも1つあることが保証されます。



例として、レプリカ1に高さ29までの公証されたブロックチェーンがあるとします。高さ30でブロックチェーンを拡張するブロックが検出された場合、そのブロックを検証します。レプリカ1は、このブロックが有効であることを確認すると、公証共有と呼ばれる暗号署名をそのブロックに配置する可能性があります。公証共有は他のレプリカと、レプリカ1がこれが適切なブロックであると見なしていることを表すサブネットに送信されます。


レプリカ3とレプリカ4も、同じブロックに公証共有を作成する可能性があります。4つのレプリカのうち3つが十分な承認であると定義しましょう。この場合、4つのうち3つが、取得を期待できる承認の割合が最も高いことに注意してください。この場合、メモの1つが誤動作したりオフラインになったりしても、プロトコルは進行するはずです。これらの3つの公証共有を1つのアーティファクトに結合します。これを公証と呼びます。つまり、ブロック30が公証されます。公証人は次のラウンドに進み、高さ31のブロックを探し始めます。



これらの公証共有には、マルチシグニチャと呼ばれる特別なシグニチャを使用します。マルチシグニチャには、同じメッセージ上の多くのシグニチャを単一の一定サイズのシグニチャに圧縮して、すべてのノードがメッセージに署名したことを証明できる優れたプロパティがあります。これは、多くの公証人がいる非常に大きなサブネットがある場合でも、公証は小さなアーティファクトになることを意味します。


公証は、今説明したように常に機能するとは限りません。レプリカは有効なブロックを認識し、そのブロックに公証共有を作成する場合があります。ただし、同じ高さの別の候補ブロックが表示される可能性があります。これも有効です。レプリカがブロックの1つだけに署名する場合、一部の公証人が1つのブロックをサポートし、他の公証人が別のブロックをサポートする可能性があり、どちらも十分な承認を得られないため、実際にスタックする可能性があります。活気の特性を満たすために、公証人は実際に両方のブロックに署名し、少なくとも1つがこの方法で公証されるようにします。これは、1つの高さで複数の公証されたブロックを取得できることを意味します。



ランダムビーコン


ブロックメーカーと公証人は有効なブロックを識別できますが、すべての高さに複数の公証されたブロックが存在する可能性があるため、まだ合意に達していません。したがって、私たちが持っているものは、多くの有効なブロックのツリーのように見える可能性があります。最終的にブロックチェーンで合意を達成するために、プロトコルにランダムビーコンという何かを追加することで、ラウンドごとに取得する公証されたブロックの数を減らします。すべての高さで、ランダムビーコンと呼ばれるランダムに見えるアーティファクトがあります。これは予測できない値です。



レプリカは高さ29にランダムビーコンを持っている可能性があり、ラウンド29の公証プロセスが終了すると、次のランダムビーコンを作成する時期であると判断します。これにより、以前のランダムビーコン値に特別な署名が作成されます。これをランダムビーコン共有と呼びます。これは、ゴシップネットワークを介して共有するもう1つのアーティファクトです。


ここで別のランダムビーコン共有を取得した場合、共有を組み合わせて次のランダムビーコン値を構築できます。これを行うには、特別な署名、つまりしきい値BLS署名を使用します。それらは一意であるという特別な特性を持っています。つまり、どのレプリカが値を構築するために参加するかは問題ではありません。ただし、レプリカがそれ自体でその値を構築できないため、それらも予測できません。これらのしきい値BLS署名には、秘密鍵が当事者間で共有される特別な鍵資料が必要です。これは、非対話型分散鍵生成と呼ばれるプロトコルを介して設定されます。



この共通のランダム性が得られたので、これを使用して、ラウンドごとにブロックメーカーをランク付けします。



たとえば、ラウンド23で作成したランダムビーコンを使用して、ラウンド24でブロックメーカーをランク付けします。ラウンド24では、レプリカ1が最優先のブロックメーカー(つまり、ランク0のブロックメーカー)であることに同意できます。 )。もちろん、レプリカ1が適切に機能しない可能性があるため、フォールバックが必要です。たとえば、レプリカ4が、最初のフォールバックであるランク1のブロックメーカーとして選択される場合があります。それがうまくいかない場合は、レプリカ3がランク2のブロックメーカーです。そして最後に、レプリカ2は最後の手段です。ランダムビーコンは共通のランダム性を提供するため、すべてのレプリカはこのブロックメーカーの順序に同意します。


このブロックメーカーのランキングを使用して、公証人の行動をさらに強化します。より正確には、公証人がラウンドに入ると、タイマーを開始します。期間の初めに、ランク0のブロックメーカーによるブロックの公証シェアの作成のみを検討しています。それが一定の時間の後に失敗した場合にのみ、公証人はランク1のブロックメーカーからのブロック提案にフォールバックします。別の事前設定された時間が経過すると、ランク2またはランク3のブロックメーカーにさらにフォールバックします。



公証人にブロックメーカーのランキングを考慮させることで、目標は、ラウンドごとに取得する公証ブロックの数を減らすことです。例を見てみましょう。レプリカ1はラウンド30にあり、高さ30の有効なブロック提案を受け取りますが、ランク1のブロックメーカーにすぎません。まだランク1のブロックに署名する気がないので待つつもりです。うまくいけば、ランク0のブロックメーカーからブロック提案を受け取る可能性があります。これで、公証人は、ランク1ブロックではなく、このブロックに公証シェアを作成します。十分な数の他の公証人が同じことを行う場合、ランク0のブロックのみが完全に公証されます。このシナリオでは、公証されるブロックの数を実際に減らしました。これにより、コンセンサスに近づくことができます。


現在でも、一部のラウンドで複数の公証ブロックが存在する可能性がありますが、ほとんどのラウンドで、ランク0のブロックメーカーからの公証ブロックが1つしかないことを願っています。実際、公証人が1人しかいない場合、実際にはすでに合意に達しています。これは、すべてのラウンドで公証されたブロックの有効なチェーンが存在する必要があり、候補ブロックが1つしかない場合、そのポイントを通過するすべてのチェーンがそのブロックを通過する必要があるためです。したがって、そのブロックによって暗示されるチェーンは、実際に合意する必要があります。


ファイナライズ

したがって、課題は残っています。合意に達したことをどうやって知るのでしょうか。レプリカは、チェーンを受け入れることができることをどのようにして知ることができますか?1つのオプションは、レプリカが単に一定時間待機し、この期間の後に存在するすべての公証されたブロックが表示されると想定することです。高さに公証されたブロックが1つしかない場合、チェーンは次のように見なされます。この高さまで合意した。



しかし、これは非常にリスクの高いアプローチです。おそらくネットワークが適切に機能しておらず、実際にはまだ見たことがない他の公証されたブロックがあります。これは、十分に長く待たないと、安全性に違反する可能性があることを意味します。これは私たちを非常に困難な立場に置きます。サブネットがユーザーに応答するようにブロックを迅速に合意する必要がありますが、同時に、安全性を保証するために長時間待つ必要があることもわかっています。



別のメカニズムを使用して合意を遵守することにより、このトレードオフを回避します。合意に達したときを検出するのに役立つ、個別の非同期ファイナライズプロセスがあります。公証人は、1つのブロックが完全に公証されていることを確認するまで公証共有を作成し、その時点で次のラウンドに進むことを忘れないでください。次に、公証人が公証したブロックの数に関する情報を共有するようにします。これにより、合意に達することができます。より正確には、公証人がそのラウンドで受け取った最初の公証ブロック以外のブロックの公証共有を作成しなかった場合、公証人は、ファイナライズ共有と呼ばれる別のタイプの署名を作成します。


レプリカ1からの高さ30ブロックのファイナライズ共有は、基本的に、レプリカ1がこれ以外の高さ30ブロックに公証署名をしなかったことを意味します。これは、残りのサブネットにゴシップするもう1つのアーティファクトです。十分な数のレプリカが同じブロックのファイナライズ共有も作成する場合は、それらを1つのファイナライズに集約できます。ブロックでそのようなファイナライズを見るときはいつでも、ファイナライズはその高さで他の公証されたブロックが存在できないことの証拠であるため、その時点までのブロックチェーンを信頼できることがわかります。ネットワークが正常に動作している場合、これは、従来のブロックチェーンと比較して、実際にブロックについて非常に迅速に合意に達することができることを意味します。これは、これらのファイナライズ共有をすばやく作成して合意に達することができるためです。この非同期ファイナライズアプローチでは、
さらに、ネットワーク攻撃のリスクはありません。ネットワークが正常に動作しない場合でも、すべてのメッセージを確認したという前提ではなく、署名のみに依存しているため、安全であることがわかります。


完全なファイナライズとは、サブネットのノードの3分の1未満が破損している限り、他の公証されたブロックが存在できないことを意味します。理論を少し調べて、4つのノードがあるシナリオで実際にそうなる理由を見てみましょう。ブロックがファイナライズされた場合、4つのノードがあるため、3人の公証人がこのブロックにファイナライズシェアを作成したことを意味します。それらの多くても1つが破損していると想定しますが、それでも、少なくとも2つのレプリカが正直であり、ブロック上にファイナライズ共有を作成したことを確実に知っていることを意味します。また、正直なレプリカは、その高さで他のブロックに署名しなかった場合にのみ、そのようなファイナライズ共有を作成することも知っています。



つまり、2つのレプリカは、この高さでファイナライズされたブロック以外のブロックの公証共有を作成しませんでした。また、公証には3つの公証株式が必要であることもわかっています。つまり、それに到達するには3つのレプリカが参加する必要がありますが、サブネットには4つのレプリカしかありません。さらに、そのうちの2つは、他のブロックの公証にはまったく貢献しておらず、レプリカが2つしか残っていないと述べました。そして、2つはこの公証のしきい値である3に到達するのに十分ではないため、ファイナライズはその高さに他の公証されたブロックがないことを意味するという証拠を結論付けます。



これは、レプリカの3分の1未満が破損していることを前提としています。上記のデモンストレーションでは、最大で1つが破損した4つのレプリカのサブネットサイズを使用しましたが、「f」がa未満である限り、「f」が破損している「n」レプリカに同じ引数を簡単に拡張できます。 「n」の3分の1。
要約すると、4つのコンポーネントで構成されるコンセンサスプロトコルがあります。ブロックメーカーは、ブロックチェーンを拡張するための候補ブロックを作成します。有効なブロックが識別されることを保証する公証プロセスがあります。次に、ブロックメーカーをランク付けし、ラウンドごとに取得する公証されたブロックの数を減らすために使用するランダムビーコンを追加します。最後に、ネットワークの仮定に完全に依存することなく、ブロックチェーンが実際に合意されたときに通知する非同期ファイナライズメカニズムを使用します。



このコンセンサスプロトコルにより、サブネット内でレプリケーションを使用できるようになり、インターネットコンピューターに必要なセキュリティと信頼性を実現できます。



_____
インターネットコンピュータの背後にある技術を詳述するより多くのリリースをお楽しみに。


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