様々な図面における同様の参照番号および指定は同様の要素を示す。
本明細書は、信用される実行環境(TEE)においてブロックチェーンデータを処理するための技術を説明する。これらの技術は一般に、ブロックチェーンネットワークのブロックチェーンノードから複数のブロックを取り出すことと、複数の符号化されたブロックを生成するために誤り訂正コーディング(ECC)を使用して複数のブロックを符号化することと、複数の符号化されたブロックの中の各々の符号化されたブロックに対して、符号化されたブロックを複数のデータセットへと分割することと、複数のデータセットのハッシュ値を計算することと、ブロックチェーンネットワークの複数のブロックチェーンノードの各々に、複数のデータセット、ハッシュ値、および複数のブロックチェーンノードへの複数のデータセットの割当てを提供するデータ記憶方式のうちの少なくとも1つを含む要求を送信することと、少なくとも情報ビットの1つまたは複数のデータセットの数に等しい数のブロックチェーンノードから要求を受け入れるための応答を受信することと、複数のブロックチェーンノードの各々に、データ記憶方式を採用するための通知を送信することとを伴う。
本明細書で説明されるように、ブロックチェーンネットワークは、状態データ、ブロックデータ、およびインデックスデータなどの、異なるタイプのデータを記憶することができる。ブロックデータはブロックチェーンネットワークの中のすべてのトランザクションを含み、そうすると、新しいブロックがブロックチェーンに常に追加されるにつれて、大量の記憶空間を占有することがある。稀にアクセスされるブロック(たとえば、かなり前にブロックチェーンに追加されたブロック)のデータに対しては特に、ブロックチェーンノードがすべてのブロックデータを各々記憶するのは非効率であり得る。したがって、本明細書の実施形態は、ストレージの消費量を減らすために、各ブロックチェーンノードが稀にアクセスされるブロックの一部分を記憶することと、必要なときに他のブロックチェーンノードからブロックデータの残りを取り出すこととを実現する。しかしながら、障害のあるノードまたは信頼性のないノードがブロックチェーンネットワークに存在する場合、取り出されたデータを信用することができず、データ喪失が発生することがある。
いくつかの実施形態では、ブロックチェーンノードは、稀にアクセスされるブロックを符号化するために、イレージャコーディングなどのECCを実行することができる。ECC符号化されたブロックは次いで、複数のデータセットへと分割され得る。複数のデータセットは、あるデータ記憶方式に基づいて記憶するために、インデクシングされ異なるブロックチェーンノードに割り当てられ得る。稀にアクセスされるブロックからのデータが、スマートコントラクトを実行するためにブロックチェーンノードによって必要とされるとき、ブロックチェーンノードは、ECC符号化されたブロックを形成して元のブロックを復元するために、インデックスに基づいて他のブロックチェーンノードから対応するデータセットを取り出すことができる。ECC符号化されたブロックを共有することによって、真正ではないデータが存在する場合でも、またはデータ喪失が発生する場合でも、正直ブロックチェーンノードの割合がECCのコードレート以上である限り、元のブロックデータを復元することができる。
いくつかの実施形態では、各ブロックチェーンノード上でECCを実行する代わりに、信用されるノードと関連付けられるTEEのもとでECCが実行され得る。TEE技術を使用することによって、信用されるノードは、検証可能な符号化されたブロックを生成し、符号化されたブロックをデータセットに分割し、データセットおよびデータ記憶方式を記憶のために各ブロックチェーンノードに送信することができる。TEEのもとで生成されるデータセットは、ブロックチェーンノードによって検証可能であり得る。各ブロックチェーンノードは次いで、記憶空間を節約するためにそのデータ記憶方式に基づいてデータセットの一部分を記憶することができる。TEEに対応した信用されるノードがあることで、ECCは、各ブロックチェーンノードによって別々に実行されるのではなく、一度実行されるだけでよい。したがって、ブロックチェーンノードの全体のコンピューティングリソース消費量を大幅に減らすことができる。
いくつかの実施形態では、新しいブロックチェーンノードが、ブロックチェーンネットワークにフルノードとして追加される。新しく追加されたフルノードは、他のノードによって共有されないブロックの追加のコピーを記憶する。ブロックの追加のコピーは、記憶に関して冗長性をブロックチェーンネットワークに追加することができる。信用されるノードは、コピーがフルノードに記憶されている状態でブロックにECCを再実行し、元のブロックチェーンデータを置き換えるためにECC符号化されたブロックから分割されたデータセットをブロックチェーンノードに送信することができる。冗長なコピーの数は異なるブロックに対しては異なり得るので、ECCを再実行すること(re-ECC)は異なるストレージの節約をもたらし得る。したがって、re-ECCの優先度を冗長性に基づいて各ブロックに対して決定できるので、より大きなストレージの節約を達成するために、re-ECCの動作を、re-ECCの優先度がより高いブロックに対して実行することができる。
いくつかの実施形態では、ブロックチェーンノードがブロックチェーンネットワークから削除される。データセキュリティを確実にするために正直ブロックチェーンノードの割合がECCのコードレート以上になり得るように、信用されるノードはECCを再実行することができる。本明細書の実施形態は、安全にre-ECCを行うために採用され得る最大のコードレートを決定するための方法を提供する。
re-ECCが実行された後で、信用されるノードは、ブロックチェーンノードとのコンセンサスプロセスを開始し、re-ECCに基づいて新しいデータ記憶方式について合意に達することができる。コンセンサスに達した後で、ブロックチェーンノードは、元のデータを安全に削除し、ブロックチェーンデータの記憶および復元のために新しいデータ記憶方式に従うことができる。
本明細書で説明される技法は、いくつかの技術的な効果を生み出す。たとえば、本主題の実施形態は、ブロックチェーンネットワークの記憶リソースの負担を減らしながら、ブロックチェーンノードの計算効率とデータ平等性を維持する。稀にアクセスされるブロック(たとえば、より古いブロック)に対して、ブロックチェーンノードの記憶リソースは、各ブロックチェーンノード上のECC符号化されたブロック(符号化されたブロックとも本明細書で呼ばれる)の一部分のみを節約し必要なときに符号化されたブロックの残りを他のブロックチェーンノードから取り出すことによって、節約され得る。
いくつかの実施形態では、新しいブロックチェーンノードは、ブロックチェーンネットワークにフルノードに追加される。新しく追加されるフルノードは、他のノードによって共有されないブロックの追加のコピーを記憶する。ブロックの追加のコピーは、記憶に関して冗長性をブロックチェーンネットワークに追加する。本明細書の実施形態は、ストレージの消費量を減らすために、ブロックのre-ECC、およびECC符号化されたブロックから分割されたデータセットを他のブロックチェーンノードと共有することに対する技法を提供する。この技法は特に、記憶リソースが限られているブロックチェーンネットワークに適している。ECCはまた、計算リソースをよりうまく利用するために、CPU使用量が低いときブロックチェーンノードによっても再実行され得る。
いくつかの実施形態では、信用されるノードと関連付けられるTEEにおいてECCを実行することによって、信用されるノードは、符号化されたブロックを生成し、符号化されたブロックをデータセットに分割し、データセットおよびデータ記憶方式を記憶のために各ブロックチェーンノードに送信することができる。TEEのもとで生成されるデータセットは、データの真正性を確実にするためにブロックチェーンノードによって検証可能であり得る。各ブロックチェーンノードは次いで、記憶空間を節約するために、ブロック全体ではなく、データ記憶方式に基づいてデータセットの一部分を記憶することができる。TEEが有効な信用されるノードがあることで、ECCは、各ブロックチェーンノードによって別々に実行されるのではなく、一度実行されるだけでよい。したがって、ブロックチェーンネットワークの全体のコンピューティングリソース消費量を減らすことができる。
いくつかの実施形態では、ECCは、フルブロックチェーンノードがブロックチェーンネットワークに追加された後で再実行され得る。ECCは、記憶効率を改善するために、ブロックチェーンネットワークによって許容可能な障害のあるブロックチェーンノードの最大の数に基づいて、より高いコードレートを用いて実行され得る。しかしながら、ブロックチェーンの1つ1つのブロックに対するre-ECCは、大量の計算リソースを消費することができ、re-ECCの優先度は、re-ECCの記憶容量の節約に基づいて各ブロックに対して決定され得る。したがって、re-ECCは、計算リソースの消費を低くしながらより多くのストレージの節約を達成するために、re-ECCの優先度がより高いブロックに対して優先され得る。
いくつかの実施形態では、ブロックチェーンノードはブロックチェーンネットワークから削除され得る。ECCは、データセキュリティを確実にするために、正直ブロックチェーンノードの割合が依然としてECCのコードレート以上であり得るように再実行され得る。本明細書の実施形態は、re-ECCのために安全に採用され得るコードレートと、効率的なブロックチェーンデータの記憶のコンセンサスに達するための効率的なプロセスとを決定するための方法を提供する。
本明細書の実施形態に対するさらなる文脈を提供するために、および上で紹介されたように、コンセンサスネットワーク(たとえば、ピアツーピアノードからなる)とも呼ばれ得る分散型台帳システム(DLS)、およびブロックチェーンネットワークは、参加するエンティティがトランザクションを安全かつ変更不可能に行いデータを記憶することを可能にする。全般にブロックチェーンという用語が特定のネットワークおよび/または使用事例と関連付けられるが、本明細書では、どのような特定の使用事例にも言及することなくDLSを全般的に指すために、ブロックチェーンが使用される。
ブロックチェーンは、トランザクションが変更不可能である方式でトランザクションを記憶するデータ構造である。したがって、ブロックチェーンに記録されたトランザクションは、信頼性があり信用に値する。ブロックチェーンは1つまたは複数のブロックを含む。チェーンの中の各ブロックは、チェーンにおいてその直前にある以前のブロックに、その以前のブロックの暗号ハッシュを含むことによってリンクされる。各ブロックはまた、タイムスタンプ、固有の暗号ハッシュ、および1つまたは複数のトランザクションを含む。ブロックチェーンネットワークのノードによってすでに検証されているトランザクションは、ハッシュされてマークル木へと符号化される。マークル木は、木の葉ノードにおけるデータがハッシュされるデータ構造であり、木の各枝の中のすべてのハッシュが、枝の根において連結される。このプロセスは木の上に向かって木全体の根まで続き、その根は木の中のすべてのデータを表すハッシュを記憶する。木に記憶されているトランザクションであることを意図しているハッシュは、それが木の構造と矛盾しないかどうかを決定することによって迅速に検証され得る。
ブロックチェーンは、トランザクションを記憶するための非集中的なまたは少なくとも部分的に非集中的なデータ構造であるが、ブロックチェーンネットワークは、トランザクションをブロードキャストすること、検証すること、および妥当性確認することなどによって、1つまたは複数のブロックチェーンを管理し、更新し、維持する、コンピューティングノードのネットワークである。上で紹介されたように、ブロックチェーンネットワークは、パブリックブロックチェーンネットワーク、プライベートブロックチェーンネットワーク、またはコンソーシアムブロックチェーンネットワークとして提供され得る。本明細書の実施形態は、コンソーシアムブロックチェーンネットワークを参照して本明細書でさらに詳しく説明される。しかしながら、本明細書の実施形態は、任意の適切なタイプのブロックチェーンネットワークにおいて実現され得ることが企図される。
一般に、コンソーシアムブロックチェーンネットワークは、参加しているエンティティ以外には非公開である。コンソーシアムブロックチェーンネットワークでは、コンセンサスプロセスは、コンセンサスノードと呼ばれ得る認可されたノードのセットによって制御され、1つまたは複数のコンセンサスノードはそれぞれのエンティティ(たとえば、金融機関、保険会社)によって運営される。たとえば、10個のエンティティ(たとえば、金融機関、保険会社)のコンソーシアムがコンソーシアムブロックチェーンネットワークを運営することができ、それらのエンティティの各々がコンソーシアムブロックチェーンネットワークの中の少なくとも1つのノードを運用する。
いくつかの例では、コンソーシアムブロックチェーンネットワーク内で、グローバルブロックチェーンが、すべてのノードにわたって複製されるブロックチェーンとして提供される。すなわち、すべてのコンセンサスノードが、グローバルブロックチェーンに関して完全なステートコンセンサスの状態にある。コンセンサス(たとえば、ブロックチェーンへのブロックの追加に対する合意)を達成するために、コンセンサスプロトコルは、コンソーシアムブロックチェーンネットワーク内で実装される。たとえば、コンソーシアムブロックチェーンネットワークは、以下でさらに詳しく説明される、実用的ビザンチンフォールトトレランス(PBFT)コンセンサスを実施することができる。
図1は、本明細書の実施形態を実行するために使用され得る環境100の例を示す図である。いくつかの例では、環境100は、エンティティがコンソーシアムブロックチェーンネットワーク102に参加することを可能にする。環境100は、コンピューティングデバイス106、108、およびネットワーク110を含む。いくつかの例では、ネットワーク110は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、インターネット、またはこれらの組合せを含み、ウェブサイト、ユーザデバイス(たとえば、コンピューティングデバイス)、およびバックエンドシステムを接続する。いくつかの例では、ネットワーク110は、有線通信リンクおよび/またはワイヤレス通信リンクを介してアクセスされ得る。いくつかの例では、ネットワーク110は、コンソーシアムブロックチェーンネットワーク102との、およびその中での通信を可能にする。一般に、ネットワーク110は、1つまたは複数の通信ネットワークを表す。いくつかの場合、コンピューティングデバイス106、108は、クラウドコンピューティングシステム(図示せず)のノードであってもよく、または各コンピューティングデバイス106、108は、ネットワークによって相互接続されるある数のコンピュータを含む別個のクラウドコンピューティングシステムであってもよく、分散型処理システムとして機能していてもよい。
図示された例では、コンピューティングシステム106、108は各々、コンソーシアムブロックチェーンネットワーク102の中のノードとしての参加を可能にする任意の適切なコンピューティングシステムを含み得る。コンピューティングデバイスの例は、限定はされないが、サーバ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピューティングデバイス、およびスマートフォンを含む。いくつかの例では、コンピューティングシステム106、108は、コンソーシアムブロックチェーンネットワーク102とインターフェースするための1つまたは複数のコンピュータで実行されるサービスをホストする。たとえば、コンピューティングシステム106は、第1のエンティティが1つまたは複数の他のエンティティ(たとえば、他のユーザ)とのトランザクションを管理するために使用するトランザクション管理システムなどの、第1のエンティティ(たとえば、ユーザA)のコンピュータで実行されるサービスをホストすることができる。コンピューティングシステム108は、第2のエンティティが1つまたは複数の他のエンティティ(たとえば、他のユーザ)との対話を管理するために使用するトランザクション管理システムなどの、第2のエンティティ(たとえば、ユーザB)のコンピュータで実行されるサービスをホストすることができる。図1の例では、コンソーシアムブロックチェーンネットワーク102はノードのピアツーピアネットワークとして表され、コンピューティングシステム106、108は、コンソーシアムブロックチェーンネットワーク102に参加する、第1のエンティティ、および第2のエンティティのノードをそれぞれ提供する。
図2は、本明細書の実施形態によるアーキテクチャ200の例を示す。例示的な概念的アーキテクチャ200は、参加者A、参加者B、および参加者Cにそれぞれ対応する、参加者システム202、204、206を含む。各参加者(たとえば、ユーザ、企業)が、そのうちの少なくともいくつかがブロックチェーン216に情報を変更不可能に記録する、複数のノード214を含むピアツーピアネットワークとして提供されるブロックチェーンネットワーク212に参加する。単一のブロックチェーン216がブロックチェーン212内に図式的に示されているが、本明細書でさらに詳しく説明されるように、ブロックチェーン216の複数のコピーが提供され、ブロックチェーンネットワーク212にわたって維持される。
図示される例では、各参加者システム202、204、206は、それぞれ参加者A、参加者B、および参加者Cによって、またはその代わりに提供され、ブロックチェーンネットワーク内のそれぞれのノード214として機能する。本明細書で使用されるように、ノードは一般に、ブロックチェーンネットワーク212に接続される個々のシステム(たとえば、コンピュータ、サーバ)を指し、それぞれの参加者がブロックチェーンネットワークに参加することを可能にする。図2の例では、参加者は各ノード214に対応する。しかしながら、参加者がブロックチェーンネットワーク212内の複数のノード214を運用でき、かつ/または複数の参加者がノード214を共有できることが企図される。いくつかの例では、参加者システム202、204、206は、プロトコル(たとえばハイパーテキスト転送プロトコルセキュア(HTTPS))を使用して、かつ/またはリモートプロシージャコール(RPC)を使用して、ブロックチェーンネットワーク212と通信し、またはそれを通じて通信する。
ノード214は、ブロックチェーンネットワーク212内での参加の度合いが異なり得る。たとえば、一部のノード214はコンセンサスプロセスに参加することができるが(たとえば、ブロックチェーン216にブロックを追加するマイナーノードのように)、他のノード214はコンセンサスプロセスに参加しない。別の例として、一部のノード214はブロックチェーン216の完全なコピーを記憶するが、他のノード214はブロックチェーン216の部分のコピーのみを記憶する。たとえば、データアクセス特権が、それぞれの参加者がそれぞれのシステム内に記憶するブロックチェーンデータを制限することができる。図2の例では、参加者システム202、204、および206は、ブロックチェーン216のそれぞれの完全なコピー216'、216''、および216'''を記憶する。
ブロックチェーン(たとえば、図2のブロックチェーン216)はブロックのチェーンからなり、各ブロックがデータを記憶する。データの例は、2つ以上の参加者間のトランザクションを表すトランザクションデータを含む。トランザクションが非限定的な例として本明細書で使用されるが、任意の適切なデータ(たとえば、文書、画像、ビデオ、オーディオ)がブロックチェーンに記憶され得ることが企図される。トランザクションの例には、限定はされないが、価値のある何か(たとえば、資産、製品、サービス、通貨)の交換があり得る。トランザクションデータは、ブロックチェーン内に変更不可能に記憶される。すなわち、トランザクションデータを変更することはできない。
ブロックに記憶する前に、トランザクションデータはハッシュ化される。ハッシュ化は、トランザクションデータ(文字列データとして与えられる)を固定長のハッシュ値(やはり文字列データとして与えられる)に変換するプロセスである。ハッシュ値をハッシュ解除してトランザクションデータを取得するのは不可能である。ハッシュ化は、トランザクションデータのわずかな変化ですら完全に異なるハッシュ値をもたらすことを確実にする。さらに、上で述べられたように、ハッシュ値は固定長である。すなわち、トランザクションデータのサイズにかかわらず、ハッシュ値の長さは一定である。ハッシュ化は、ハッシュ関数を通じてトランザクションデータを処理し、ハッシュ値を生成することを含む。ハッシュ関数の例には、限定はされないが、256ビットのハッシュ値を出力するセキュアハッシュアルゴリズム(SHA)-256がある。
複数のトランザクションのトランザクションデータは、ハッシュされブロックに記憶される。たとえば、2つのトランザクションのハッシュ値が与えられ、それら自体が別のハッシュを与えるためにハッシュされる。このプロセスは、ブロックに記憶されるべきすべてのトランザクションに対して、単一のハッシュ値が与えられるまで繰り返される。このハッシュ値は、マークル根ハッシュと呼ばれ、ブロックのヘッダに記憶される。トランザクションのどのような変化もハッシュ値の変化をもたらし、最終的にはマークル根ハッシュの変化をもたらす。
ブロックはコンセンサスプロトコルを通じてブロックチェーンに追加される。ブロックチェーンネットワーク内の複数のノードが、コンセンサスプロトコルに参加し、ブロックがブロックチェーンに追加されるようにするための作業を実行する。そのようなノードはコンセンサスノードと呼ばれる。上で紹介されたように、PBFTがコンセンサスプロトコルの非限定的な例として使用される。コンセンサスノードは、ブロックチェーンにトランザクションを追加するためにコンセンサスプロトコルを実行し、ブロックチェーンネットワークの全体の状態を更新する。
さらに詳しく述べると、コンセンサスノードは、ブロックヘッダを生成し、ブロックの中のトランザクションのすべてをハッシュし、ブロックの中のすべてのトランザクションに対して単一のハッシュ値(マークル根ハッシュ)が与えられるまで、ハッシュ値をペアで組み合わせてさらなるハッシュ値を生成する。このハッシュがブロックヘッダに追加される。コンセンサスノードはまた、ブロックチェーンの中の直近のブロック(すなわち、ブロックチェーンに追加された最後のブロック)のハッシュ値を決定する。コンセンサスノードはまた、ノンス値およびタイムスタンプをブロックヘッダに追加する。
一般に、PBFTは、ビザンチンフォールト(たとえば、機能不全のノード、悪意のあるノード)に耐性がある、実用的ビザンチン状態機械複製を行う。これは、障害が発生すると仮定する(たとえば、独立したノード障害の存在、および/またはコンセンサスノードによって送信される操作されたメッセージの存在を仮定する)ことによって、PBFTにおいて達成される。PBFTでは、コンセンサスノードは、主要コンセンサスノードおよびバックアップコンセンサスノードを含むシーケンスにおいて提供される。主要コンセンサスノードは定期的に変更される。トランザクションは、ブロックチェーンネットワークのワールドステートに関して合意に達したブロックチェーンネットワーク内のすべてのコンセンサスノードによって、ブロックチェーンに追加される。このプロセスにおいて、コンセンサスノード間でメッセージが送信され、各コンセンサスノードは、メッセージが指定されたピアノードから受信されることを証明し、メッセージが送信の間に修正されなかったことを検証する。
PBFTにおいて、コンセンサスプロトコルは複数の段階で提供され、すべてのコンセンサスノードが同じ状態で開始する。初めに、クライアントが、サービス動作(たとえば、ブロックチェーンネットワーク内でトランザクションを実行すること)を発動するために、要求を主要コンセンサスノードに送信する。要求を受信したことに応答して、主要コンセンサスノードは、要求をバックアップコンセンサスノードにマルチキャストする。バックアップコンセンサスノードは要求を実行し、各々がクライアントに返答を送信する。クライアントは、閾値の数の返答が受信されるまで待つ。いくつかの例では、クライアントはf+1個の返答が受信されるまで待ち、fはブロックチェーンネットワーク内で許容され得る障害のあるコンセンサスノードの最大の数である。PBFTにおいて、障害のあるコンセンサスノードの最大の数は、コンセンサスノードの総数の1/3未満である必要がある。最終結果は、ブロックチェーンに追加されるべき記録の順序について十分な数のコンセンサスノードが合意に達するというものであり、記録は受け入れられるか拒絶されるかのいずれかである。
一部のブロックチェーンネットワークでは、トランザクションのプライバシーを維持するために、暗号化が実施される。たとえば、ブロックチェーンネットワークの中の他のノードがトランザクションの詳細を識別できないように、2つのノードがトランザクションを非公開に保つことを望む場合、ノードはトランザクションデータを暗号化することができる。暗号化の例には、限定はされないが、対称暗号化および非対称暗号化がある。対称暗号化は、暗号化(プレーンテキストから暗号文を生成すること)と復号(暗号文からプレーンテキストを生成すること)の両方に対して単一の鍵を使用する、暗号化プロセスを指す。対称暗号化では、同じ鍵が複数のノードに対して利用可能であるので、各ノードがトランザクションデータを暗号化/復号することができる。
非対称暗号化は、秘密鍵および公開鍵を各々含む鍵のペアを使用し、秘密鍵はそれぞれのノードだけに知られており、公開鍵はブロックチェーンネットワークの中の任意のまたはすべての他のノードに知られている。ノードは、データを暗号化するために別のノードの公開鍵を使用することができ、暗号化されたデータは、他のノードの秘密鍵を使用して復号され得る。たとえば、図2を再び参照すると、参加者Aは、データを暗号化するために参加者Bの公開鍵を使用し、暗号化されたデータを参加者Bに送信することができる。参加者Bは、秘密鍵を使用して暗号化されたデータ(暗号文)を復号し、元のデータ(プレーンテキスト)を抽出することができる。ノードの公開鍵を用いて暗号化されるメッセージは、ノードの秘密鍵を使用してのみ復号され得る。
非対称暗号化はデジタル署名を提供するために使用され、これは、トランザクションの参加者が、トランザクションの他の参加者ならびにトランザクションの有効性を確認することを可能にする。たとえば、ノードはメッセージにデジタル署名することができ、別のノードは、参加者Aのデジタル署名に基づいてメッセージがノードによって送信されたことを確認することができる。デジタル署名は、メッセージが途中で改竄されないことを確実にするためにも使用され得る。たとえば、再び図2を参照すると、参加者Aはメッセージを参加者Bに送信することになる。参加者Aは、メッセージのハッシュを生成し、次いで秘密鍵を使用して、ハッシュを暗号化して、暗号化されたハッシュとしてデジタル署名を提供する。参加者Aは、デジタル署名をメッセージに付加し、デジタル署名を伴うメッセージを参加者Bに送信する。参加者Bは、参加者Aの公開鍵を使用してデジタル署名を復号し、ハッシュを抽出する。参加者Bは、メッセージをハッシュしてハッシュを比較する。ハッシュが同じである場合、参加者Bは、メッセージが本当に参加者Aからのものであり、改竄されていないことを確認することができる。
いくつかの実施形態では、ブロックチェーンネットワークのノード、および/またはブロックチェーンネットワークと通信するノードは、TEEを使用して動作することができる。高水準において、TEEは、ハードウェアの動作環境(たとえば、オペレーティングシステム(OS)、基本入力/出力システム(BIOS))から分離された、ハードウェア(1つまたは複数のプロセッサ、メモリ)内の信用される環境である。さらに詳しく述べると、TEEは、メインプロセッサ内で実行するコードおよびメインプロセッサ内にロードされるデータの機密性と完全性を確実にする、プロセッサの別個のセキュアなエリアである。プロセッサ内で、TEEはOSと並列に実行される。いわゆる信用されるアプリケーション(TA: trusted application)の少なくとも一部がTEE内で実行され、プロセッサおよびメモリへのアクセス権を有する。TEEを通じて、TAはメインOSにおいて実行される他のアプリケーションから保護される。さらに、TEEは、TEEの内部で互いにTAを暗号学的に隔離する。
TEEの例には、米国カリフォルニア州サンタクララのIntel Corporationにより提供されるSoftware Guard Extensions(SGX)がある。SGXが本明細書において例として論じられるが、本明細書の実施形態は任意の適切なTEEを使用して実現され得ることが企図される。
SGXはハードウェアベースのTEEを提供する。SGXにおいて、信用されるハードウェアは、中央処理装置(CPU)のダイであり、選ばれたコードおよびデータを保護するために物理メモリの一部分が隔離される。メモリの隔離される部分はエンクレーブと呼ばれる。より具体的には、エンクレーブは、メモリの中にエンクレーブページキャッシュ(EPC)として提供され、アプリケーションアドレス空間にマッピングされる。メモリ(たとえば、DRAM)は、SGXのための保護されたランダムメモリ(PRM)を含む。PRMは、最低のBIOSレベルにおける連続的なメモリ空間であり、どのようなソフトウェアによってもアクセスすることができない。各EPCは、アプリケーションデータおよびコードをPRMにロードするためにOSによって割り振られるメモリセット(たとえば、4KB)である。EPCメタデータ(EPCM)は、それぞれのEPCに対するエントリアドレスであり、各EPCが1つのエンクレーブによってのみ共有され得ることを確実にする。すなわち、単一のエンクレーブは複数のEPCを使用することができるが、EPCは単一のエンクレーブに専用である。
TAの実行の間に、プロセッサは、エンクレーブに記憶されているデータにアクセスするとき、いわゆるエンクレーブモードで動作する。エンクレーブモードでの動作は、各メモリアクセスに対する余剰のハードウェア確認を実施する。SGXにおいて、TAは、信用される部分および信用されない部分へとまとめられる。信用される部分は、たとえば、OS、BIOS、特権的なシステムコード、仮想マシンマネージャ(VMM)、システム管理モード(SMM)などによってアクセス不可能である。動作において、TAは、メモリのPRM内でエンクレーブを実行して作成する。エンクレーブ内の信用される部分によって実行される信用される機能は信用されない部分によって呼び出され、エンクレーブ内で実行されるコードはプレーンテキスト(暗号化されていない)としてデータを見て、データへの外部からのアクセスは拒否される。信用される部分は、呼び出しに対する暗号化された応答を提供し、TAは実行し続ける。
予想されるコード(たとえば、TAの信用される部分)がSGXにより提供されるTEE内で安全に実行されていることを検証するために、証明(attestation)プロセスが実行され得る。一般に、証明プロセスは、挑戦者(たとえば、ブロックチェーンネットワークの中の別のノード、ブロックチェーンネットワークの鍵管理システム(KMS))からTAが証明要求を受信することを含む。それに応答して、TAは、見積もり(quote)とも呼ばれるリモート証明書をTAのエンクレーブが作成することを要求する。リモート証明書を作成することは、ローカル証明書がそのエンクレーブからいわゆる見積もりを求めているエンクレーブに送信されることを含み、見積もりを求めているエンクレーブは、ローカル証明書を検証し、非対称証明鍵を使用してローカル証明書に署名することによって、ローカル証明書をリモート証明書に変換する。リモート証明書(見積もり)は、挑戦者(たとえば、ブロックチェーンネットワークのKMS)に提供される。
挑戦者は、証明書検証サービスを使用してリモート証明書を検証する。SGXでは、IntelがIntel Attestation Service(IAS)を提供し、これは挑戦者からリモート証明書を受信し、リモート証明書を検証する、より具体的には、IASは、リモート証明書を処理し、報告(たとえば、証明書検証報告(AVR))を提供し、この報告はリモート証明書が検証されるかどうかを示す。検証されない場合、エラーが示され得る。検証される(たとえば、予想されるコードがTEEにおいて安全に実行されている)場合、挑戦者は、TAとの対話を開始または継続することができる。たとえば、検証に応答して、KMS(挑戦者)は、(たとえば、楕円曲線ディフィーヘルマン(ECDH)などの鍵交換プロセスを通じて)TEEを実行しているノードに非対称暗号鍵(たとえば、公開鍵および秘密鍵のペア)を発行して、他のノードおよび/またはクライアントとノードが安全に通信することを可能にし得る。
図3は、本明細書の実施形態による、ブロックデータの符号化およびハッシュ化のプロセス300の例を示す。この例では、ブロックチェーンノード302、304、306、および308である、4つのブロックチェーンノードのブロックチェーンネットワークが示されている。符号化およびハッシュ化のプロセス300を例示するために、ブロックチェーンノード302を例として使用すると、ブロックチェーンノード302は、ブロック312のブロックボディにブロックチェーンネットワークのブロックデータを記憶することができる。示される例では、ブロックデータがブロック100に記憶される。その後、ブロックチェーンノード302は、他のブロックチェーンノード304、306、および308とのコンセンサスプロセスに関与することができる。コンセンサスプロセスの間、ブロックチェーンノード302は、ブロックチェーン上に対応するブロックを作成するために、proof of work(PoW)またはproof of stake(PoS)などのコンセンサスアルゴリズムを実行することができる。
いくつかの実施形態では、ブロックチェーンノード302は、1つまたは複数の稀にアクセスされるブロックを特定することができる。実際には、ブロックが作成されてからより長いほど、スマートコントラクトを実行することなどの動作のために対応するブロックデータが必要とされる可能性がより低くなる。ブロックチェーンノード302は、ローカルに記憶されているブロックが所定の長さの時間の間にブロックチェーン上で作成された昔のブロックであるとき、ローカルに記憶されているブロックが稀にアクセスされると決定することができる。たとえば、その所定の長さの時間は、ブロックが作成される平均時間の1倍または2倍であり得る。いくつかの例では、スマートコントラクトを実行するためにブロックの中のブロックデータが所定の長さの時間の間に取り出されないときも、ブロックは稀にアクセスされるもの決定され得る。
稀にアクセスされるブロックを特定した後で、ブロックチェーンノード302は、稀にアクセスされるブロックの各々のブロックボディの中のブロックデータのECC314を実行することができる。ECCは、冗長ビット(冗長性とも呼ばれる)をデータに追加することによって、信頼できない送信を介したデータのエラーまたは喪失を制御するために使用され得る。冗長ビットは、多くの元の情報ビットの複素関数であり得る。冗長性は、データの再送信なしでデータのエラーまたは喪失が訂正されることを可能にできる。元の情報は、符号化された出力に文字通り現れることも現れないこともある。符号化された出力の中の修正されていない元の情報を含むECC符号はシステマティックECC符号と呼ばれるが、それを含まないものはノンシステマティックECC符号と呼ばれる。ECCによって訂正され得るエラーまたは欠けているビットの最大の割合は、ECC符号の設計によって決定される。したがって、異なる条件に対して、異なる誤り訂正符号が適している。一般に、より強いECC符号はより高い冗長性を引き起こし、これは、符号のストレージ消費量を増やし、符号化された情報が送信されるべきである場合、通信効率を下げる。
1つの例示的なECCはイレージャコーディングであり得る。イレージャコーディングを使用すると、k個のシンボルのメッセージを、n個のシンボルを伴う符号語へと符号化することができ、kおよびnは自然数であり、k<nである。メッセージは、nシンボルの符号語のサブセットから復元され得る。分数r=k/nがイレージャコーディングのコードレートである。
ECCを使用することによって、ブロックチェーンノードの各々は、符号化されたブロックデータの一部分を記憶し、必要なときに他のブロックチェーンノードから符号化されたブロックデータの残りを取り出すことができる。いくつかの実施形態では、ECCは、ブロックチェーンノード302の計算リソースの利用率が所定の値(たとえば、40%)未満であるときに実行され得る。したがって、ブロックチェーンノード302上での他の計算動作との干渉を減らすことができる。いくつかの実施形態では、ブロックチェーンノード302の記憶空間の使用率が所定の百分率以上であるときに、ECCが実行され得るので、ECCの後で、符号化されたブロックデータの何らかの部分が、記憶空間を空けるために削除され得る。
再び例としてブロック100を使用して、ブロックチェーンノード302が、稀にアクセスされるブロックとしてブロック100を決定し、ECC314を実行すると仮定すると、ECC符号化されるデータは、データ記憶方式に基づいて複数のデータセットへと分割され得る。データ記憶方式は、データがブロックチェーンネットワーク内でどこに、かつ/またはどのように記憶されるべきかを定義する、コンピュータ実行可能命令のセットとして提供され得る。いくつかの例では、データ記憶方式は、プルーフオブオーソリティを伴う信用されるノードによって提供され、ブロックチェーンノードによって合意され得る。いくつかの例では、データ記憶方式は、コンセンサスを通じてブロックチェーンノードによって合意され得る。一般に、データ記憶方式は、ブロックチェーンネットワークの中のブロックチェーンノードの数に基づいて、符号化されたデータを複数のデータセットに分割するための、1つまたは複数の所定の規則を含み得る。データ記憶方式はまた、ブロックチェーンノードの各々によって記憶またはハッシュされるべき複数のデータセットのうちの1つまたは複数のデータセットの割当てを含み得る。データ平等性を確保するために、データ記憶方式は、ブロックチェーンネットワークの各ブロックチェーンノードによって記憶されるべき少なくとも1つのデータセットの割当てを含み得る。
図3に示される例では、ブロック100の符号化されたブロックデータは、Data1、Data2、Data3、およびVdata1という4つのデータセットへと分割され、それらの各々が、ブロックチェーンノード302、304、306、および308のうちの1つによって記憶されるべきである。Vdata1は、誤り訂正のためにECCの冗長ビットを表すことができる。Data1は、データ記憶方式に従ってブロックチェーンノード302によって記憶されるものとして選択される。Data2、Data3、およびVdata1は、ハッシュ値Dhash2、Dhash3、およびVhash1をそれぞれ生成するために、別々にハッシュされる(316)ものとして選択される。本明細書の実施形態によれば、符号化されたデータは、ブロックチェーンネットワークが4つより多くのノードを有するとき、4つより多くのデータセットへ分割され得る。いくつかの例では、ブロックチェーンノードの各々が、1つより多くのデータセットを記憶し、他のノードによって記憶されるものとして割り当てられるデータセットの残りをハッシュすることができる。
ここで図4を参照すると、図4は、本明細書の実施形態によるデータ記憶方式400の例を示す。より前に論じられたように、Data1は、データ記憶方式400に従ってブロックチェーンノード302によって記憶されるものとして選択される。データ記憶方式400に基づいて、ブロックチェーンノード304は、Data2を記憶し、Data1、Data3、およびVdata1を別々にハッシュして、ハッシュ値Dhash1、Dhash3、およびVhash1をそれぞれ生成する。ブロックチェーンノード306は、Data3を記憶し、Data1、Data2、およびVdata1を別々にハッシュして、ハッシュ値Dhash1、Dhash2、およびVhash1をそれぞれ生成する。ブロックチェーンノード308は、Vdata1を記憶し、Data1、Data2、およびVdata3を別々にハッシュして、ハッシュ値Dhash1、Dhash2、およびDhash3をそれぞれ生成する。
図3に戻ると、ハッシュ値が同じブロックの符号化されたデータセットに対応するので、それらはブロックのブロックIDによってインデクシングされ得る。たとえば、ブロックチェーンノード302は、ブロックID100を用いて、ブロック100と関連付けられるData1、Dhash1、Dhash2、およびVhash1をインデクシングすることができる。したがって、ブロックチェーンノード302は、インデクシングされたブロックIDを使用して、ハッシュ値をそれらの対応するブロックにマッピングすることができる。データセットおよびハッシュ値をインデクシングすることのより詳細な例が、図6の説明において論じられる。
データ記憶方式に従って、他のデータ記憶方式がブロックチェーンノード302、304、306、および308のために行われ得ることが理解されるべきである。いくつかの例では、ブロック100の符号化されたブロックデータは、4つより多くのデータセットに分割され得る。データ記憶方式に従って、他のデータ記憶方式がブロックチェーンノード502、504、506、および508のために作られ得ることが理解されるべきである。
Dhash2、Dhash3、およびVhash1を生成して記憶した後で、ブロックチェーンノード302は、記憶空間を節約するためにストレージからData2、Data3、およびVdata1を削除することができる。したがって、各ブロックに対して、ブロックチェーンノード302は、ブロック全体の代わりに、1つのECC符号化されたデータセット(すなわち、Data1)および3つのハッシュ値(すなわち、Dhash2、Dhash3、およびVhash1)のみを記憶する。したがって、記憶空間を大幅に減らすことができる。ブロック100と同様に、符号化およびハッシュ化のプロセスは、ブロックチェーンノード304、306、および308によって記憶される他の稀にアクセスされるブロックのために実行され得る。
ブロック100のブロックデータがスマートコントラクトを実行するために必要であるとブロックチェーンノード302が決定するとき、ブロックチェーンノード302は、データ記憶方式に従って、ブロックチェーンノード304、306、および308からそれぞれ、Data2、Data3、およびVdata1を取り出すことができる。他のブロックチェーンノード304、306、および308からデータセットを取り出すために、ブロックチェーンノード302は、データ記憶方式に従って取り出されるべきデータセットに対応するハッシュ値を送信することができる。
たとえば、Data2を取り出すために、ブロックチェーンノード302は、Dhash2をブロックチェーンノード304に送信することができる。ブロックチェーンノード304がData2を記憶している場合、ブロックチェーンノード304は、Dhash2を受信したことに応答して、Data2をブロックチェーンノード302に返信することができる。ブロックチェーンノード304からData2を受信した後で、ブロックチェーンノード302は、受信されたデータセットをハッシュし、ハッシュ値をDhash2と比較することができる。ハッシュ値がDhash2と同じである場合、ブロックチェーンノード302は、受信されたデータセットが真正であると決定することができる。そうではない場合、受信されたデータセットは真正ではないと決定される。受信されたデータセットが真正ではないと決定されると、ブロックチェーンノード302は、ブロックチェーンノード304を障害のあるノード(またはビザンチンノード)として報告することができる。ブロックチェーンノード302によって受信される真正ではないデータの百分率が、ECCによって訂正され得るエラーのあるビットまたは欠けているビットの最大の割合以下である場合、ブロック100は、ローカルに記憶され受信されるデータセットから復元され得る。
前に説明されたように、ブロックチェーンネットワークは、状態データ、ブロックデータ、およびインデックスデータなどの、異なるタイプのデータを記憶することができる。MPTまたは固定深度マークル木(FDMT)などの、コンテンツアドレス指定された状態木として、状態データが記憶されることが多い。コンテンツアドレス指定された状態木は、本質的に増分的である。すなわち、アカウント状態の変化は、既存の状態木の値を更新するだけではなく新しい木構造を追加することによって反映される。したがって、コンテンツアドレス指定される状態木は、ブロックがブロックチェーンに連続的に追加されるとき、サイズが非常に大きくなり得る。FDMT記憶方式のもとで、状態データは、現在のブロックと関連付けられる現在の状態データおよびブロックチェーンのすべてのブロックと関連付けられる過去の状態データへと分離され得る。FDMTの中の大半のデータは、稀に使用される過去の状態データである。1つ1つのコンセンサスノードにすべての過去の状態データを記憶することは、記憶リソースの使用量に関して非常に非効率であり得る。
いくつかの実施形態では、ブロックデータを符号化して共有したのと同様に、イレージャコーディングなどのECCは、過去の状態データを符号化するために使用され得る。ブロックチェーンネットワークの中の各コンセンサスノードは、過去の状態データの一部分のみを記憶し、ストレージの消費量を減らすために他のノードから過去の状態データの残りを取り出す。元の過去の状態データの代わりにECC符号化された過去の状態データを共有することによって、真正ではないデータが存在する場合であっても、またはデータ喪失が発生する場合であっても、真正ではないデータまたはデータ喪失の百分率が、ECCによって訂正され得るエラーのあるビットまたは欠けているビットの最大の割合以下である限り、元の過去の状態データを復元することができる。
図5は、本明細書の実施形態による、ブロックデータの符号化およびハッシュ化のプロセス500の別の例を示す。この例では、ブロックチェーンノード502、504、506、および508である、4つのブロックチェーンノードのブロックチェーンネットワークが図示されている。符号化およびハッシュ化のプロセス500を示すための例としてブロックチェーンノード502を使用すると、新しいブロックデータがブロック512に追加されると、ブロックチェーンノード502は、ブロックデータを符号化するためにECC514を実行することができる。図3の説明において論じられる符号化とハッシュ化のプロセス300と比較して、ブロックチェーンノード502は、ブロックデータがブロックに書き込まれるにつれてブロックデータ上でECCを実行する。したがって、ブロックチェーンノード502は、ブロック全体を記憶する必要はなく、代わりに、データ記憶方式に基づいて、ECC符号化されたブロックデータの選択された部分と、符号化されたブロックデータの残りに対応するハッシュ値とを記憶することができる。この符号化およびハッシュ化のプロセス500は特に、ブロックチェーンノード502のディスク空間が少ないシナリオに対して適切であり得る。
いくつかの実施形態では、ブロックとしてデータを記憶する代わりに、ブロックチェーンノード502は、ログ先行書き込み(WAL)ファイルまたは他の同様のロールフォワードジャーナルファイルを記憶することができる。WALファイルは、コミットされているがブロックチェーンノード502によってまだ記憶されていないブロックデータを記録することができる。WALファイルを使用すると、元のブロックチェーンデータをデータベースファイルに保存することができるが、ブロックチェーンデータの変更を別個のWALファイルに書き込むことができる。その変更を用いたロールフォワードへのコミットは、元のブロックチェーンデータに書き込むことなく発生し得る。この構成は、変更がWALファイルにコミットされながら、ブロックチェーンデータが継続的に動作することを可能にする。符号化およびハッシュ化のプロセス500を通じて行われる変更を記憶するためにWALファイルを使用することによって、ブロックチェーンノード502は、適切なときにバックグラウンドでECCを実行しながら、コンセンサスのためのブロックデータを有することを示すことができる。したがって、ECCは、コンセンサスプロセスの計算効率またはレイテンシに対する影響を減らすために、ブロックチェーンノード302の計算リソースの利用率が低いときに実行され得る。
いくつかの実施形態では、ブロックチェーンノード502は、バッファにブロックデータを記憶することができる。ブロックチェーンノード502は、データのサイズが所定の閾値より大きいとき、またはバッファが満杯であるとき、バッファに記憶されているブロックデータにECCを実行することができる。ECCを実行した後で、ブロックチェーンノード502は、以下の説明において論じられるように、符号化されたブロックデータおよびハッシュ値を記憶するために、符号化およびハッシュ化のプロセス500に従うことができる。
ブロック100を例として使用すると、ECCを実行した後で、符号化されたブロックデータは、データ記憶方式に基づいて複数のデータセットへと分割され得る。図3の例において論じられる例と同様に、ブロック100の符号化されたブロックデータを、Data1、Data2、Data3、およびVdata1である4つのデータセットへと分割することができ、これらは、ブロックチェーンノード502、504、506、および508のうちの1つによって記憶されるべきである。Vdata1は、ECCの冗長ビットを表すことができる。Data1は、データ記憶方式に従って、ブロックチェーンノード502によって記憶されるものとして選択される。Data2、Data3、およびVdata1は、それぞれハッシュ値Dhash2、Dhash3、およびVhash1を生成するために、別々にハッシュされる(516)ものとして選択される。
ハッシュ値は、ハッシュ値の対応するブロックのブロックIDによってインデクシングされ得る。たとえば、ブロックチェーンノード502は、ブロックID100を用いて、ブロック100と関連付けられるData1、Dhash1、Dhash2、およびVhash1をインデクシングすることができる。したがって、ブロックチェーンノード502は、インデクシングされたブロックIDを使用して、ハッシュ値をそれらの対応するブロックにマッピングすることができる。データセットおよびハッシュ値をインデクシングすることのより詳細な例が、図6の説明において論じられる。
データ記憶方式に従って、他のデータ記憶方式が1つまたは複数のブロックチェーンノード502、504、506、および508のために作られ得ることが理解されるべきである。たとえば、ブロック100の符号化されたブロックデータは、4つより多くのデータセットへと分割され得る。ブロックチェーンノード502、504、506、および508の各々が、1つより多くのデータセットを記憶し、他のノードによって記憶されるデータセットの残りをハッシュすることができる。
Dhash2、Dhash3、およびVhash1を生成した後で、ブロックチェーンノード502は、Data1、Dhash2、Dhash3、およびVhash1を記憶し、ストレージからData2、Data3、およびVdata1を削除して記憶空間を節約することができる。したがって、ブロックチェーンの各ブロックに対して、ブロックチェーンノード502は、記憶空間を節約するために、元のブロックデータの代わりに1つのデータセット(すなわち、Data1)およびECC符号化されたブロックデータの3つのハッシュ値(すなわち、Dhash2、Dhash3、およびVhash1)だけを記憶する。ブロック100のブロックデータがスマートコントラクトを実行するために必要とされることを、ブロックチェーンノード502が決定するとき、ブロックチェーンノード502は、データ記憶方式に従って、ブロックチェーンノード504、506、および508からそれぞれ、Data2、Data3、およびVdata1を取り出すことができる。
他のブロックチェーンノード504、506、および508からデータセットを取り出すために、ブロックチェーンノード502は、データ記憶方式に従って、取り出されるべきデータセットに対応するハッシュ値を送信することができる。たとえば、Data2を取り出すために、ブロックチェーンノード502は、Dhash2をブロックチェーンノード504に送信することができる。ブロックチェーンノード504がData2を記憶している場合、ブロックチェーンノード504は、Dhash2を受信したことに応答して、Data2をブロックチェーンノード502に返信することができる。ブロックチェーンノード504からData2を受信した後で、ブロックチェーンノード502は、受信されたデータセットをハッシュし、ハッシュ値をDhash2と比較することができる。ハッシュ値がDhash2と同じである場合、ブロックチェーンノード502は、受信されたデータセットが真正であると決定することができる。それ以外の場合、受信されたデータセットは真正ではないと決定され得る。受信されたデータセットが真正ではないものとして決定されるとき、ブロックチェーンノード502は、ブロックチェーンノード504を障害のあるノード(またはビザンチンノード)として報告することができる。ブロックチェーンノード502によって受信される真正ではないデータの百分率が、ECCによって訂正され得るエラーのあるビットまたは欠けているビットの最大の割合以下である場合、ブロック100は、ローカルに記憶されており受信されたデータセットから復元され得る。
前に論じられたように、符号化およびハッシュ化のプロセスを実行することによって、ブロックチェーンデータは、ECC符号化され、複数のデータセットへと分割され得る。記憶空間を節約するために、各ブロックチェーンノードは、データ記憶方式に基づいて、複数のデータセットのうちの1つまたは複数およびデータセットの残りのハッシュ値を記憶することができる。記憶されているデータセットおよびハッシュ値は、ブロックチェーンノードが他のノードからデータセットを取り出して元のデータを復元するために、ブロックIDを用いてインデクシングされ得る。
図6は、本明細書の実施形態による、TEEに基づく共有されたブロックチェーンデータの記憶のプロセス600の例を示す。この例では、ブロックチェーンネットワーク610は、ブロックチェーンノード630a~dである4つのブロックチェーンノードを含むと仮定される。ブロックチェーンネットワーク610はまた、TEEをホストする信用されるノード620を含み、またはそれと通信している。信用されるノード620は、コンピューティングデバイス、コンピューティングシステム、またはクラウドコンピューティングシステムであり得る。前に論じられたように、TEEは、1つまたは複数のデータプロセッサのオペレーティングシステムから隔離された信用されるノード620の1つまたは複数のデータプロセッサによってホストされてもよく、1つまたは複数のデータプロセッサ内でのコード実行およびデータロードの機密性および完全性を高めるように構成される。
いくつかの実施形態では、信用されるノード620は、プルーフオブオーソリティ(POA)を伴うノードであり得る。いくつかの例では、POAは、信用されるノード620のステータスに基づいて提供され得る。たとえば、信用されるノード620は、ブロックチェーンネットワーク610のデプロイヤによって管理されるノードであり得る。そのような場合、信用されるノード620は、ブロックチェーンネットワーク610の一部またはブロックチェーンネットワーク610の外側であり得る。いくつかの例では、POAは投票を通じて得られてもよい。たとえば、ブロックチェーンネットワークが3f+1個のノード(信用されるノード620がブロックチェーンネットワーク620のコンセンサスに参加する、図6に示されるような例ではf=1)を含み、許容することができる最大の障害のあるコンセンサスノードまたはビザンチンノード(すなわち、活動に失敗するノードまたは悪意をもって活動するノード)が、PBFTコンセンサスプロトコルのもとでf個あると仮定する。したがって、2f+1個のノードが、信用されるノード620を選ぶために(それぞれのデジタル署名によって支持される)票を投じる場合、受信された2f+1票が、信用されるノード620のPOAとして使用され得る。
前に論じられたように、SGXに対応したアプリケーションなどのTAは、信用されるコンポーネント(またはエンクレーブコンポーネント)および信用されないコンポーネント(アプリケーションコンポーネント)を含み得る。アプリケーションコンポーネントは、TEEの外側に位置し、エンクレーブインターフェース機能を通じてTEEのTCBにアクセスすることができる。いくつかの実施形態では、これらのエンクレーブインターフェース機能は、アプリケーションコンポーネントによって使用されるアプリケーションプログラミングインターフェース(API)である。アプリケーションコンポーネントは、APIを使用して「ecall」を行い、スマートコントラクトを実行するためにTEEにおいて仮想機械を呼び出すことができる。仮想機械は、特定のプログラミング言語で、またはビットストリームなどのバイナリフォーマットで符号化されるプログラム命令を実行する、ソフトウェアプログラムであり得る。いくつかの例では、仮想機械は、プログラム命令と、仮想機械を実行するコンピューティングデバイスの背後にあるハードウェアとの間に、抽象化レイヤを提供し得る。そのような構成は、同じプログラム命令が、異なるハードウェアを有する異なるコンピューティングデバイスにわたって同じ方法で実行されることを可能にし得る。
いくつかの実施形態では、ecallは、図3および図5の説明において論じられるような符号化とハッシュ化のプロセス300および500に従って1つまたは複数のソフトウェア命令を実行するために、スマートコントラクトを実行するためのアプリケーションコンポーネントによって行われ得る。TEEは次いで、プロセス300、500の複数のステップを通じて行われる複数のイベントの間にデータ処理を実行することができる。プロセス300、500の複数のステップと関連付けられるイベントから導かれるデータの検証された記録は、プロセス300、500の最終結果だけに基づく記録より信頼性がある。言い換えると、TEE技術を使用することによって、検証される必要のある各データに対して、そのデータ自体が検証されるだけではなく、そのデータを生成する複数のステップを含むプロセスも検証される。これにより、プロセスの1つ1つのステップが不正に変更されている確率が低くなるので、確実に、最終的なデータの信頼性が高くなる。したがって、TEE620のもとで実行される場合、符号化およびハッシュ化のプロセス300、500は、単一の時間に実行され得る。計算結果は、プロセス300、500のステップに基づいて検証可能であり、ブロックチェーンノード630a~dによって信用され使用され得る。それと比較して、TEEがないと、各ブロックチェーンノードは、符号化とハッシュ化のプロセス300または500を個別に実行する必要があり、これはブロックチェーンネットワーク全体のコンピューティングリソースの消費を大幅に増やし得る。
いくつかの実施形態では、1つまたは複数のブロックチェーンノード603a~dは、ブロックチェーンデータを信用されるノード620に送信することができる。ブロックチェーンデータは、図3の説明において論じられたような稀にアクセスされるブロックを含み得る。信用されるノード620は、データ記憶方式に基づいて1つまたは複数のソフトウェア命令を実行するために、TEEのエンクレーブコンポーネントを呼び出すことができる。たとえば、データ記憶方式は、図4の説明において論じられた構成400であり得る。稀にアクセスされるブロックの各々を符号化して、ECC符号化されたブロックを生成した後、各々のECC符号化されたブロックは、データ記憶方式に基づいて4つのデータセットへと分割され得る。データセットは、各々がブロックチェーンノード630a~dのうちの1つによって維持されることになる、Data1、Data2、Data3、およびVdata1として表現され得る。Vdata1は、誤り訂正のためのECCの冗長ビットを表すことができる。いくつかの実施形態では、信用されるノード620はまた、TEEのもとで、それぞれDhash1、Dhash2、Dhash3、およびVhash1として表現される、Data1、Data2、Data3、およびVdata1のハッシュ値を計算することができる。
いくつかの実施形態では、データセットおよびハッシュ値は、それらの対応するブロックIDによってインデクシングされ得る。たとえば、ブロックチェーンノード630aは、ブロックID100を用いて、ブロック100と関連付けられるData1、Dhash1、Dhash2、およびVhash1をインデクシングすることができる。したがって、ブロックチェーンノード630a~dは、インデクシングされたブロックIDを使用して、ハッシュ値をデータ復元のためにそれらの対応するブロックにマッピングすることができる。
符号化されたブロックの各々をデータセットData1、Data2、Data3、およびVdata1に分割した後で、信用されるノード620は、ブロックチェーンノード630a~dの各々にデータセットおよびデータ記憶方式を送信することができる。データセットを受信した後で、各ブロックチェーンノードは、1つまたは複数のデータセットを記憶し、データ記憶方式に基づいてデータセットの残りをハッシュすることができる。たとえば、ブロックチェーンノード630aは、Data1を記憶し、Data2、Data3、およびVdata1をハッシュして、Dhash2、Dhash3、およびVhash1を生成することができる。1つまたは複数のデータセットおよびハッシュ値が記憶された後で、対応するブロックおよびデータセットの残りが、ブロックチェーンノードの記憶空間を節約するために削除され得る。たとえば、ブロック100と関連付けられるData1、Dhash2、Dhash3、およびVhash1が記憶された後で、Data2、Data3、Vdata1、およびブロック100がブロックチェーンノードから削除され得る。
いくつかの実施形態では、信用されるノード620は、ブロックチェーンデータに基づいて導かれるチェックサムを生成することができる。チェックサムはまた、データ完全性を確実にするために、誤り検出のためにブロックチェーンノード630a~dに送信され得る。ブロック100のブロックチェーンデータがスマートコントラクトを実行するために必要とされることを、ブロックチェーンノード630aが決定するとき、ブロックチェーンノード630aは、信用されるノードからData2、Data3、およびVdata1を取り出し、または、ブロックチェーンノード630b、630c、および630dからデータセットを取り出すために対応するハッシュ値を送信することができる。取り出されたデータセットは次いで、対応するブロックを復元するためにData1と組み合わされ得る。
本明細書で説明されるように、処理のためにデータをTEEにロードすることによって、データの機密性および完全性を保護することができる。信用されるノード620は、検証可能な符号化されるブロックを生成し、符号化されたブロックをデータセットに分割し、データセットおよびデータ記憶方式を記憶のためにブロックチェーンノードの各々に送信することを任されてもよい。各ブロックチェーンノードは次いで、記憶空間を節約するために、データ記憶方式に基づいてデータセットの一部分を記憶することができる。TEEに対応する信用されるノードがあることで、ECCは、各ブロックチェーンノードによって別々に実行されるのではなく、信用されるノードによって一度実行されるだけでよい。したがって、ブロックチェーンネットワークの全体のコンピューティングリソースの消費を大幅に減らすことができる。
図7は、本明細書の実施形態による、ブロックチェーンネットワークにブロックチェーンノードを追加することの例700を示す。前に論じられたように、符号化およびハッシュ化のプロセスが、ブロックチェーンネットワークのストレージの消費量を実質的に減らすために実行され得る。PBFTコンセンサスプロトコルのもとでは、ブロックチェーンノードの総数がNにより表記され、障害のあるブロックチェーンノードの数がfにより表記される場合、ブロックチェーンネットワークがビザンチンフォールトトレラントであるには、N>3fを満たさなければならない。たとえば、4ノードのブロックチェーンネットワークにおいて、PBFTコンセンサスプロトコルのもとでは、ブロックチェーンネットワークによって許容可能な障害のあるノードの最大の数は1である。言い換えると、ブロックチェーンネットワークにより必要とされる正直ブロックチェーンノードの最小の数は3である。したがって、ブロックチェーンノードが3/4より大きくないコードレートで元のブロックチェーンデータ(または元のデータ)にECCを実行し(すなわち、元のデータの比率が符号化されるデータ全体の3/4より大きくない)、各々が符号化されるブロックチェーンデータ(または符号化される)の4分の1を記憶する場合、ブロックチェーンノードのうちの1つが障害のあるノードであったとしても、元のデータを復元することができる。冗長率は、ブロックチェーンネットワークのブロックチェーンノードにより記憶されている符号化されたデータおよび元のデータの総量を、元のデータのコピーの量で割ったものとして定義され得る。この例では、いずれのブロックチェーンノードも元のデータを記憶しないので、冗長率はコードレートの逆数(すなわち、符号化されたデータの量を元のデータで割ったもの)であり、これは4/3である。
図示される例700では、ブロック1から100が生成されるとき、ブロックチェーンネットワークの中に、ノード1、2、3、および4という4つのブロックチェーンノードがあると仮定される。PBFTコンセンサスプロトコルのもとでは、ブロックチェーンネットワークによって必要とされる正直ブロックチェーンノードの最小の数は3である。図3および図5の説明において論じられたような符号化とハッシュ化のプロセスを適用すると、ブロック1から100は各々、3/4という最大コードレートで符号化され得る。符号化されたブロックは各々、4つのブロックチェーンノードによって記憶されるべき元のデータの3つのデータセットおよび冗長ビットの1つのデータセットへと分割され得る。
ノード5は、ブロック101の生成の間にフルノードとしてブロックチェーンネットワークに追加される。すなわち、ノード5は、ブロック1から100の全体のコピーを記憶するが、ブロック101の生成から始まる4つの既存のブロックチェーンノードとの符号化およびハッシュ化のプロセスに参加する。ブロック101から200の生成の間にブロックチェーンネットワークが5つのブロックチェーンノードを有すると仮定すると、PBFTコンセンサスプロトコルのもとでは、ブロックチェーンネットワークによって必要とされる正直ブロックチェーンノードの最小の数は4である。したがって、ブロック101から200は各々、4/5という最大コードレートで符号化され得る。符号化されたブロックは各々、ブロックチェーンネットワークの中の5つのブロックチェーンノードによって記憶されるべき元のデータの4つのデータセットおよび冗長ビットの1つのデータセットへと分割され得る。
ノード6は、ブロック201の生成の間にフルノードとしてブロックチェーンネットワークに追加される。すなわち、ノード6は、ブロック1から200の全体のコピーを記憶するが、ブロック201の生成以降、ブロックチェーンネットワークの他のブロックチェーンノードとの符号化およびハッシュ化のプロセスに参加する。ブロックチェーンネットワークがブロック201から300の生成の間に6つのブロックチェーンノードを有すると仮定すると、PBFTコンセンサスプロトコルのもとでは、ブロックチェーンネットワークによって必要とされる正直ブロックチェーンノードの最小の数は5である。したがって、ブロック201から300は各々、5/6という最大コードレートで符号化され得る。符号化されたブロックは各々、ブロックチェーンネットワークの中の6つのブロックチェーンノードによって記憶されるべき元のデータの4つのデータセットおよび冗長ビットの2つのデータセットへと分割され得る。
ノード7は、ブロック301の生成の間にフルノードとしてブロックチェーンネットワークに追加される。すなわち、ノード7は、ブロック1から300の全体のコピーを記憶するが、ブロック301の生成以降、ブロックチェーンネットワークの他のブロックチェーンノードとの符号化およびハッシュ化のプロセスに参加する。ブロックチェーンネットワークがブロック301から400の生成の間に7つのブロックチェーンノードを有すると仮定すると、PBFTコンセンサスプロトコルのもとでは、ブロックチェーンネットワークによって必要とされる正直ブロックチェーンノードの最小の数は5である。したがって、ブロック301から400は各々、5/7という最大コードレートで符号化され得る。符号化されたブロックは各々、ブロックチェーンネットワークの中の7つのブロックチェーンノードによって記憶されるべき元のデータの5つのデータセットおよび冗長ビットの2つのデータセットへと分割され得る。
ノード8は、ブロック401の生成の間にフルノードとしてブロックチェーンネットワークに追加される。すなわち、ノード8は、ブロック1から400の全体のコピーを記憶するが、ブロック401の生成以降、ブロックチェーンネットワークの他のブロックチェーンノードとの符号化およびハッシュ化のプロセスに参加する。ブロックチェーンネットワークがブロック401から500の生成の間に8つのブロックチェーンノードを有すると仮定すると、PBFTコンセンサスプロトコルのもとでは、ブロックチェーンネットワークによって必要とされる正直ブロックチェーンノードの最小の数は6である。したがって、ブロック401から500は各々、3/4という最大コードレートで符号化され得る。符号化されたブロックは各々、ブロックチェーンネットワークの中の8つのブロックチェーンノードによって記憶されるべき元のデータの6つのデータセットおよび冗長ビットの2つのデータセットへと分割され得る。
ノード9は、ブロック501の生成の間にフルノードとしてブロックチェーンネットワークに追加される。すなわち、ノード9は、ブロック1から500の全体のコピーを記憶するが、ブロック501の生成以降、ブロックチェーンネットワークの他のブロックチェーンノードとの符号化およびハッシュ化のプロセスに参加する。
Table 1(表1)は、上の例700に従った、9つのブロックチェーンノードを伴うブロックチェーンネットワークのもとでの、ブロック1~500の冗長率およびフォールトトレランスを示す。ノード1、2、3、および4は、ECC符号化されたブロック1~100から分割されたデータセットを記憶する。ノード5、6、7、8、および9は、元のブロック1から100を記憶する。ブロック1から100を符号化するためのコードレートは3/4であるので、ノード1、2、3、および4は元のブロックの4/3個のコピーを記憶する。ノード5、6、7、8、および9は各々、元のブロックの1つのコピーを記憶する。したがって、ブロック1から100を記憶することの冗長率は、5+4/3である。フォールトトレランスは、ブロックチェーンネットワークにより許容され得る障害のあるブロックチェーンノードの比率である。ノード5、6、7、8、および9は元のブロック1から100を記憶するので、それらのうちの任意の1つが正直ブロックチェーンノードである限り、そのノードが元のブロックをブロックチェーンネットワークの他のブロックチェーンノードに提供することができる。ノード5、6、7、8、および9がすべて障害のあるブロックチェーンノードである場合、元のブロックのコピーを復元するためには、データセットを記憶するノード1、2、3、および4のうちの3つが正直ノードである必要がある。したがって、9つのブロックチェーンノードのうちの最大で6つが、障害のあるブロックチェーンノードであってもよい。フォールトトレランスは2/3である。
各ブロックチェーンノードが1つのデータセットを記憶すると仮定すると、ECC符号化されたブロックから分割されるデータセットの数がEである場合、元のブロックを記憶するブロックチェーンノードの数は、N-Eとして計算され得る。上の分析に基づいて、m個のブロックチェーンノードが冗長ビットのデータセットを記憶する場合、許容可能な最大の障害のあるブロックチェーンノードDFは、DF=m+N-Eとして表され得る。DFはf以上であるので、E-m≦N-Fであると推測され得る。すなわち、E-m≦N-F(E>0)であるとき、ECCのコードレートE-m/Eは、N個のうちF個の障害のあるノードを許容しデータ復元の安全性を確保するのに十分低い。冗長率rは、r=N-E+E/(E-m)として表され得る。
ブロック101から200に対して、ノード1、2、3、4、および5は、ECC符号化されたブロック101~200から分割されたデータセットを記憶する。ノード6、7、8、および9は元のブロックを記憶する。ブロック101から200を符号化するためのコードレートは4/5であるので、ノード1、2、3、4、および5は、元のブロックの5/4個のコピーを記憶する。ノード6、7、8、および9は各々、元のブロックの1つのコピーを記憶する。したがって、ブロック101から200を記憶することの冗長率は4+5/4である。9つのブロックチェーンノードのうちの最大で5つが、障害のあるブロックチェーンノードであってもよい。フォールトトレランスは5/9である。
ブロック201から300に対して、ノード1、2、3、4、5、および6は、ECC符号化されたブロック201~300から分割されたデータセットを記憶する。ノード7、8、および9は元のブロックを記憶する。ブロック201から300を符号化するためのコードレートは2/3であるので、ノード1、2、3、4、5、および6は、元のブロックの6/5個のコピーを記憶する。ノード7、8、および9は各々、元のブロックの1つのコピーを記憶する。したがって、ブロック201から300を記憶することの冗長率は3+6/5である。9つのブロックチェーンノードのうちの最大で4つが、障害のあるブロックチェーンノードであってもよい。フォールトトレランスは4/9である。
ブロック301から400に対して、ノード1、2、3、4、5、6、および7は、ECC符号化されたブロック301~400から分割されたデータセットを記憶する。ノード8および9は元のブロックを記憶する。ブロック301から400を符号化するためのコードレートは5/7であるので、ノード1、2、3、4、5、6、および7は、元のブロックの7/5個のコピーを記憶する。ノード8および9は各々、元のブロックの1つのコピーを記憶する。したがって、ブロック301から400を記憶することの冗長率は2+7/5である。9つのブロックチェーンノードのうちの最大で4つが、障害のあるブロックチェーンノードであってもよい。フォールトトレランスは4/9である。
ブロック401から500に対して、ノード1、2、3、4、5、6、7、および8は、ECC符号化されたブロック301~400から分割されたデータセットを記憶する。ノード9は元のブロックを記憶する。ブロック401から500を符号化するためのコードレートは3/4であるので、ノード1、2、3、4、5、6、7、および8は、元のブロックの4/3個のコピーを記憶する。ノード9は元のブロックの1つのコピーを記憶する。したがって、ブロック401から500を記憶することの冗長率は1+7/5である。9つのブロックチェーンノードのうちの最大で3つが、障害のあるブロックチェーンノードであってもよい。フォールトトレランスは1/3である。
ブロックチェーンノードがブロック1から500にECC符号化を再実行することに合意する場合、9つのブロックチェーンノードのブロックチェーンネットワークにより許容可能な障害のあるブロックチェーンノードの最大の数は2であるので、ECCの最大コードレートは7/9である。符号化およびハッシュ化のプロセスを実行した後、フォールトトレランスは2/9に下がる。一方、冗長率は9/7に下がり、これはプロセスを再実行する前の冗長率よりはるかに低い。したがって、元のブロックが少なくとも1つのブロックチェーンノードに記憶されるときに符号化とハッシュ化のプロセスを再実行すると、システムの冗長率およびストレージの消費量が実質的に減る。
いくつかの場合、ブロックチェーンノードは、それが記憶しているブロックチェーンデータが所定のデータ量の閾値を超えると決定することがある。そのような場合、ブロックチェーンノードは、ブロックチェーンネットワークの冗長率を下げるために、1つまたは複数のブロックに符号化およびハッシュ化のプロセスを再実行するための要求を他のブロックチェーンノードに対して開始することができる。いくつかの場合、符号化およびハッシュ化のプロセスを再実行するための要求は、ブロックチェーンネットワークの冗長率が所定の閾値より大きいと決定したことなどに応答して、ブロックチェーンネットワークの外側の信用されるノードによって開始され得る。たとえば、例700に図示されるような9つのブロックチェーンノードを伴うブロックチェーンネットワークに対して、PBFTプロトコルのもとでの最小の冗長率は9/7である。信用されるノードは、1つまたは複数のブロックの冗長率が2を超えるとき、要求を開始することができる。いくつかの実施形態では、ブロックは、それらの冗長率に基づいて符号化およびハッシュ化のプロセスを再実行するものとのして選択され得る。冗長率の高いブロックは、ストレージの節約がより大きいので、より高い優先度で選択され得る。
符号化およびハッシュ化のプロセスを再実行するための要求は、許容可能な障害のあるブロックチェーンノードの最大の数(すなわち、f/(3f+1))を考慮するECCを実行するための最大コードレートを含み得る。要求は、1つまたは複数のコーディングされたブロックの各々のコーディングされたブロックを複数のデータセットに分割し、複数のデータセットをブロックチェーンネットワークのブロックチェーンノードに割り当てる命令も含み得る。たとえば、命令は、各々の符号化されたブロックが9つのデータセットへと分割されることを命令することができ、各データセットは9つのブロックチェーンノードのうちの1つに割り当てられることになる。いくつかの場合、図3から図5の説明において論じられるように、命令はデータ記憶方式によって提供される。
要求がブロックチェーンノードによって開始される場合、ブロックチェーンネットワークは、要求に含まれる命令に従い、PBFTアルゴリズムの3段階のプロセス(前準備段階、準備段階、およびコミット段階)を経て、re-ECCのコンセンサスに達することができる。要求を開始するブロックチェーンノードは、PBFTアルゴリズムを実行するための主要ブロックチェーンノードとして活動することができる。要求を受信する任意のブロックチェーンノードが、主要ブロックチェーンノードから1つまたは複数のブロックを特定して取り出すことができる。
ブロックチェーンノードはまた、要求がプルーフオブオーソリティを伴う信用されるノードから受信される場合、命令に従ってECCを直接再実行することができる。そのような場合、要求は、1つまたは複数のブロックを記憶する少なくとも1つのブロックチェーンノードを特定する識別情報も含み得る。要求を受信するブロックチェーンノードは次いで、要求に基づいて1つまたは複数のブロックを記憶するブロックチェーンネットワークの少なくとも1つのブロックチェーンノードを特定し、少なくとも1つのブロックチェーンノードのうちの1つから1つまたは複数のブロックを取り出すことができる。
1つまたは複数のブロックを取り出すために、ブロックチェーンノードは、1つまたは複数のブロックのハッシュ値を少なくとも1つのブロックチェーンノードのうちの1つに送信することができる。いくつかの例では、ハッシュ値はブロックチェーンのブロックヘッダに記憶される。1つまたは複数のブロックを受信した後で、ブロックチェーンノードは、受信された1つまたは複数のブロックのハッシュ値を、送信した対応するハッシュ値と比較することによって、受信された1つまたは複数のブロックが真正であるかどうかを決定することができる。ハッシュ値が同じである場合、受信された1つまたは複数のブロックは真正であると決定され得る。それ以外の場合、ブロックチェーンノードは、1つまたは複数のブロックが障害のあるノードとして受信されることをブロックチェーンノードに報告することができる。
ブロックチェーンノードは次いで、要求において与えられるコードレートに基づいて1つまたは複数のブロックのECCを実行して、1つまたは複数のコーディングされたブロックを生成することができる。図6に示される例では、1つまたは複数のコーディングされたブロックの各々のコーディングされたブロックに対して、ブロックチェーンノードは、命令に従って、コーディングされたブロックを9つのデータセットへと分割し、命令に従って、ブロックチェーンノードに割り当てられた9つのデータセットのうちの少なくとも1つを記憶することができる。ブロックチェーンノードは次いで、複数のデータセットのうちの残りの8つをハッシュして残りの8つのデータセットに対応するハッシュ値を生成し、ハッシュ値を記憶し、1つまたは複数のブロックを削除することができる。その後、1つまたは複数のブロックのための符号化とハッシュ化のプロセスは完了する。
符号化とハッシュ化のプロセスがすべての利用可能なブロックに対して完了した後で、ブロックチェーンネットワークの冗長率が所定のデータ記憶閾値をまだ超えている場合、またはブロックチェーンノードのストレージの消費量が所定のデータ記憶閾値より多い場合、ブロックチェーンノードは、ブロックチェーンネットワークに追加される新しいブロックチェーンノードに応答して、符号化とハッシュ化のプロセスの別のラウンドを惹起するように他のブロックチェーンノードに通知することができる。たとえば、ノード9が追加される前に、8つのブロックチェーンノードがブロック1から400に対して符号化とハッシュ化のプロセスを実行し、ブロックチェーンノードのストレージの消費量がノード8のストレージ容量の90%をまだ超えている場合、ノード8は、ノード8が追加された後で生成されたブロックに対して符号化とハッシュ化のプロセスの別のラウンドを実行するために、通知をノード1から7に送信することができる。
図8は、本明細書の実施形態による、コンセンサスプロセス800の例を示す。この例では、コンセンサスプロセス800は、ブロックチェーンネットワークの信用されるノード810および4つのブロックチェーンノード802、804、806、および808によって実行される。図7の説明で論じられたように、新しいフルブロックチェーンノードがブロックチェーンネットワークに追加されると、フルノードは符号化とハッシュ化のプロセスに参加していないので、フルノードはECC符号化されたブロックから分割されたデータセットの代わりに元のブロックを記憶する。フルノードによって記憶されるブロックの冗長率は、より高いコードレートを用いるブロックのre-ECCにより低減され得る。
しかしながら、各ブロックチェーンノード上でre-ECCを実行すると、ブロックチェーンネットワークの計算負荷が大幅に増え得る。図6の説明において論じられたように、ブロックチェーンデータは、信用されるノード810のTEEにロードされ得る。信用されるノード810は、検証可能な符号化されたブロックを生成し、符号化されたブロックをデータセットに分割し、データセットおよびデータ記憶方式を記憶のために各ブロックチェーンノードに送信することができる。TEEに対応する信用されるノードがあることで、ECCは、各ブロックチェーンノードによって別々に実行されるのではなく、一度実行されるだけでよい。ブロックチェーンネットワークの全体の計算リソースの消費量を減らすことができる。
いくつかの実施形態では、ブロックチェーンノードは、1つまたは複数のブロックに対して符号化とハッシュ化のプロセスを再実行するための要求を信用されるノード810に送信することができる。要求を受信した後で、信用されるノード810は、1つまたは複数のブロックを記憶するブロックチェーンネットワークのブロックチェーンノード802、804、806、または808を特定することができる。ブロックチェーンノードは、要求を送信したのと同じノードであってもよく、または1つまたは複数のブロックを記憶する異なるブロックチェーンノードであってもよい。ブロックチェーンノード802が1つまたは複数のブロックを記憶することを信用されるノード810が特定すると仮定すると、信用されるノード810は、ブロックチェーンノード802から1つまたは複数のブロックを取り出すことができる。1つまたは複数のブロックを取り出すために、信用されるノード810は、1つまたは複数のブロックに対応するハッシュ値をブロックチェーンノード802に送信することができる。ブロックチェーンノード802は、ハッシュ値に対応する1つまたは複数のブロックを特定し、それらを信用されるノード810に送信することができる。
新しいブロックチェーンノードがブロックチェーンネットワークに追加されると、信用されるノード810は、記憶の最適化のために、新しいデータ記憶方式をブロックチェーンネットワークに対して実施することができる。たとえば、図4の説明において論じられたようなデータ記憶方式を採用する4ノードのブロックチェーンネットワークに対して、最大のECCコードレートは3/4である。新しいフルノードがブロックチェーンネットワークに追加されると、信用されるノード810は、5つのブロックチェーンノードすべてに関わる新しいデータ記憶方式を実施することができる。5ノードのブロックチェーンネットワークは、1つの障害のあるブロックチェーンノードしか許容できないので、記憶効率を高めるために、最大のECCコードレートを4/5に上げることができる。
したがって、新しいデータ記憶方式に基づいて、信用されるノード810は、よりコードレートの高いECCを使用して1つまたは複数のブロックを符号化することができる。1つまたは複数のブロックの各々に対して、信用されるノード810は次いで、ブロックを複数のデータセットに分割し、複数のデータセットのハッシュ値を計算することができる。
新しいデータ記憶方式を実施するために、信用されるノード810は、コンセンサスプロセス800において、ブロックチェーンノード802、804、806、および808と関わることができる。ブロックチェーンノードが新しいデータ記憶方式に合意することを信用されるノード810が確認することができ、その結果、新しいデータ記憶方式のもとでのデータセットを使用して、ブロックチェーンノード802、804、806、および808により記憶されている既存のデータを置き換え、記憶空間を節約することができるように、コンセンサスプロセス800が実行される。
コンセンサスプロセス800は、要求段階812、応答段階814、およびコミット段階816を含む、3段階のプロセスであり得る。コンセンサスプロセス800の後で、新しいデータ記憶方式は、信用されるノード810によって有効にされ、ブロックチェーンノード802、804、806、および808によって採用され得る。ブロックチェーンノード802、804、806、および808は、新しいデータ記憶方式に基づいてブロックチェーンデータを記憶または復元することができる。本明細書では、コンセンサスプロセス800を説明するために、PBFTコンセンサスプロトコルが使用される。追加または代替として、Proof of Work(PoW)、Proof of Stake(PoS)、およびDelegated Proof of Stake(DPoS)などの他のコンセンサスプロトコルが、本明細書の実施形態に従ってコンセンサスに達するために使用されてもよい。
要求段階812において、信用されるノード810は、ブロックチェーンノード802、804、806、および808の各々に要求を送信することができる。いくつかの実施形態では、要求は、ブロックチェーンノードの各々によって記憶されるものとして割り当てられるデータを含み得る。割り当てられるデータは、複数のデータセット、ハッシュ値、または、複数のデータセットとブロックチェーンノードの各々との間の対応付けを提供するインデックスのうちの少なくとも1つを含み得る。割り当てられたデータは、記憶空間を節約するために、ブロックチェーンノードにより現在記憶されている1つまたは複数のブロックと関連付けられるデータを置き換えることが意図される。いくつかの例では、インデックスは、図4に示されるデータ管理方式400に従った対応付けなどの、複数のデータセットとブロックチェーンノード802、804、806、および808との間の対応付けを示すことができる。インデックスは、ブロックチェーンノード802がData1を記憶していること、ブロックチェーンノード804がData2を記憶していること、ブロックチェーンノード806がData3を記憶していること、およびブロックチェーンノード808がVdata1を記憶していることを提供することができる。いくつかの例では、要求は、信用されるノード810の識別情報を受信者が検証するための、信用されるノード810のデジタル署名も含み得る。
ブロックチェーンノード802、804、806、および808が要求を受信した後で、それらの各々が、応答段階814において要求に個別に応答することができる。応答メッセージは、それぞれのブロックチェーンノードが新しいデータ記憶方式を受信して受け入れたことの指示を含み得る。いくつかの実施形態では、応答メッセージは、信用されるノード810によって同期して受信されないことがある。たとえば、ブロックチェーンノードの一部は、障害があることがあり、ビジーであることがあり、またはブロックチェーンネットワークから切断されていることがあり、それにより、応答メッセージが遅延することがあり、または入手不可能であることがある。したがって、コンセンサスに達するのに十分な応答メッセージが受信されたことの確認を、ブロックチェーンノード802、804、806、および808が信用されるノード810から受信する前に、それらは、割り当てられたデータセット、ハッシュ値、およびインデックスを、既存のデータを削除することなく記憶することができる。より速い同期を達成するために、各ブロックチェーンノードは、その秘密鍵を使用して応答メッセージにデジタル署名することができる。したがって、各応答メッセージには、その送信ノードのデジタル署名がある。送信ノードが接続されていない、または別様に利用不可能である場合であっても、信用されるノード810は、応答メッセージを検証し、追加の遅延なしでコンセンサスプロセス800を続けることができる。
コンセンサスプロセス800は、信用されるノード810がブロックチェーンノードからN-DF=E-m個の応答メッセージを受信する場合、コミット段階816に入ることができる。E-m個の応答メッセージを受信することによって、信用されるノード810は、ブロックチェーンノード802、804、806、および808が信用されるノード810により提供される新しいデータ記憶方式を採用するというコンセンサスに達していると決定することができる。したがって、信用されるノード810は、新しいデータ記憶方式を有効にするために、コミットメッセージをブロックチェーンノード802、804、806、および808の各々に送信することができる。コミットメッセージを受信した後で、ブロックチェーンノード802、804、806、および808は、いくつかの実施形態では、ストレージの消費量を減らすために、ブロックに対応する既存のデータを削除することができる。
いくつかの実施形態では、信用されるノード810は、ブロックチェーンノードが脱落したこと、またはブロックチェーンネットワークから削除されたことに応答して、ECCおよびコンセンサスプロセス800を再実行する。たとえば、複数のブロックの各々に対して、信用されるノード810は、ECC符号化されるブロックの少なくとも一部分を記憶するブロックチェーンノードの数Eと、ECC符号化されたブロックの冗長ビットの少なくとも一部分を記憶するブロックチェーンノードの数mとを決定することができる。信用されるノード810はまた、ブロックチェーンネットワークのブロックチェーンノードの総数Nと、ブロックチェーンネットワークにより許容可能な障害のあるブロックチェーンノードの最大の数fとを決定することができる。信用されるノード810は次いで、E-m>N-Fであると決定する場合、(N-f)/Nというコードレートに基づいて複数のブロックのECCを再実行することができる。
いくつかの実施形態では、信用されるノード810は、計算リソースの利用率が所定の値以下であるとき、ECCを実行することができる。たとえば、ECCは、信用されるノード810のCPU使用率が50%未満であるときに実行され得る。
いくつかの実施形態では、ブロックチェーンネットワークが複数のフルノードを含むとき、フルノードによって記憶されるブロックの冗長率は比較的高いことがあり、それは、フルノードがECC符号化されたブロックから分割されたデータセットの記憶を共有していないからである。いくつかの場合、1つ1つのブロックのre-ECCは、計算リソースを大量に必要とすることがある。そのような場合、ブロックの優先値を決定し、より大きなストレージの節約をもたらし得るブロックに対するre-ECCを優先することが、有益であり得る。
前に説明されたように、Nノードのブロックチェーンネットワークに記憶されているブロックの冗長率は、r=N-E+E/(E-m)として表され得る。ブロックの優先値は、N-r=E-E/(E-m)として定義され得る。優先値が低くなるほど、ブロックのre-ECC優先度は高くなる。言い換えると、より優先値の低いブロックは、re-ECC動作がブロックに対して実行された後、冗長率の控除がより大きくなり得る。したがって、ブロックチェーンネットワークは、優先値が最小のブロックに対するre-ECCを優先することができる。re-ECCは、最大のストレージの節約を達成するために、最大の許容可能なコードレート(N-f)/Nに基づき得る。
いくつかの実施形態では、信用されるノード810は、優先インデックスにおいて優先値を維持することができる。優先インデックスは、各ブロックのブロックIDと、その対応する優先値との対応付けを提供することができる。ブロックのre-ECCの後、優先インデックスは、re-ECCコードレートに基づいて計算された新しい優先値に基づいて更新され得る。
re-ECCおよびECC符号化されたブロックの記憶の共有の後で、ブロックチェーンノードが記憶しているブロックチェーンデータが所定のデータ記憶閾値を超えるサイズをまだ有していることをブロックチェーンノードが決定する場合、ブロックチェーンノードは、ECCを再実行するために追加のブロックを追加するための通知を信用されるノード810に送信することができる。通知を受信した後で、信用されるノード810は、優先インデックスの優先値に基づいて、ECCを再実行するために追加のブロックを選択することができる。
図9は、本明細書の実施形態に従って実行され得るプロセス900の例を示す。便宜的に、プロセス900は、1つまたは複数の位置に位置するコンピューティングデバイスのTEEまたは1つまたは複数のコンピュータのシステムにおいて実行され、本明細書に従って適切にプログラムされるものとして説明される。たとえば、適切にプログラムされた、コンピューティングシステム、たとえば図1のコンピューティングシステム106、108の中のコンピューティングデバイスは、プロセス900を実行することができる。
902において、コンピューティングデバイスは、ブロックチェーンネットワークのブロックチェーンノードから複数のブロックを取り出す。いくつかの場合、複数のブロックを取り出すことは、あるブロックチェーンノードがブロックチェーンネットワークから脱落したことに応答して実行される。
904において、コンピューティングデバイスは、複数の符号化されたブロックを生成するためにECCを使用して複数のブロックを符号化する。いくつかの場合、複数のデータセットの数は、ブロックチェーンネットワークのブロックチェーンノードの数に等しく、複数の符号化されたブロックのコードレートは、ブロックチェーンネットワークにより必要とされる正直ブロックチェーンノードの最小の数をブロックチェーンノードの総数で割ったものに等しい。
いくつかの場合、ブロックチェーンノードが脱落した後で複数のブロックの各ブロックに対して、コンピューティングデバイスはさらに、ブロックのECC符号化されたバージョンの少なくとも一部を記憶するブロックチェーンの度の第1の数、およびブロックのECC符号化されたバージョンの冗長ビットの少なくとも一部を記憶するブロックチェーンノードの第2の数、ブロックチェーンネットワークのブロックチェーンノードの総数およびブロックチェーンネットワークにより許容可能な障害のあるブロックチェーンノードの最大の数、ならびに、第1の数と第2の数との間の第1の差が総数と最大の数との間の第2の差以下であるかどうかを決定する。
いくつかの場合、ECCは、コンピューティングデバイスの計算リソースの利用率が所定の値以下であるときに実行される。いくつかの場合、ECCは、複数のブロックに冗長ビットを追加することによって実行されるイレージャコーディングである。
906において、複数のブロックの各々に対して、コンピューティングデバイスは、符号化されたブロックを複数のデータセットへと分割し、複数のデータセットは、情報ビットの1つまたは複数のデータセットおよび冗長ビットの1つまたは複数のデータセットを含む。いくつかの場合、必要とされる正直ブロックチェーンノードの最小の数は、PBFTコンセンサスプロトコルに基づいて決定される。
908において、コンピューティングデバイスは、複数のデータセットのハッシュ値を計算する。910において、コンピューティングデバイスは、ブロックチェーンネットワークの複数のブロックチェーンノードの各々に、複数のデータセット、ハッシュ値、および複数のブロックチェーンノードへの複数のデータセットの割当てを提供するデータ記憶方式のうちの少なくとも1つを含む要求を送信する。
912において、コンピューティングデバイスは、少なくとも情報ビットの1つまたは複数のデータセットの数に等しい数のブロックチェーンノードから要求を受け入れるための応答を受信する。914において、コンピューティングデバイスは、複数のブロックチェーンノードの各々に、データ記憶方式を採用するための通知を送信する。いくつかの場合、データ記憶方式を採用することはさらに、データ記憶方式において提供される割当てに基づいて複数のデータセットのうちの少なくとも1つを記憶することと、複数のブロックと関連付けられる既存のブロックチェーンデータを削除することとを含む。
図10は、本明細書の実施形態による、装置1000のモジュールの例の図である。装置1000は、ブロックチェーンデータを処理するように構成されるTEEをホストするコンピューティングデバイスの実施形態の例であり得る。装置1000は、上で説明された実施形態に対応することができ、装置1000は、ブロックチェーンネットワークのブロックチェーンノードから複数のブロックを取り出す受信モジュール1002と、複数の符号化されたブロックを生成するためにECCを使用して複数のブロックを符号化する符号化モジュール1004と、符号化されたブロックを複数のデータセットへと分割する分割モジュール1006であって、複数のデータセットが情報ビットの1つまたは複数のデータセットおよび冗長ビットの1つまたは複数のデータセットを含む、分割モジュール1006と、複数のデータセットのハッシュ値を計算する計算モジュール1008と、ブロックチェーンネットワークの複数のブロックチェーンノードの各々に、複数のデータセット、ハッシュ値、および複数のブロックチェーンノードへの複数のデータセットの割当てを提供するデータ記憶方式のうちの少なくとも1つを含む要求を送信する送信モジュール1010と、少なくとも情報ビットの1つまたは複数のデータセットの数に等しい数のブロックチェーンノードから要求を受け入れるための応答を受信する受信モジュール1002と、複数のブロックチェーンノードの各々に、データ記憶方式を採用するための通知を送信する送信モジュール1010とを含む。
いくつかの実施形態では、データ記憶方式を採用することはさらに、データ記憶方式において提供される割当てに基づいて複数のデータセットのうちの少なくとも1つを記憶することと、複数のブロックと関連付けられる既存のブロックチェーンデータを削除することとを含む。
いくつかの実施形態では、複数のデータセットの数は、ブロックチェーンネットワークのブロックチェーンノードの数に等しく、複数の符号化されたブロックのコードレートは、ブロックチェーンネットワークにより必要とされる正直ブロックチェーンノードの最小の数をブロックチェーンノードの総数で割ったものに等しい。情報ビットの1つまたは複数のデータセットの数は、ブロックチェーンネットワークにより必要とされる正直ブロックチェーンノードの最小の数に等しい。
いくつかの実施形態では、複数のブロックを取り出すことは、ブロックチェーンノードがブロックチェーンネットワークから脱落したことに応答して実行される。
いくつかの実施形態では、装置1000はさらに、ブロックのECC符号化されたバージョンの少なくとも一部を記憶するブロックチェーンノードの第1の数、およびブロックのECC符号化されたバージョンの冗長ビットの少なくとも一部を記憶するブロックチェーンノードの第2の数、ブロックチェーンネットワークのブロックチェーンノードの総数およびブロックチェーンネットワークにより許容可能な障害のあるブロックチェーンノードの最大の数、ならびに、第1の数と第2の数との間の第1の差が総数と最大の数との間の第2の差以下であるかどうかを決定する決定サブモジュールを備える。
いくつかの実施形態では、複数のブロックを符号化することは、第1の差が第2の差以下であると決定したことに応答して実行される。
いくつかの実施形態では、ECCは、コンピューティングデバイスの計算リソースの利用率が所定の値以下であるときに実行される。
いくつかの実施形態では、ECCは、冗長ビットを複数のブロックに追加することによって実行されるイレージャコーディングである。
いくつかの実施形態では、必要とされる正直ブロックチェーンノードの最小の数は、PBFTコンセンサスプロトコルに基づいて決定される。
前述の実施形態において示されたシステム、装置、モジュール、またはユニットは、コンピュータチップもしくはエンティティを使用することによって実装されてもよく、または、ある機能を有する製品を使用することによって実装されてもよい。典型的な実施形態のデバイスはコンピュータであり、このコンピュータは、パーソナルコンピュータ、ラップトップコンピュータ、携帯電話、カメラ電話、スマートフォン、携帯情報端末、メディアプレーヤ、ナビゲーションデバイス、電子メール送受信デバイス、ゲームコンソール、タブレットコンピュータ、ウェアラブルデバイス、またはこれらのデバイスの任意の組合せであってもよい。
装置の中の各モジュールの機能および役割の実施形態のプロセスについては、前述の方法における対応するステップの実施形態のプロセスを参照することができる。簡潔にするために、詳細はここでは省略される。
装置の実施形態は基本的に方法の実施形態に対応するので、関連する部分については、方法の実施形態の関連する説明を参照することができる。前に説明された装置の実施形態は例にすぎない。別々の部分として説明されたモジュールは物理的に別れていてもいなくてもよく、モジュールとして表示される部分は、物理的なモジュールであってもなくてもよく、1つの場所に位置していてもよく、またはいくつかのネットワークモジュールに分散していてもよい。モジュールの一部またはすべてが、本明細書の解決法の目的を達成するために、実際の要求に基づいて選択され得る。当業者は、創造的な努力なしで本出願の実施形態を理解して実施することができる。
図10を再び参照すると、図10は、内部機能モジュールおよびブロックチェーンノードの構造を示すものとして解釈され得る。実行主体は本質的に電子デバイスであってもよく、この電子デバイスは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサの実行可能命令を記憶するように構成される1つまたは複数のコンピュータ可読メモリとを含む。いくつかの実施形態では、1つまたは複数のコンピュータ可読メモリは、1つまたは複数のプロセッサに結合され、本明細書で説明されるようなアルゴリズム、方法、機能、プロセス、フロー、および手順を実行するように1つまたは複数のプロセッサによって実行可能なプログラミング命令を記憶している。本明細書はまた、1つまたは複数のプロセッサに結合され、1つまたは複数のプロセッサによって実行されると1つまたは複数のプロセッサに本明細書で提供された方法の実施形態に従った動作を実行させる命令を記憶した、1つまたは複数の非一時的コンピュータ可読記憶媒体を提供する。
本明細書はさらに、本明細書で提供される方法を実施するためのシステムを提供する。このシステムは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサによって実行されると1つまたは複数のプロセッサに本明細書で提供される方法の実施形態に従った動作を実行させる命令を記憶した1つまたは複数のプロセッサに結合されたコンピュータ可読記憶媒体とを含む。
本主題の実施形態ならびに本明細書で説明される活動および動作は、デジタル電子回路において、有形に具現化されたコンピュータソフトウェアもしくはファームウェアにおいて、本明細書で開示された構造とその構造的な均等物を含むコンピュータハードウェアにおいて、または、それらの1つまたは複数の組合せにおいて実施され得る。本明細書で説明される主題の実施形態は、データ処理装置による実行のために、またはデータ処理装置の動作を制御するために、コンピュータプログラム担体に符号化された1つまたは複数のコンピュータプログラム、たとえばコンピュータプログラム命令の1つまたは複数のモジュールとして実装され得る。たとえば、コンピュータプログラム担体は、命令が符号化または記憶されている1つまたは複数のコンピュータ可読記憶媒体を含み得る。担体は、磁気ディスク、磁気光学ディスク、もしくは光学ディスク、ソリッドステートドライブ、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、または他のタイプの媒体などの、有形な非一時的コンピュータ可読媒体であり得る。代替または追加として、担体は、人工的に生成された伝播信号、たとえば、データ処理装置による実行のための適切な受信機装置への送信のために情報を符号化するために生成される、機械で生成された電気信号、光学信号、または電磁信号であり得る。コンピュータ記憶媒体は、機械可読記憶デバイス、機械可読記憶基板、ランダムもしくはシリアルアクセスメモリデバイス、またはそれらの1つまたは複数の組合せであってもよく、またはその一部であってもよい。コンピュータ記憶媒体は伝播信号ではない。
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリ、モジュール、ソフトウェアモジュール、エンジン、スクリプト、もしくはコードと呼ばれることも、または表現されることもあるコンピュータプログラムは、コンパイル型言語もしくはインタプリタ型言語、または宣言型言語もしくは手続型言語を含む、任意の形式のプログラミング言語で書かれてもよく、スタンドアロンプログラムとして、または、モジュール、コンポーネント、エンジン、サブルーチン、もしくはコンピューティング環境において実行するのに適した他のユニットとしてを含めて、任意の形式で展開されてもよく、この環境は、1つまたは複数の位置においてデータ通信ネットワークにより相互接続される1つまたは複数のコンピュータを含み得る。
コンピュータプログラムは、必須ではないが、ファイルシステムの中のファイルに対応し得る。コンピュータプログラムは、他のプログラムまたはデータを保持するファイルの一部分に記憶されてもよく、たとえば、1つまたは複数のスクリプトが、マークアップ言語ドキュメントに、対象のプログラムに専用の単一のファイルに、または複数の協調するファイル、たとえば1つまたは複数のモジュール、サブプログラム、もしくはコードの部分を記憶するファイルに記憶される。
コンピュータプログラムの実行のためのプロセッサは、例として、汎用マイクロプロセッサと専用マイクロプロセッサの両方、および任意の種類のデジタルコンピュータの任意の1つまたは複数のプロセッサを含む。一般に、プロセッサは、実行のためのコンピュータプログラムの命令、ならびにプロセッサに結合された非一時的コンピュータ可読媒体からのデータを受信する。
「データ処理装置」という用語は、例として、プログラム可能プロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するためのすべての種類の装置、デバイス、および機械を包含する。データ処理装置は、専用の論理回路、たとえばFPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)、またはGPU(グラフィクス処理装置)を含み得る。装置はまた、ハードウェアに加えて、コンピュータプログラムのための実行環境を作成するコード、たとえば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらの1つまたは複数の組合せを構成するコードを含み得る。
本明細書で説明されるプロセスおよび論理フローは、1つまたは複数のコンピュータまたはプロセッサが、入力データを操作して出力を生成することによって動作をするように1つまたは複数のコンピュータプログラムを実行することにより、実行され得る。プロセスおよび論理フローはまた、専用の論理回路、たとえばFPGA、ASIC、もしくはGPUによって、または、専用の論理回路と1つまたは複数のプログラムされたコンピュータの組合せによって実行され得る。
コンピュータプログラムの実行に適したコンピュータは、汎用マイクロプロセッサもしくは専用マイクロプロセッサもしくは両方に、または、任意の他の種類の中央処理装置に基づき得る。一般に、中央処理装置は、読取り専用メモリまたはランダムアクセスメモリまたは両方から、命令およびデータを受信する。コンピュータの要素は、命令を実行するための中央処理装置と、命令とデータを記憶するための1つまたは複数のメモリデバイスとを含み得る。中央処理装置およびメモリは、専用の論理回路によって補助され、またはそれに組み込まれ得る。
一般に、コンピュータはまた、1つまたは複数の記憶デバイスを含み、または、それからデータを受信し、もしくはそれにデータを移送するように動作可能に結合される。記憶デバイスは、たとえば、磁気ディスク、磁気光学ディスク、もしくは光学ディスク、ソリッドステートドライブ、または、任意の他のタイプの非一時的なコンピュータ可読媒体であり得る。しかしながら、コンピュータはそのようなデバイスを有する必要はない。したがって、コンピュータは、ローカルの、および/またはリモートの1つまたは複数のメモリなどの、1つまたは複数の記憶デバイスに結合され得る。たとえば、コンピュータは、コンピュータの必須のコンポーネントである1つまたは複数のローカルメモリを含んでもよく、または、コンピュータは、クラウドネットワークの中の1つまたは複数のリモートメモリに結合されてもよい。その上、コンピュータは、別のデバイス、たとえばいくつか挙げると、携帯電話、携帯情報端末(PDA)、モバイルオーディオもしくはビデオプレーヤ、ゲームコンソール、全地球測位システム(GPS)受信機、またはポータブル記憶デバイス、たとえばユニバーサルシリアルバス(USB)フラッシュドライブに埋め込まれ得る。
コンポーネントは、直接、または1つまたは複数の中間コンポーネントを介してのいずれかで、電気的にまたは光学的に互いに結合されるなどして交換可能であることによって、互いに「結合され」得る。コンポーネントは、コンポーネントの一方が他方に統合される場合にも、互いに「結合され」得る。たとえば、プロセッサに統合される記憶コンポーネント(たとえば、L2キャッシュコンポーネント)は、プロセッサに「結合される」。
ユーザとの対話を実現するために、本明細書で説明される主題の実施形態は、情報をユーザに表示するための表示デバイス、たとえばLCD(液晶ディスプレイ)モニタと、ユーザがそれによって入力をコンピュータに与えることができる入力デバイス、たとえば、キーボードおよびポインティングデバイス、たとえばマウス、トラックボール、もしくはタッチパッドを有するコンピュータ上で実装されてもよく、またはそれと通信するように構成されてもよい。他の種類のデバイスも、ユーザとの対話を可能にするために使用され得る。たとえば、ユーザに与えられるフィードバックは、任意の形式の感覚フィードバック、たとえば視覚フィードバック、聴覚フィードバック、または触覚フィードバックであってもよく、ユーザからの入力は、音声入力、発話入力、または触覚入力を含む、任意の形式で受け取られてもよい。加えて、コンピュータは、ユーザによって使用されるデバイスに文書を送信し、それから文書を受信することによって、たとえば、ユーザのデバイス上のウェブブラウザに、そのウェブブラウザから受信された要求に応答してウェブページを送信することによって、または、ユーザデバイス、たとえばスマートフォンもしくは電子タブレット上で実行されるアプリと対話することによって、ユーザと対話することができる。また、コンピュータは、テキストメッセージまたは他の形式のメッセージを、個人デバイス、たとえばメッセージングアプリケーションを実行しているスマートフォンに送信し、返事としてユーザから応答メッセージを受信することによって、ユーザと対話することができる。
本明細書は、システム、装置、およびコンピュータプログラムコンポーネントに関連して「ように構成される」という用語を使用する。1つまたは複数のコンピュータのシステムが特定の動作または活動を実行するように構成されるということは、動作中にシステムにその動作または活動を実行させるソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せが、システムにインストールされていることを意味する。1つまたは複数のコンピュータプログラムが特定の動作または活動を実行するように構成されることは、データ処理装置によって実行されると、装置にその動作または活動を実行させる命令を1つまたは複数のプログラムが含むことを意味する。専用の論理回路が特定の動作または活動を実行するように構成されることは、回路がその動作または活動を実行する電子論理回路を有することを意味する。
本明細書は多くの特定の実施形態の詳細を含むが、これらは、特許請求の範囲自体により定義される特許請求されるものの範囲に対する限定として解釈されるべきではなく、むしろ、特定の実施形態に特有であり得る特徴の説明として解釈されるべきである。別々の実施形態の文脈で本明細書において説明されるいくつかの特徴はまた、単一の実施形態において組合せで実現され得る。逆に、単一の実施形態の文脈で説明される様々な特徴が、複数の実施形態において別々に、または任意の適切な部分組合せで実現されてもよい。その上、特徴は、何らかの組合せで活動するものとして上で説明されることがあり、そのように最初に特許請求されることすらあるが、特許請求される組合せからの1つまたは複数の特徴は、場合によってはその組合せから削除されてもよく、特許請求の範囲は、部分組合せまたは部分組合せの変形を対象とし得る。
同様に、動作が特定の順序で図面において図示され特許請求の範囲において記載されるが、これは、望ましい結果を達成するために、そのような動作が示される特定の順序または逐次的な順序で実行されること、またはすべての示される動作が実行されることを必要とするものとして理解されるべきではない。いくつかの状況では、マルチタスキングおよび並列処理が有利であり得る。その上、上で説明された実施形態における様々なシステムモジュールとコンポーネントの分離は、すべての実施形態においてそのような分離を必要とするものとして理解されるべきではなく、説明されるプログラムコンポーネントとシステムは一般に、単一のソフトウェア製品において一緒に統合されてもよく、複数のソフトウェア製品へとパッケージングされてもよいことが理解されるべきである。
本主題の特定の実施形態が説明されてきた。他の実施形態が、以下の特許請求の範囲内にある。たとえば、特許請求の範囲において記載される活動は、異なる順序で実行されてもよく、それでも望ましい結果を達成することができる。一例として、添付の図面に示されるプロセスは、望ましい結果を達成するために、示される特定の順序または逐次的な順序を必ずしも必要としない。場合によっては、マルチタスキングおよび並列処理が有利であり得る。