(58)【調査した分野】(Int.Cl.,DB名)
リレーシステムコントローラは、前記マルチノードクラスタ内の前記複数のリレーシステムノードに状態クエリを周期的に送信して、前記複数のリレーシステムノードから状態応答を受信し、前記リレーシステムコントローラは、所定の時間ウィンドウ内に前記リレーシステムノードから状態応答を受信した場合には、可用なものとして前記マルチノードクラスタ内のリレーシステムノードの状態を記録し、前記リレーシステムコントローラは、前記所定の時間ウィンドウ内に前記リレーシステムノードから状態応答を受信しなかった場合には、非可用なものとして前記マルチノードクラスタのリレーシステムノードの前記状態を記録する、請求項1に記載の方法。
前記リレーシステムスマートコントラクトは、前記リレーシステムコントローラを介して、前記マルチノードクラスタに前記要求を送信し、前記リレーシステムコントローラは、可用な状態を有している前記マルチノードクラスタ内の前記リレーシステムノードを選択し、前記要求を前記リレーシステムノードに転送する、請求項2に記載の方法。
リレーシステムコントローラは、前記マルチノードクラスタ内の前記複数のリレーシステムノードに状態クエリを周期的に送信して、前記複数のリレーシステムノードから状態応答を受信し、前記リレーシステムコントローラは、所定の時間ウィンドウ内に前記リレーシステムノードから状態応答を受信した場合には、可用なものとして前記マルチノードクラスタ内のリレーシステムノードの状態を記録し、前記リレーシステムコントローラは、前記所定の時間ウィンドウ内に前記リレーシステムノードから状態応答を受信しなかった場合には、非可用なものとして前記マルチノードクラスタのリレーシステムノードの前記状態を記録する、請求項6に記載の非一時的コンピュータ可読記憶媒体。
前記リレーシステムスマートコントラクトは、前記リレーシステムコントローラを介して、前記マルチノードクラスタに前記要求を送信し、前記リレーシステムコントローラは、可用な状態を有している前記マルチノードクラスタ内の前記リレーシステムノードを選択し、前記要求を前記リレーシステムノードに転送する、請求項7に記載の非一時的コンピュータ可読記憶媒体。
リレーシステムコントローラは、前記マルチノードクラスタ内の前記複数のリレーシステムノードに状態クエリを周期的に送信して、前記複数のリレーシステムノードから状態応答を受信し、前記リレーシステムコントローラは、所定の時間ウィンドウ内に前記リレーシステムノードから状態応答を受信した場合には、可用なものとして前記マルチノードクラスタ内のリレーシステムノードの状態を記録し、前記リレーシステムコントローラは、前記所定の時間ウィンドウ内に前記リレーシステムノードから状態応答を受信しなかった場合には、非可用なものとして前記マルチノードクラスタのリレーシステムノードの前記状態を記録する、請求項11に記載のシステム。
前記リレーシステムスマートコントラクトは、前記リレーシステムコントローラを介して、前記マルチノードクラスタに前記要求を送信し、前記リレーシステムコントローラは、可用な状態を有している前記マルチノードクラスタ内の前記リレーシステムノードを選択し、前記要求を前記リレーシステムノードに転送する、請求項12に記載のシステム。
【発明を実施するための形態】
【0015】
本明細書は、ブロックチェーンネットワーク内の処理のために外部データソースからデータを読み出すための技術を説明している。本明細書の実施形態は、検証可能かつ高可用な方式で外部データソースからデータおよび/またはサービスを読み出すまたはアクセスするために使用されるマルチノードクラスタを含むリレーシステムを目的としている。いくつかの実施形態においては、リモート認証が、マルチノードクラスタ内の複数のリレーシステムノードの各々に対して行われ、リモート認証は、それぞれ、各リレーシステムノードに対して鍵ペア(公開鍵、秘密鍵)をもたらす。各リレーシステムノードは、高信頼実行環境(TEE)を使用して動作する。リレーシステムスマートコントラクトは、リレーシステムノードのリモート認証のために使用され、公的に監査することを可能にし、個々のクライアントがリモート認証を繰り返す必要性を取り除く。認証済みのリレーシステムノードは、使用のためにリレーシステムスマートコントラクトによって登録される。マルチノードクラスタ内のリレーシステムノードの各々の状態は、リレーシステムコントローラによって周期的にチェックおよび記録され得る。クライアント要求は、外部データソースにクエリを行うためにクラスタ内の可用なリレーシステムノードにリレーシステムコントローラによって割り当てられる。クエリの結果を含む応答は、リレーシステムノードの秘密鍵を使用してデジタル署名される。応答は、それが登録済みのリレーシステムノードによって送信されているかどうかに関して、リレーシステムスマートコントラクトによって検証され得る。応答の完全性は、リレーシステムノードの公開鍵を使用して、リレーシステムスマートコントラクトによって検証され得る。
【0016】
本明細書の実施形態についてのさらなる状況をあげるとすれば、上述したように、コンセンサスネットワーク(例えば、ピア・ツー・ピアノードで構成される)およびブロックチェーンネットワークとも称し得る、分散型台帳システム(DLS)は、関与エンティティが安全かつ変更不可能な形でトランザクションを実施しデータを記憶することを可能にする。ブロックチェーンという用語は、特定のネットワークおよび/またはユースケースに一般的に関連付けられているが、ブロックチェーンは、任意の特定のユースケースを指すわけではなくDLSを一般的に指すために本明細書では使用している。
【0017】
ブロックチェーンは、トランザクションが変更不可能となる方法でトランザクションを記憶するデータ構造である。そのため、ブロックチェーン上に記録されるトランザクションは、信頼性のあるものおよび信頼できるものとなる。ブロックチェーンは、1つまたは複数のブロックを含む。チェーン内の各ブロックは、前のブロックの暗号ハッシュを含めることによって、チェーン内のその直前にある前のブロックに連結される。各ブロックはまた、タイムスタンプ、それ自身の暗号ハッシュ、および1つまたは複数のトランザクションを含む。ブロックチェーンネットワークのノードによって既に検証されているトランザクションは、ハッシュ化され、Merkleツリーに符号化される。Merkleツリーは、ツリーのリーフノードにおけるデータがハッシュ化され、ツリーの各ブランチにおけるすべてのハッシュがブランチのルートにおいて連結されるデータ構造である。このプロセスは、ツリー全体のルートまでツリーの上方へと進行し続け、ツリー全体のルートは、ツリー内のすべてのデータを表すハッシュを記憶している。ツリーに記憶されているトランザクションであることを意味するハッシュは、それがツリーの構造と一致しているかどうかを決定することによって素早く検証され得る。
【0018】
ブロックチェーンは、トランザクションを記憶するための分散化または少なくとも部分的に分散化されたデータ構造である一方で、ブロックチェーンネットワークは、トランザクションをブロードキャストすること、検証すること、および有効性を確認することなどによって、1つまたは複数のブロックチェーンを管理、更新、および維持管理するコンピューティングノードのネットワークである。上述したように、ブロックチェーンネットワークは、パブリックブロックチェーンネットワーク、プライベートブロックチェーンネットワーク、またはコンソーシアムブロックチェーンネットワークとして提供され得る。コンソーシアムブロックチェーンネットワークを参照して、本明細書の実施形態をここではさらに詳細に説明している。しかしながら、本明細書の実施形態が任意の適切なタイプのブロックチェーンネットワークにおいて実現され得ることも考えられる。
【0019】
一般に、コンソーシアムブロックチェーンネットワークは、関与エンティティの間でプライベートなものとなっている。コンソーシアムブロックチェーンネットワークにおいては、コンセンサスプロセスは、コンセンサスノードとも称し得る、権限を与えられたノードのセットによって制御され、1つまたは複数のコンセンサスノードがそれぞれのエンティティ(例えば、金融機関、保険会社)に管理される。例えば、十(10)のコンソーシアムエンティティ(例えば、金融機関、保険会社)がコンソーシアムブロックチェーンネットワークを管理してもよく、その各々がコンソーシアムブロックチェーンネットワーク内の少なくとも1つのノードを管理する。
【0020】
いくつかの例においては、コンソーシアムブロックチェーンネットワーク内では、グローバルブロックチェーンが、すべてのノードにわたって複製されるブロックチェーンとして提供される。すなわち、すべてのコンセンサスノードは、グローバルブロックチェーンに関する完全状態コンセンサスにある。コンセンサス(例えば、ブロックチェーンへのブロックの追加に対する合意)を得るために、コンセンサスプロトコルがコンソーシアムブロックチェーンネットワークにおいて実施される。例えば、コンソーシアムブロックチェーンネットワークは、以下でさらに詳細に説明している、実用的Byzantineフォールトトレランス(PBFT)コンセンサスを実施し得る。
【0021】
図1は、本明細書の実施形態を実行するために使用され得る環境100の例を図示している図である。いくつかの例においては、例示的な環境100は、エンティティがコンソーシアムブロックチェーンネットワーク102に参加することを可能にする。例示的な環境100は、コンピューティングデバイス106、108、およびネットワーク110を含む。いくつかの例においては、ネットワーク110は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、インターネット、またはその組合せを含み、ウェブサイト、ユーザデバイス(例えば、コンピューティングデバイス)、およびバックエンドシステムを接続する。いくつかの例においては、ネットワーク110は、有線および/または無線通信リンクを介してアクセスされ得る。
【0022】
図示した例においては、コンピューティングシステム106、108の各々は、コンソーシアムブロックチェーンネットワーク102内のノードとしての参加を可能にする任意の適切なコンピューティングシステムを含み得る。例示的なコンピューティングデバイスは、サーバ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピューティングデバイス、およびスマートフォンを含むがこれらに限定されない。いくつかの例においては、コンピューティングシステム106、108は、コンソーシアムブロックチェーンネットワーク102とやりとりするための1つまたは複数のコンピュータ実施サービスをホストする。例えば、コンピューティングシステム106は、第1のエンティティが1つまたは複数の他のエンティティ(例えば、他のユーザ)とのトランザクションを管理するために使用するトランザクション管理システムなどといった、第1のエンティティ(例えば、ユーザA)のコンピュータ実施サービスをホストすることができる。コンピューティングシステム108は、第2のエンティティが1つまたは複数の他のエンティティ(例えば、他のユーザ)とのトランザクションを管理するために使用するトランザクション管理システムなどといった、第2のエンティティ(例えば、ユーザB)のコンピュータ実施サービスをホストすることができる。
図1の例においては、コンソーシアムブロックチェーンネットワーク102を、ノードからなるピア・ツー・ピアネットワークとして表しており、コンピューティングシステム106、108は、コンソーシアムブロックチェーンネットワーク102に参加する、第1のエンティティおよび第2のエンティティのノードをそれぞれ提供する。
【0023】
図2は、本明細書の実施形態による、概念的機構200の例を図示している。概念的機構200は、エンティティレイヤ202、ホステッドサービスレイヤ204、およびブロックチェーンネットワークレイヤ206を含む。図示した例においては、エンティティレイヤ202は、関与者A、関与者B、および関与者Cの3つの関与者を含み、各関与者は、それぞれのトランザクション管理システム208を有する。
【0024】
図示した例においては、ホステッドサービスレイヤ204は、各トランザクション管理システム210のためのインターフェース210を含む。いくつかの例においては、それぞれのトランザクション管理システム208は、プロトコル(例えば、ハイパーテキスト・トランスファー・プロトコル・セキュア(HTTPS))を使用してネットワーク(例えば、
図1のネットワーク110)を介してそれぞれのインターフェース210と通信する。いくつかの例においては、各インターフェース210は、それぞれのトランザクション管理システム208とブロックチェーンネットワークレイヤ206との間の通信接続を提供する。より詳細には、インターフェース210は、ブロックチェーンネットワークレイヤ206のブロックチェーンネットワーク212と通信する。いくつかの例においては、インターフェース210とブロックチェーンネットワークレイヤ206との間の通信は、リモートプロシージャコール(RPC)を使用して実施される。いくつかの例においては、インターフェース210は、それぞれのトランザクション管理システム208のためのブロックチェーンネットワークノードを「ホスト」する。例えば、インターフェース210は、ブロックチェーンネットワーク212へのアクセスのためのアプリケーションプログラミングインターフェース(API)を提供する。
【0025】
本明細書に記載しているように、ブロックチェーンネットワーク212は、ブロックチェーン216に情報を変更不可能な形で記録する複数のノード214を含むピア・ツー・ピアネットワークとして提供される。単一のブロックチェーン216を概略的に図示しているが、ブロックチェーン216の複数のコピーが、提供され、ブロックチェーンネットワーク212にわたって維持管理される。例えば、各ノード214は、ブロックチェーンのコピーを記憶する。いくつかの実施形態においては、ブロックチェーン216は、コンソーシアムブロックチェーンネットワークに参加する2つ以上のエンティティの間で行われるトランザクションに関連付けられた情報を記憶する。
【0026】
ブロックチェーン(例えば、
図2のブロックチェーン216)は、各ブロックがデータを記憶しているブロックのチェーンで構成される。例示的なデータは、2つ以上の関与者間のトランザクションを表すトランザクションデータを含む。トランザクションを非限定的な例として本明細書では使用しているが、任意の適切なデータがブロックチェーンに記憶され得ること(例えば、ドキュメント、画像、ビデオ、オーディオ)も考えられる。例示的なトランザクションは、価値のあるもの(例えば、資産、製品、サービス、および通貨)の交換を含み得るがこれに限定されない。トランザクションデータは、ブロックチェーン内に変更不可能な形で記憶される。すなわち、トランザクションデータを変更することはできない。
【0027】
ブロックに記憶する前に、トランザクションデータはハッシュ化される。ハッシュ化は、トランザクションデータ(文字列データとして提供される)を固定長のハッシュ値(文字列データとしても提供される)に変換するプロセスである。ハッシュ値を逆ハッシュ化してトランザクションデータを取得することはできない。ハッシュ化は、トランザクションデータにおけるわずかな変化でさえも完全に異なるハッシュ値という結果になることを保証している。さらに、上述したように、ハッシュ値は固定長である。すなわち、トランザクションデータのサイズに関係なく、ハッシュ値の長さは固定される。ハッシュ化は、ハッシュ関数によってトランザクションデータを処理してハッシュ値を生成することを含む。ハッシュ関数の例は、256ビットハッシュ値を出力するセキュアなハッシュアルゴリズム(SHA)-256を含むがこれに限定されない。
【0028】
複数のトランザクションのトランザクションデータがハッシュ化されブロックに記憶される。例えば、2つのトランザクションのハッシュ値が提供されると、それら自身がハッシュ化され別のハッシュを提供する。このプロセスは、すべてのトランザクションがブロックに記憶されるように、単一のハッシュ値が提供されるまで繰り返される。このようなハッシュ値は、Merkleルートハッシュと称され、ブロックのヘッダに記憶される。トランザクションについての何らかの変化は、そのハッシュ値における変化、最終的に、Merkleルートハッシュにおける変化をもたらすことになる。
【0029】
ブロックは、コンセンサスプロトコルを介してブロックチェーンに追加される。ブロックチェーンネットワーク内の複数のノードは、コンセンサスプロトコルに関与し、ブロックがブロックチェーンに追加されるようにする作業を行う。そのようなノードをコンセンサスノードと称する。上述したように、PBFTは、コンセンサスプロトコルの非限定的な例として使用される。コンセンサスノードは、コンセンサスプロトコルを実行してトランザクションをブロックチェーンに追加し、ブロックチェーンネットワークの総合的な状態を更新する。
【0030】
さらに詳細には、コンセンサスノードは、ブロックヘッダを生成し、ブロック内のトランザクションのすべてをハッシュ化し、単一のハッシュ値がブロック内のすべてのトランザクションに対して提供される(Merkleルートハッシュ)まで、ハッシュ値がペアになるように組み合わせてさらなるハッシュ値を生成する。このハッシュがブロックヘッダに追加される。コンセンサスノードはまた、ブロックチェーン内の最新ブロック(すなわち、ブロックチェーンに追加された最終ブロック)のハッシュ値を決定する。コンセンサスノードはまた、ノンス値およびタイムスタンプをブロックヘッダに追加する。
【0031】
一般に、PBFTは、Byzantine障害(例えば、正常に動作していないノード、不正ノード)に耐性がある実用的Byzantineステートマシンの複製を提供する。このことは、障害が生じるであろうことを想定すること(例えば、独立したノードの故障の存在および/またはコンセンサスノードによって送信される操作メッセージを想定すること)によってPBFTでは実現される。PBFTでは、コンセンサスノードは、プライマリコンセンサスノードおよびバックアップコンセンサスノードを含むシーケンスにおいて提供される。プライマリコンセンサスノードは、周期的に変更される。トランザクションは、ブロックチェーンネットワークの系全体の状態(world state)に関して合意に至ったブロックチェーンネットワーク内のコンセンサスノードによってブロックチェーンに追加される。このプロセスにおいては、メッセージは、コンセンサスノード間で送信され、各コンセンサスノードは、メッセージが指定のピアノードから受信されたことを証明し、メッセージが送信中に変更されなかったことを検証する。
【0032】
PBFTでは、多様な局面において、コンセンサスプロトコルが、同じ状態で開始するすべてのコンセンサスノードに提供される。はじめに、クライアントは、サービス動作を発動する(例えば、ブロックチェーンネットワーク内のトランザクションを実行する)ためにプライマリコンセンサスノードに要求を送信する。要求を受信したことに応答して、プライマリコンセンサスノードは、バックアップコンセンサスノードに要求をマルチキャストする。バックアップコンセンサスノードが要求を実行し、各々がクライアントに応答を送信する。クライアントは、閾値数の応答が受信されるまで待機する。いくつかの例においては、クライアントは、f+1個の応答が受信されるまで待機する、ここで、fは、ブロックチェーンネットワーク内で許容され得る、障害のあるコンセンサスノードの最大数である。目標達成は、ブロックチェーンに追加されることになるレコードの順で十分な数のコンセンサスノードが合意に至ることであり、レコードは、受理されるか拒否される。
【0033】
いくつかのブロックチェーンネットワークにおいては、暗号化がトランザクションのプライバシーを維持管理するために実施される。例えば、ブロックチェーンネットワーク内の他のノードがトランザクションの詳細を理解することができないように、2つのノードがトランザクションをプライベートな状態を維持することを望む場合には、ノードはトランザクションデータを暗号化し得る。暗号化の例は、対称暗号化および非対称暗号化を含むがこれらに限定されない。対称暗号化とは、暗号化(平文から暗号文を生成すること)および復号(暗号文から平文を生成すること)の両方に関して単一の鍵を使用する暗号化プロセスを指す。対称暗号化においては、同一の鍵が複数のノードで利用可能であるため、各ノードがトランザクションデータを暗号化/復号し得る。
【0034】
非対称暗号化は、各々が秘密鍵と公開鍵とを含む鍵ペアを使用しており、秘密鍵はそれぞれのノードにのみに対して既知となっており、公開鍵はブロックチェーンネットワーク内の他のノードのいずれかまたはすべてに対して既知となっている。あるノードは、別のノードの公開鍵を使用してデータを暗号化し、暗号化されたデータは、他のノードの秘密鍵を使用して復号され得る。例えば、
図2を再び参照すれば、関与者Aは、関与者Bの公開鍵を使用してデータを暗号化し、暗号化されたデータを関与者Bに送信し得る。関与者Bは、その秘密鍵を使用して、暗号化されたデータ(暗号文)を復号し、元のデータ(平文)を抽出し得る。ノードの公開鍵で暗号化されたメッセージのみが、ノードの秘密鍵を使用して復号され得る。
【0035】
非対称暗号化は、トランザクション内の関与者がトランザクション内の他の関与者だけでなくトランザクションの有効性を確認することを可能にするデジタル署名を提供するために使用される。例えば、あるノードは、メッセージをデジタル的に署名し得るし、別のノードは、関与者Aのデジタル署名に基づいてメッセージがそのノードによって送信されたことを確認し得る。デジタル署名はまた、メッセージが送信中に改竄されていないことを保証するために使用され得る。例えば、
図2を再び参照すれば、関与者Aは、メッセージを関与者Bに送信しようとしている。関与者Aは、メッセージのハッシュを生成し、その後、その秘密鍵を使用して、ハッシュを暗号化して、暗号化したハッシュとしてデジタル署名を提供する。関与者Aは、デジタル署名をメッセージに付け加え、デジタル署名付きのメッセージを関与者Bに送信する。関与者Bは、関与者Aの公開鍵を使用してデジタル署名を復号し、ハッシュを抽出する。関与者Bは、メッセージをハッシュ化し、ハッシュを比較する。ハッシュが同一である場合には、関与者Bは、メッセージが確かに関与者Aからのものであり改竄されていないことを確認することができる。
【0036】
いくつかの実施形態においては、ブロックチェーンネットワークのノード、および/またはブロックチェーンネットワークと通信するノードは、TEEを使用して動作し得る。高次においては、TEEは、ハードウェアの動作環境(例えば、オペレーティングシステム(OS)、基本入出力システム(BIOS))から隔離された、ハードウェア(1つまたは複数のプロセッサ、メモリ)における高信頼環境である。さらに詳細には、TEEは、実行されるコードおよびメインプロセッサ内へロードされるデータの機密性および完全性を保証する、プロセッサの独立したセキュアなエリアである。プロセッサ内では、TEEは、OSと並列して動作する。所謂、高信頼アプリケーション(TA)の少なくとも一部が、TEE内で実行され、プロセッサおよびメモリへのアクセスを有する。TEEのおかげで、TAは、メインOSで動作している他のアプリケーションから保護される。さらに、TEEは、TEE内で互いにTAを暗号的に隔離している。
【0037】
TEEの例は、米国カリフォルニア州サンタ・クララ市のIntel Corporationによって提供されるSoftware Guard Extension(SGX)を含む。SGXを例としてここでは検討しているが、本明細書の実施形態が任意の適切なTEEを使用して実現され得ることも考えられる。
【0038】
SGXは、ハードウェアベースのTEEを提供する。SGXにおいては、高信頼ハードウェアは、中央処理装置(CPU)のダイであり、物理メモリの一部は、限定されたコードおよびデータを保護するために隔離されている。メモリの隔離された部分をエンクレーブと称する。より詳細には、エンクレーブは、メモリ内のエンクレーブページキャッシュ(EPC)として提供されており、アプリケーションアドレス領域にマッピングされている。メモリ(例えば、DRAM)は、SGX用にプリザーブドランダムメモリ(PRM)を含む。PRMは、最も低いBIOSレベルにおける連続的なメモリ領域であり、いかなるソフトウェアによってもアクセスすることはできない。各EPCは、PRMにアプリケーションデータおよびコードをロードするためにOSによって割り振られたメモリセット(例えば、4KB)である。EPCメタデータ(EPCM)は、それぞれのEPCのためのエントリアドレスであり、各EPCが1つのエンクレーブによってのみ共有され得ることを保証する。すなわち、単一のエンクレーブが複数のEPCを使用することができる一方で、EPCは単一のエンクレーブに対して専用とされる。
【0039】
TAの実行中には、プロセッサは、エンクレーブに記憶されているデータにアクセスする際には、所謂、エンクレーブモードで動作する。エンクレーブモードにおける動作は、各メモリアクセスに対して追加のハードウェアチェックを強制する。SGXにおいては、TAは、高信頼部分と非高信頼部分とにコンパイルされる。高信頼部分は、例えば、OS、BIOS、特権システムコード、仮想マシンマネージャ(VMM)、システム管理モード(SMM)などによってアクセスすることはできない。動作中には、TAは、メモリのPRM内で動作しエンクレーブを作成する。エンクレーブ内の高信頼部分によって実行される高信頼関数は非高信頼部分によって呼び出され、エンクレーブ内で実行されるコードはデータを平文データ(暗号化されていない)として認識し、データへの外部アクセスは拒否される。高信頼部分は暗号化された応答を呼び出しに提供し、TAは実行を継続する。
【0040】
認証プロセスは、SGXが提供されるTEE内で予期されるコード(例えば、TAの高信頼部分)がセキュアに実行されていることを検証するために行われ得る。一般に、認証プロセスは、チャレンジ側(例えば、ブロックチェーンネットワーク内の別のノード、ブロックチェーンネットワークの鍵管理システム(KMS))から認証要求を受信するTAを含む。それに応じて、TAは、そのエンクレーブがクォートとも称するリモート認証を生成することを要求する。リモート認証を生成することは、ローカル認証を検証する、所謂、クォーティングエンクレーブにエンクレーブから送信される記ローカル認証を含み、非対称認証鍵を使用してローカル認証を署名することによってローカル認証をリモート認証に変換する。リモート認証(クォート)は、チャレンジ側(例えば、ブロックチェーンネットワークのKMS)に提供される。
【0041】
チャレンジ側は、認証検証サービスを使用してリモート認証を検証する。SGXについては、Intelが、チャレンジ側からリモート認証を受信してリモート認証を検証する、Intel Attestation Service(IAS)を提供している。より詳細には、IASが、リモート認証を処理し、リモート認証が検証されたかどうかを示す、レポート(例えば、認証検証レポート(AVR))を提供する。検証されなかった場合には、エラーが示され得る。検証された(予期されるコードがTEEにおいてセキュアに実行されている)場合には、チャレンジ側は、TAとのインタラクションを開始または継続し得る。例えば、検証に応答して、(チャレンジ側として)KMSは、ノードが他のノードおよび/またはクライアントとセキュアに通信することを可能にするために、(例えば、楕円曲線Diffie-Hellman(ECDH)などの鍵交換プロセスを介して)TEEを実行するノードに非対称暗号鍵(例えば、公開鍵と秘密鍵とのペア)を発行し得る。
【0042】
いくつかのブロックチェーンネットワークにおいては、所謂、スマートコントラクトが実行されてもよい。スマートコントラクトは、様々な関係者に影響を及ぼす契約条項を有する現実世界の適法契約のデジタル表現として説明することができる。スマートコントラクトは、例示的な状況では、コンソーシアムブロックチェーンネットワーク内で、実施され、記憶され、更新され(必要に応じて)、実行される。スマートコントラクトに関連付けられた契約関係者(例えば、買主および売主)は、コンソーシアムブロックチェーンネットワーク内のノードとして表される。いくつかの例においては、契約関係者は、(例えば、スマートコントラクトに対する関係者として)スマートコントラクトに関連付けられたエンティティ(例えば、企業)を含み得る。
【0043】
さらに詳細には、スマートコントラクトは、ブロックチェーン(例えば、ブロックチェーンネットワーク内のノード)上で実行されるコンピュータ実行可能プログラムとして提供される。スマートコントラクトは、そのルールの下でそのスマートコントラクトに対する関係者が互いにやりとりすることに合意する事前に定義されたルールのセットを含む。スマートコントラクトの事前に定義されたルールを満たしている場合には、スマートコントラクトにおいて定義された合意が自動的に実施される。スマートコントラクトは、通常は改竄抵抗性があり、合意またはトランザクションの交渉または遂行を容易にし、検証し、実施する。
【0044】
いくつかの事例においては、ブロックチェーンネットワーク内で実行されるスマートコントラクトは、事前に定義されたルールを評価して対応するアクションを行うために、ブロックチェーンネットワークの外部からの入力を必要とする。非限定的な例として、スマートコントラクトが決定の根拠とするために株価情報が必要になる場合があり、株価情報は、データソース外部からブロックチェーンネットワークにもたらされる。別の非限定的な例として、スマートコントラクトが決定の根拠とするためにブロックチェーンネットワークの外部で維持管理されているアカウントについてのアカウント情報が必要になる場合がある。しかしながら、スマートコントラクト自身が、外部データソースに直接クエリを行うことはできない。
【0045】
従来のアプローチは、スマートコントラクトによる処理のために、外部データを読み出し、ブロックチェーンにデータを送信するためにリレーエージェントの使用を含む。しかしながら、このプロセスは、セキュアな情報(例えば、外部データソースにアクセスするために要求され得る認証情報)の漏洩などのセキュリティ問題を引き起こし得る。例えば、従来のアプローチは、リレーエージェントが指定のクエリ要求を実際に行っていたことを証明するためにTEEを使用し得る。しかしながら、ブロックチェーンの開放性に起因して、すべてのクエリ要求が、ブロックチェーンネットワーク内のすべてのユーザ(ノード)に対して可視となっている。それゆえ、アクセス制御(例えば、クエリ)を要求する外部データソースへのアクセスを要求するクエリ要求についてパーミッション漏洩のリスクが存在する。例えば、要求文字列が傍受、変更、およびリプレイされ、情報漏洩または他の問題を引き起こし得るリスクが存在する。
【0046】
SGXを使用した従来のアプローチの1つにおいては、エンクレーブ(エンクレーブプログラム)を実行するTAまたはTAの一部が、外部データソースにアクセスするリレーノードとして機能する。例えば、エンクレーブプログラムは、クエリ要求(例えば、HTTPS要求)をインターネットベースのデータソースに送信し得るし、要求を開始したスマートコントラクトに応答を提供し得る。いくつかの例においては、エンクレーブの公開鍵を使用して機密情報(例えば、アクセス認証情報)を暗号化するために使用され得るプライバシーフィールド機能を提供している。いくつかの例においては、リレーノードは、エンクレーブの秘密鍵を使用してプライバシーフィールドを復号し、HTTPSクライアントを呼び出してターゲットインターネットベースのデータソースにアクセスし、要求されたデータを受信し、秘密鍵を使用して返信データをデジタル署名する。デジタル署名の後に、データが、要求を開始したスマートコントラクトに返信される。
【0047】
しかしながら、そのような従来のアプローチはデメリットを有する。プライバシーフィールドを直接暗号化する例示的なデメリットは、プライバシーフィールドを有する要求の暗号文が完全性保護を有していないことである。例えば、ユーザは、インターネットベースのデータソースのすべての許可情報を要求するための要求において暗号化されたAPI鍵フィールドを含める。攻撃者が、通信を傍受することができる。攻撃者はAPI鍵情報の平文を直接復号することはできないが、攻撃者は、要求を変更し、同一のプライバシーフィールドを使用して情報にアクセスするための要求を構築し、それをリレーノードに送信し得る。このことは、機密情報(例えば、認証情報)の漏洩を引き起こすことになり得る。
【0048】
上記の状況を考慮して、本明細書の実施形態は、リレーシステムおよびTEEを使用して外部データソース(例えば、インターネットベースのデータソース)にクエリを行うことを目的としている。より詳細には、ここでさらに詳細に説明しているように、本明細書の実施形態は、各々がTEEを実行する複数のリレーシステムノードを含むマルチノードクラスタを提供している。各リレーシステムノードの状態が維持管理され、リレーシステムノードが外部データについてのクライアント要求に応答してマルチノードクラスタから選択され得る。このように、リレーシステムの可用性を保証している。本明細書の実施形態は、機密情報(例えば、認証情報)を保護しつつ、許可要求の完全性チェックをさらに提供している。このように、ここでさらに詳細に説明しているように、本明細書の実施形態は、ユーザ権限が漏洩することを防止するなど、従来のアプローチのデメリットに対処している。
【0049】
図3は、本明細書の実施形態による、システム300の例を図示している図である。図示しているように、システム300は、ブロックチェーン302、リレーシステムコントローラ308、複数のリレーシステムノード310を含むマルチノードクラスタ309、認証サービス312、およびネットワーク314(例えば、インターネット)を含む。図示した例においては、ブロックチェーン302は、クライアントスマートコントラクト304およびリレーシステムスマートコントラクト306を含む。一般に、リレーシステムスマートコントラクト306、リレーシステムコントローラ308、およびリレーシステムノード310は、ブロックチェーン302の外部にあるデータがブロックチェーン302内に読み出され使用されることを可能にするリレーシステムを提供する。
【0050】
いくつかの実施形態においては、リレーシステムノード310は、TEE技術(例えば、Intel SGX)を使用して実装される。一般に、認証サービス312は、クライアントスマートコントラクト304についてのリレーシステムノード310の正当性を検証する。認証サービスの例は、上記で説明した、IASを含む。本明細書に記載しているように、リレーシステムスマートコントラクト306、リレーシステムコントローラ308、およびリレーシステムノード310は、クライアントスマートコントラクト304からネットワーク314(例えば、ネットワーク314を介してアクセス可能となっている外部データソース)へとデータまたは要求を中継するとともにネットワーク314からクライアントスマートコントラクト304へとデータまたは要求結果を中継するリレーシステムとして共に動作する。
【0051】
クライアントスマートコントラクト304は、ネットワーク314からデータまたはサービスを要求する要求元として動作するスマートコントラクトである。いくつかの実施形態においては、クライアントスマートコントラクト304のオフライン所有者、例えば、クライアントまたはユーザ(図示せず)が、クライアントスマートコントラクト304にデータまたは要求を送信し得る、または、クライアントスマートコントラクト304においてデータまたはサービス要求を生成し得る。データまたは要求は、データグラム要素であり得る。クライアントスマートコントラクト304は、リレーシステムコントラクト306と通信可能なように結合されている。例えば、クライアントスマートコントラクト304は、リレーシステムスマートコントラクト306に要求を送信し、リレーシステムスマートコントラクト306から要求結果を受信し得る。
【0052】
上述したように、リレーシステムスマートコントラクト306、リレーシステムコントローラ308、およびリレーシステムノード310は、クライアントスマートコントラクト304からネットワーク314へとデータまたは要求を中継するとともにネットワーク314からクライアントスマートコントラクト304へとデータまたは要求結果を中継するリレーシステムとして共に動作する。リレーシステムスマートコントラクト306は、リレーシステム内のブロックチェーン302のフロントエンドとしての機能を果たすスマートコントラクトである。リレーシステムスマートコントラクト306は、クライアントスマートコントラクト304からリレーシステムの他のコンポーネント(例えば、リレーシステムコントローラ308)へと要求を処理および中継するための、および、リレーシステムコントローラ308からクライアントスマートコントラクト304へと要求結果を中継するための、クライアントスマートコントラクト304に対する、アプリケーションプログラムインターフェース(API)を含むまたはそのようなAPIとして動作する。いくつかの実施形態においては、リレーシステムスマートコントラクト306は、クライアントスマートコントラクト304へと要求結果を中継する前に、要求結果に関連付けられた署名を検証する。要するに、リレーシステムスマートコントラクト306は、ブロックチェーン302とブロックチェーン302(例えば、リレーシステムコントローラ308)の外部にあるリレーシステムコンポーネントとの間のインターフェースを提供するスマートコントラクトである。リレーシステムスマートコントラクト306は、ブロックチェーン302(例えば、クライアントスマートコントラクト304)内で実行されるコンポーネントから要求を受け取り、対応する応答を返信する。
【0053】
リレーシステムコントローラ308は、リレーシステムスマートコントラクト306からリレーシステムノード310へと要求を中継するとともにリレーシステムノード310からリレーシステムスマートコントラクト306へと要求結果を中継する、任意の適切なコンピュータ、プロセッサ、モジュール、またはコンピューティング要素を含む。そのため、リレーシステムコントローラ308は、リレーシステムスマートコントラクト306がネットワーク314への直接的な接続性を有していないため、リレーシステムスマートコントラクト306の状態を監視する監視エンティティとして動作する。
【0054】
リレーシステムコントローラ308は、リレーシステムノード310から認証サービス312へとリレーシステムノード310の正当性を示す認証エビデンス320も中継する。いくつかの実施形態においては、認証エビデンス320は、リレーシステムノード310の測定値322およびリレーシステムノード310の署名326を含む。リレーシステムノード310の測定値322は、リレーシステムノード310の初期状態のハッシュ値を含み得る。認証エビデンス320に含まれるリレーシステムノード310の署名326は、リレーシステムノード310の認証鍵を使用して署名されたリレーシステムノード310の測定値322を含み得る。
【0055】
いくつかの実施形態においては、リレーシステムノード310の認証鍵は、強化プライバシー識別(EPID)秘密鍵を含む。EPIDは、プライバシーを保護しつつ、高信頼システムの認証のためにIntelによって提供されるアルゴリズムである。一般に、ネットワークのメンバ(例えば、コンピュータまたはサーバ)の各々は、認証エビデンスを署名するためにEPID秘密鍵が割り当てられており、ネットワークにおける認証エビデンスの検証側は、ネットワークの他のメンバのEPID秘密鍵と対をなすEPID公開鍵を記憶している。メンバの各々は、それ自身のEPID秘密鍵を使用して認証エビデンスの署名を生成し得るし、検証側は、EPID公開鍵を使用して他のメンバの署名を検証し得る。そのため、EPID鍵は、コンピュータまたはサーバなどのデバイスが正規デバイスであることを証明するために使用され得る。
【0056】
認証エビデンス320は、リレーシステムノード310によって生成された公開鍵324をさらに含み得る。認証エビデンス320がリレーシステムノード310によって生成された公開鍵324を含んでいる場合には、リレーシステムノード310の署名326は、測定値322と、リレーシステムノード310の認証鍵を使用して署名された公開鍵324とを含む。
【0057】
リレーシステムノード310は、ブロックチェーン302からの要求を取り込み全うする、任意の適切なサーバ、コンピュータ、モジュール、またはコンピューティング要素を含む。例えば、リレーシステムノード310は、クライアントからオフチェーンサービス要求を受信および処理し、例えば、HTTPS対応のインターネットサービスなどといった、ネットワーク314内の外部データソースにクエリを行い得る。クライアントまたはクライアントスマートコントラクト304からの要求を処理する前に、リレーシステムノード310は、リレーシステムノード310の正当性を検証するために、認証エビデンス320を生成し、認証サービス312に認証エビデンス320を送信し得る。いくつかの実施形態においては、リレーシステムノード310は、公開鍵324と秘密鍵とを含む鍵ペアを生成し、認証エビデンス320に公開鍵324を含む。公開鍵324は、リレーシステムスマートコントラクト306とリレーシステムノード310との間の今後の通信のために、リレーシステムスマートコントラクト306へとリレーシステムコントローラ308によってさらに中継され得る。例えば、リレーシステムノード310は秘密鍵を使用して要求結果を署名し得るし、リレーシステムスマートコントラクト306は公開鍵324を使用して署名された要求結果を検証し得る。
【0058】
図3の図示した例においては、複数のリレーシステムノード310は、マルチノードクラスタ309を形成し得る。クラスタのリレーシステムノード310の各々は、認証プロセス中にリレーシステムスマートコントラクト306によって個別に検証される。それゆえ、マルチノードクラスタ309の検証済みのリレーシステムノード310の各々は、インターネットデータソース314にクエリを行うために使用され得る。
【0059】
認証サービス312は、リレーシステムノード310からリレーシステムコントローラ308によって転送された認証エビデンス320の正当性を検証する、任意の適切なサーバ、コンピュータ、モジュール、またはコンピューティング要素を含む。上述したように、認証エビデンス320は、リレーシステムノード310の測定値322、リレーシステムノード310の署名326、および/またはリレーシステムノード310によって生成された公開鍵324を含む。認証エビデンス320を受信すると、認証サービス312は、認証エビデンス320内のリレーシステムノード310の署名326を検証し、認証検証レポート(AVR)330を生成する。
【0060】
認証サービス312は、認証サービス312の認証鍵を使用して認証エビデンス320内の署名326を検証する。いくつかの実施形態においては、認証サービス312の認証鍵は、リレーシステムノード310が認証エビデンス320に署名するために使用したEPID秘密鍵と対をなすEPID公開鍵を含む。認証エビデンス320内の署名を検証した後に、認証サービス312は、認証エビデンス320、認証エビデンス320内の署名326が有効であるかどうかを示す検証結果334、および認証サービス312の署名336を含む、AVR330を生成する。
【0061】
いくつかの実施形態においては、AVR330は、リレーシステムノード310の署名326を除いて認証エビデンス320を含む。例えば、AVR330は、リレーシステムノード310の測定値322、リレーシステムノード310によって生成された公開鍵324、検証結果334、および認証サービス312の署名336を含み得る。いくつかの実施形態においては、認証サービス312の署名336は、認証サービス312のレポート署名鍵(例えば、認証サービス312が認証検証レポートを署名するために使用する秘密鍵)を使用して署名された認証エビデンス320および検証結果334を含む。レポート署名鍵が認証サービス312の認証鍵とは異なる得ることに留意されたい。
【0062】
図3で説明したようなリレーシステムは、外部データソースから公的に可用なデータおよび/またはサービスを読み出すために使用され得る。読み出しプロセスの全体は、3つの段階を含む。第1の段階において、リレーシステムスマートコントラクト306は、マルチノードクラスタ309内のリレーシステムノード310についての認証確認を行い、認証済みのリレーシステムノード310を登録(記憶)する。第2の段階において、リレーシステムコントローラ308は、マルチノードクラスタ309内のリレーシステムノード310の状態をチェックし、リレーシステムノード310が使用のために可用なものであると決定する。第3の段階において、クライアントスマートコントラクト304は、リレーシステムスマートコントラクト306、リレーシステムコントローラ308、およびマルチノードクラスタ309内の可用なリレーシステムノード310を介して外部データソース314から公的に可用なデータおよび/またはサービスを読み出す。
【0063】
図4は、本明細書の実施形態による、信号フロー400の例を図示している。信号フロー400は、認証検証プロセスを表している。便宜上、プロセスが、1つまたは複数のロケーションに位置する1つまたは複数のコンピュータのシステムによって行われるとともに本明細書に従って適切に行われるものとして説明することにする。例えば、適切にプログラムされた分散システム(例えば、
図1のブロックチェーンシステム100、
図3のシステム300)がそのプロセスを行い得る。
【0064】
一般的に、動作中には、リレーシステムコントローラ308は、リレーシステムノード310から認証エビデンスを読み出し、認証エビデンスを検証するために認証サービス312に認証エビデンスを送信する。リレーシステムコントローラ308は、認証エビデンス内のリレーシステムノード310の署名に対する検証に基づいてリレーシステムノード310の正当性を示す認証サービス312からAVRを受信する。リレーシステムコントローラ308は、リレーシステムスマートコントラクト306へと認証サービス312の署名を含むAVRをさらに中継する。
【0065】
手始めに、認証エビデンスについてリレーシステムノード310にチャレンジを行う前に、リレーシステムコントローラ308は、リレーシステムノード310の測定値(例えば、初期状態のダイジェスト)を取得する。いくつかの実施形態においては、リレーシステムコントローラ308は、リレーシステムノード310から測定値を取得する。代替の実施形態においては、リレーシステムコントローラ308は、リレーシステムノード310のデベロッパから測定値を取得する。リレーシステムコントローラ308は、リレーシステムスマートコントラクト306へとリレーシステムノード310の測定値を転送する。リレーシステムスマートコントラクト306は、今後の使用のためにリレーシステムノード310の測定値を登録(記憶)する。例えば、リレーシステムスマートコントラクト306は、保存されている測定値を認証サービス312から受信したAVR内の別の測定値と比較し得る。
【0066】
図4の例においては、リレーシステムコントローラ308が、認証要求(例えば、チャレンジ)をリレーシステムノード310に送信する(410)。認証要求が、リレーシステムノード310の正当性または有効性を示す認証エビデンスを要求するためにリレーシステムノード310に送信される。いくつかの実施形態においては、認証エビデンスは、リレーシステムノード310の測定値およびリレーシステムノード310の署名を含む。リレーシステムノード310の測定値は、リレーシステムノード310の初期状態のハッシュ値を含み得る。例えば、リレーシステムノード310の測定値は、リレーシステムノード310上で実施されるプロセスコードのハッシュ値を含み得る。
【0067】
認証要求に応答して、リレーシステムノード310が、認証エビデンスを生成する(412)。上述したように、認証エビデンスは、リレーシステムノード310の正当性または有効性を示し、リレーシステムノード310の測定値および署名を含み得る。いくつかの実施形態においては、認証エビデンスは、リレーシステムノード310によって生成された公開鍵をさらに含む。例えば、リレーシステムノード310は、例えば、Rivest-Shamir-Adleman(RSA)アルゴリズムなどといった、所定の鍵生成アルゴリズムを使用して、秘密鍵と公開鍵とを含むランダム暗号鍵ペアを生成し得る。いくつかの例においては、公開鍵は、リレーシステムスマートコントラクト306に送信されることになる認証エビデンスにおいて提供され、リレーシステムスマートコントラクト306とリレーシステムノード310との間の今後の通信のために使用され得る。例えば、リレーシステムノード310は秘密鍵を使用して要求結果を署名し得るし、リレーシステムスマートコントラクト306は公開鍵を使用して署名された要求結果を検証し得る。
【0068】
いくつかの実施形態においては、リレーシステムノード310の測定値は、リレーシステムノード310の初期状態のハッシュ値を含む。認証エビデンス内のリレーシステムノード310の署名は、リレーシステムノード310の認証鍵を使用して署名されている、測定値およびリレーシステムノード310によって生成された公開鍵を含む。いくつかの実施形態においては、リレーシステムノード310の認証鍵は、EPID秘密鍵を含む。EPID秘密鍵を使用して署名された認証エビデンスは、認証エビデンスを生成したデバイスが正規のものであることを証明するために、EPID秘密鍵と対をなすEPID公開鍵を使用して検証側によって検証され得る。
【0069】
リレーシステムノード310が、認証エビデンスをリレーシステムコントローラ308に送信する(414)。リレーシステムコントローラ308に送信される認証エビデンスは、リレーシステムノード310の測定値、リレーシステムノード310によって生成された公開鍵、およびリレーシステムノード310のEPID秘密鍵を使用して署名されている測定値および公開鍵を含むリレーシステムノード310の署名を含み得る。
【0070】
リレーシステムコントローラ308が、認証サービス312へと認証エビデンスを転送する(416)。いくつかの実施形態においては、リレーシステムコントローラ308は、認証検証要求を認証サービス312に送信する。認証検証要求は、リレーシステムノード310から送信された認証エビデンスと、例えば、リレーシステムノード310がSGXプラットフォームサービスを使用しているかどうかを示す記述子などといった、いくつかの補足情報とを含む。
【0071】
認証サービス312が、リレーシステムコントローラ308によって転送された認証エビデンスを受信したことに応答して認証エビデンスを検証する(418)。上述したように、認証エビデンスは、リレーシステムノード310の測定値、リレーシステムノード310によって生成された公開鍵、およびリレーシステムノード310の署名を含む。認証サービス312は、認証サービス312の認証鍵を使用して認証エビデンス内のリレーシステムノード310の署名を検証することによって認証エビデンスを検証し得る。例えば、認証サービス312は、リレーシステムノード310が認証エビデンスを署名するために使用するEPID秘密鍵と対をなす認証検証サーバのEPID公開鍵を使用してリレーシステムノード310の署名を検証する。
【0072】
認証エビデンス内のリレーシステムノード310の署名が有効であると認証サービス312が決定した場合には、認証サービス312は、リレーシステムノード310が正規または正当なデバイスであると決定し得る。認証エビデンス内のリレーシステムノード310の署名が無効であると認証サービス312が決定した場合には、認証サービス312は、リレーシステムノード310が正規のデバイスではないまたは正当なデバイスではないと決定し、リレーシステムノード310から任意の後続のデータおよび要求を拒否し得る。
【0073】
認証サービス312が、認証エビデンスの検証に基づいてAVRを生成する(420)。いくつかの実施形態においては、AVRは、リレーシステムノード310の認証エビデンス、認証検証結果、および認証サービス312のデジタル署名を含み得る。いくつかの実施形態においては、AVRは、リレーシステムノード310の署名を除いてリレーシステムノード310の認証エビデンスを含み得る。例えば、AVRは、リレーシステムノード310の測定値、リレーシステムノード310によって生成された公開鍵、認証検証結果、および認証サービス312の署名を含み得る。
【0074】
AVR内の認証検証結果は、リレーシステムノード310の署名が有効であるかどうかを示す。例えば、認証検証結果は、リレーシステムノード310の署名が有効であることを示す「有効」もしくは「OK」の値または署名が無効であることを示す「無効」の値を含み得る。
【0075】
いくつかの実施形態においては、認証サービス312の署名は、レポート署名鍵を使用して署名されている認証エビデンスおよび認証検証結果を含む。レポート署名鍵は、認証サービス312がAVRを署名するために使用する秘密鍵であり得る。いくつかの実施形態においては、レポート署名鍵は、所定の鍵生成アルゴリズムを使用して認証サービス312によって生成される。例えば、レポート署名鍵は、RSA-Secure Hash Algorithm(SHA)256を使用して生成され得る。レポート署名鍵が、認証サービス312が認証エビデンスを検証するために使用している認証鍵(例えば、EPID公開鍵)とは異なるものであることに留意されたい。
【0076】
いくつかの実施形態においては、認証サービス312が、AVRをリレーシステムコントローラ308に送信する(422)。上述したように、AVRは、リレーシステムノード310の識別の検証についての暗号的に署名されたレポートを含み、リレーシステムノード310の認証エビデンス、認証検証結果、および認証サービス312のデジタル署名を含み得る。
【0077】
いくつかの実施形態においては、リレーシステムコントローラ308が、認証サービス312からAVRを受信した後にリレーシステムスマートコントラクト306へとAVRを転送する(424)。リレーシステムスマートコントラクト306が、AVRを検証する(426)。例えば、リレーシステムスマートコントラクト306は、AVR内の認証サービス312の署名を検証し得る。いくつかの実施形態においては、リレーシステムスマートコントラクト306は、レポート署名証明書を使用して認証サービス312の署名を検証する。レポート署名証明書は、X.509デジタル証明書であり得る。レポート署名証明書は、認証サービス312によって生成されるとともに、認証サービス312がAVRを署名するために使用するレポート署名鍵と対をなす、公開鍵を含み得る。AVR内の認証サービス312の署名が有効であることをリレーシステムスマートコントラクト306が検証した場合には、リレーシステムスマートコントラクト306は、AVRが認証サービス312によって実際に送信されたと決定する。AVR内の認証サービス312の署名が無効であるとリレーシステムスマートコントラクト306が決定した場合には、リレーシステムスマートコントラクト306は、認証検証レポートが正規のものではないと決定し、AVRを拒否することになる。リレーシステムスマートコントラクト306は、さらに、AVR内の認証検証結果を検査して、リレーシステムノード310の認証エビデンスが有効であるかどうかを決定し得る。いくつかの実施形態においては、リレーシステムスマートコントラクト306は、さらに、認証エビデンス内の測定値をリレーシステムスマートコントラクト306に事前に記憶されている測定値と比較して、認証エビデンスが有効であるかどうかを決定する。
【0078】
リレーシステムスマートコントラクト306が、AVRが正規のものであると決定するとともにリレーシステムノード310の認証エビデンスが有効であると決定したことに応答して、有効または正当なデバイスとしてリレーシステムノード310を登録する(428)。リレーシステムスマートコントラクト306は、認証エビデンスに含まれるとともにリレーシステムノード310によって生成される公開鍵をさらに記憶し得る。公開鍵は、リレーシステムスマートコントラクト306とリレーシステムノード310との間の今後の通信のためにリレーシステムスマートコントラクト306によって使用されることになる。
【0079】
図5は、本明細書の実施形態による、信号フロー500の例を図示している。信号フロー500は、本明細書の実施形態による、マルチノードクラスタ309のリレーシステムノード310のノード状態をチェックするためのプロセスを表している。便宜上、プロセスが、1つまたは複数のロケーションに位置する1つまたは複数のコンピュータのシステムによって行われるとともに本明細書に従って適切に行われるものとして説明することにする。例えば、適切にプログラムされた分散システム(例えば、
図1のブロックチェーンシステム100、
図3のシステム300)がそのプロセスを行い得る。
【0080】
一般的に、動作中には、リレーシステムコントローラ308は、マルチノードクラスタ309内のリレーシステムノード310に状態要求を周期的に送信する。リレーシステムノード310は、状態要求を受信すると状態応答を応答する。リレーシステムコントローラ308は、リレーシステムノード310の状態応答に基づいてリレーシステムノード310の状態を記録する。
【0081】
さらに詳細には、リレーシステムコントローラ308が、マルチノードクラスタ309のリレーシステムノード310aに状態要求を送信する(502)。マルチノードクラスタ309は、例えば、310aおよび310bなどといった、複数のリレーシステムノード310を含む。
図5は図示することだけを目的としてリレーシステムノード310aおよび310bを含むように示されていることに留意されたい。マルチノードクラスタ309は、任意の適切な数のリレーシステムノード310を含み得る。
【0082】
リレーシステムノード310aが、状態要求を処理し(504)、状態応答をリレーシステムコントローラ308に送信する(506)。例えば、リレーシステムノード310aは、正常状態となっている場合には、リレーシステムコントローラ308に状態確認メッセージを送信し得る。別の例としては、リレーシステムノード310aは、異常状態となっている場合には、状態要求に応答し得ない。
【0083】
リレーシステムコントローラ308が、リレーシステムノード310aの状態応答に基づいてリレーシステムノード310aの状態を記録する(508)。例えば、リレーシステムコントローラ308は、リレーシステムコントローラ308がリレーシステムノード310から状態確認メッセージを受信した場合には、「可用」なものとしてリレーシステムノード310aの状態を記録する。別の例としては、リレーシステムコントローラ308は、リレーシステムノード310aが所定の時間ウィンドウ内に応答しなかった場合には、「非可用」なものとしてリレーシステムノード310aの状態を記録する。
【0084】
リレーシステムコントローラ308は、例えば、リレーシステムノード310bなどといった、クラスタ内の他のリレーシステムノード310に状態要求を送信し得る。リレーシステムコントローラ308が、リレーシステムノード310bに状態要求を送信し(510)得るし、リレーシステムノード310bが、状態要求を処理し(512)、状態応答をリレーシステムコントローラ308に送信する(514)。リレーシステムコントローラ308が、リレーシステムノード310bの状態応答に基づいてリレーシステムノード310bの状態を記録する(516)。
【0085】
上述したように、リレーシステムコントローラ308は、クラスタ内のリレーシステムノード310のノード状態について周期的にクエリを行い、リレーシステムノード310の状態を記録する。その後、外部データソースからデータについてのクエリを受信すると、リレーシステムコントローラ308は、可用なものとして記録されたリレーシステムノード310のうちの1つを選択してクエリを処理し得る。
【0086】
図6は、データ読み出しを行うためのプロセス600の例を図示している。便宜上、プロセス600が、1つまたは複数のロケーションに位置する1つまたは複数のコンピュータのシステムによって行われるとともに本明細書に従って適切に行われるものとして説明することにする。例えば、適切にプログラムされた分散システム(例えば、
図1のブロックチェーンシステム100、
図3のシステム300)がそのプロセス600を行い得る。
【0087】
一般的に、動作中には、クライアントスマートコントラクト304が、リレーシステムスマートコントラクト306を介してリレーシステムコントローラ308へと中継されることになる要求を生成する。リレーシステムコントローラ308は、マルチノードクラスタ309内の可用なリレーシステムノード310を選択する。選択したリレーシステムノード310が、インターネットデータソース314にクエリを行う。いくつかの例においては、インターネットデータソース314はパブリックデータソースであり、認証情報はアクセスに必要とされない。リレーシステムノード310は、インターネットデータソース314から応答を受信し、応答は、本明細書の実施形態に従って、リレーシステムスマートコントラクト306によって検証され、クライアントスマートコントラクト304に返信される。
【0088】
さらに詳細には、クライアントスマートコントラクト304が、インターネットベースのデータソース314からのデータまたはサービスについての要求を送信する(602)。要求は、クライアントスマートコントラクト304からリレーシステムスマートコントラクト306に送信される。いくつかの例においては、要求は、公的にアクセス可能ウェブサイトからの公的に可用なデータについての要求であり得る。要求は、例えば、インターネットデータソース314のウェブアドレス(URL)および1つまたは複数の要求パラメータ(例えば、データを示すパラメータ、および/または要求されたサービス)などといった、平文部分を含み得る。要求を受信したことに応答して、リレーシステムスマートコントラクト306が、ログメッセージとしてリレーシステムコントローラ308に要求を転送する(604)。
【0089】
リレーシステムコントローラ308が、マルチノードクラスタ309内の複数のリレーシステムノード310からリレーシステムノード310を選択する(606)。例えば、本明細書に記載しているように、リレーシステムコントローラ308は、マルチノードクラスタ309内のリレーシステムノード310に周期的にクエリを行い、リレーシステムノード310の状態を記録する。いくつかの例においては、リレーシステムコントローラ308は、クラスタ内のリレーシステムノード310から可用なものとなっているリレーシステムノード310をランダムに選択する。他の例においては、リレーシステムコントローラ308は、クラスタ内のリレーシステムノード310から可用なものとなっているとともに最も少ない作業負荷を有しているリレーシステムノード310を選択する。
【0090】
リレーシステムコントローラ308が、606において決定されるようなリレーシステムノード310に要求を送信する(608)。いくつかの例においては、リレーシステムコントローラ308は、要求を受信することになるリレーシステムノード310(例えば、リレーシステムコントローラ308によって選択されたリレーシステムノード310)のインジケータとともに要求を送信する。例えば、要求は、リレーシステムノード310の識別子(例えば、URL)を含むようにリレーシステムコントローラ308によって変更され得る。
【0091】
要求を受信したことに応答して、リレーシステムノード310が、インターネットデータソース314にクエリを行う(610)。例えば、リレーシステムノード310は、クエリを作成して、(例えば、HTTP GETメソッドを使用して)インターネットデータソース314からデータを要求し得る。いくつかの例においては、クエリは、1つまたは複数の要求パラメータを含み得る。クエリを受信したことに応答して、インターネットデータソース314が、クエリを処理して、応答を提供する(612)。例えば、インターネットデータソース314は、1つまたは複数の要求パラメータを処理して、1つまたは複数の要求パラメータに応答するデータを識別し、そのデータを含む結果を提供し得る。インターネットデータソース314が、結果をリレーシステムノード310に送信する(614)。
【0092】
リレーシステムノード310が、結果を処理して、応答を提供する(616)。本明細書の実施形態によれば、リレーシステムノード310は、その秘密鍵を使用して結果を署名して、応答を提供する。本明細書に記載しているように、秘密鍵は、リレーシステムノード310のリモート認証中に生成される。さらに詳細には、結果または結果の少なくとも一部(例えば、データ)は、第1のハッシュ値を提供するハッシュ関数を用いてリレーシステムノード310によって処理される。ハッシュ関数の例は、SHA-256を含むがこれに限定されない。リレーシステムノード310は、第1のハッシュ値および秘密鍵に基づいてデジタル署名を生成する。例えば、第1のハッシュ値および秘密鍵は、デジタル署名を提供する署名アルゴリズムによって処理される。リレーシステムノード310は、結果(例えば、データ)およびデジタル署名を含む応答を提供する。リレーシステムノード310が、応答をリレーシステムコントローラ308に送信し(618)、リレーシステムコントローラ308は、応答をリレーシステムスマートコントラクト306に送信する(620)。
【0093】
リレーシステムスマートコントラクト306が、応答を処理して、応答が登録済みのリレーシステムノード310によって送信されているかどうかを検証し、応答の完全性を保証する(622)。上述したように、リレーシステムスマートコントラクト306は、認証プロセス中に認証されたリレーシステムノード310を登録(記憶)する。いくつかの実施形態においては、応答は、リレーシステムノード310の一意な識別情報(例えば、URL)を含み得るし、リレーシステムスマートコントラクト306は、応答内の識別情報を登録済みのリレーシステムノード310の識別情報(例えば、URL)とマッチングし得る。一致するものが存在する場合には、リレーシステムスマートコントラクト306は、応答が登録済みのリレーシステムノード310によって送信されていると決定し、応答の完全性をチェックすることに取り掛かり得る。一致するものが存在しない場合には、リレーシステムスマートコントラクト306は、応答が登録済みのリレーシステムノード310によって送信されていないと決定し、応答を拒否し得る。
【0094】
本開示の実施形態によれば、リレーシステムスマートコントラクト306は、さらに、ハッシュ関数(例えば、SHA-256)を用いて結果(例えば、データ)を処理して、第2のハッシュ値を提供する。リレーシステムスマートコントラクト306は、検証アルゴリズムによってデジタル署名およびリレーシステムノード310の公開鍵を処理して、第1のハッシュ値を提供する。例えば、リレーシステムスマートコントラクト306は、公開鍵を使用してデジタル署名を復号して、第1のハッシュ値を明らかにする。本明細書に記載しているように、公開鍵は、リレーシステムノード310のリモート認証中に生成される。
【0095】
リレーシステムスマートコントラクト306は、第1のハッシュ値および第2のハッシュ値に基づいて。応答の完全性を検証する例えば、リレーシステムスマートコントラクト306は、第1のハッシュ値を第2のハッシュ値と比較する。第1のハッシュ値と第2のハッシュ値とが同一でなければ、応答は、改竄されており、信頼できない。それゆえ、リレーシステムスマートコントラクト306は、任意の下流コンポーネント(例えば、クライアントスマートコントラクト)に結果(例えば、データ)を提供しない、および/または、フラグエラーのフラグを立て得る。第1のハッシュ値と第2のハッシュ値とが同一であれば、応答の完全性は瑕疵がない。それゆえ、リレーシステムスマートコントラクト306が、さらなる処理のためにクライアントスマートコントラクト304に結果(例えば、データ)を提供する(624)。
【0096】
図7は、本明細書の実施形態により実行され得るプロセス700の例を図示している。いくつかの実施形態においては、例示的なプロセス700は、1つまたは複数のコンピューティングデバイスを使用して実行される1つまたは複数のコンピュータ実行可能プログラムを使用して行われ得る。いくつかの例においては、例示的なプロセス700は、ブロックチェーンネットワークの外部にあるデータを読み出すためのリレーシステム(例えば、
図3のリレーシステムスマートコントラクト306、リレーシステムコントローラ308、リレーシステムノード310)によって行われ得る。
【0097】
要求を受信する(702)。例えば、
図3のリレーシステムコントローラ308は、リレーシステムスマートコントラクト306を介してクライアントスマートコントラクト304から要求を受信する。いくつかの例においては、本明細書に記載しているように、クライアントスマートコントラクト304は、クエリを行われることになるデータソースの識別子(例えば、URL)および1つまたは複数の要求パラメータを含むように要求を生成する。リレーシステムノード310を選択する(704)。例えば、リレーシステムコントローラ308は、マルチノードクラスタ309内のリレーシステムノード310のうちの可用なものとなっている1つを選択する。いくつかの実施形態においては、リレーシステムコントローラ308は、クラスタ内の可用なリレーシステムノード310をランダムに選択する。代替の実施形態においては、リレーシステムコントローラ308は、クラスタ内のリレーシステムノード310のうちの最も少ない作業負荷を有する可用なリレーシステムノード310を選択する。要求を送信する(706)。例えば、リレーシステムコントローラ308は、選択したリレーシステムノード310に要求を転送する。
【0098】
データソースにクエリを行う(708)。例えば、リレーシステムノード310は、既に受信された要求(例えば、元の要求)の1つまたは複数の要求パラメータを含むクエリ(例えば、新規要求)を構築する。例えば、新規要求は、クエリを行われることになるインターネットデータソース314のウェブアドレスを含む平文データ要素と、1つまたは複数の要求パラメータとを含み得る。リレーシステムノード310は、クエリを使用してインターネットベースのデータソース504にクエリを行う。
【0099】
結果をデータソースから受信する(710)。いくつかの例においては、インターネットベースのデータソース314は、クエリを処理し、要求結果(例えば、データ値)をリレーシステムノード310に返信する。応答を準備し(712)、応答を送信する(714)。例えば、リレーシステムノード310は、本明細書に記載しているように、リレーシステムノード310の秘密鍵を使用して署名された要求結果を含む署名を生成し得る。リレーシステムノード310が要求結果を署名するために使用する秘密鍵は、リレーシステムノード310のリモート認証の早期の間に生成される。
【0100】
応答を受信し、応答が有効であるかどうかを決定する(716)。例えば、リレーシステムスマートコントラクト306は、応答を処理して、応答が登録済みのリレーシステムノード310によって送信されていることを検証し、応答の完全性を保証する。いくつかの実施形態においては、応答は、リレーシステムノード310の一意な識別情報(例えば、URL)を含み得るし、リレーシステムスマートコントラクト306は、識別情報を登録済みのリレーシステムノード310の識別情報(例えば、URL)とマッチングし得る。一致するものが存在する場合には、リレーシステムスマートコントラクト306は、応答が登録済みのリレーシステムノード310によって送信されていると決定し、応答の完全性をチェックすることに取り掛かり得る。一致するものが存在しない場合には、リレーシステムスマートコントラクト306は、応答が登録済みのリレーシステムノード310によって送信されていないと決定する。
【0101】
応答の完全性をチェックするために、リレーシステムスマートコントラクト306は、要求結果(例えば、データ値)に基づいてハッシュ値を計算する。その後、リレーシステムスマートコントラクト306は、公開鍵を使用して要求結果のハッシュ値を取得し、それが計算したハッシュ値と一致するかどうかを決定する。2つのハッシュ値が一致する場合には、リレーシステムスマートコントラクト306は、要求結果が有効であると決定する。2つのハッシュ値が一致しない場合には、リレーシステムスマートコントラクト306は、要求結果が無効であると決定し、要求結果を拒否し得る。応答が登録済みのリレーシステムノード310によって送信されていない場合および/または要求結果が無効である場合には、エラーを示し(718)、例示的なプロセス700は終了する。応答が登録済みのリレーシステムノード310によって送信されている場合には、要求結果は有効であり、要求結果の完全性は瑕疵がなく、要求結果が使用される(720)。例えば、結果は、さらなる処理のためにクライアントスマートコントラクト304に提供される。
【0102】
本明細書に記載しているように、本明細書の実施形態は、従来のシステムと比較して1つまたは複数の技術的効果を達成している。いくつかの実施形態においては、リレーシステムノードのマルチノードクラスタを外部データソースからデータおよび/またはサービスを読み出しまたはアクセスするために提供している、ここで、マルチクラスタ内のリレーシステムノードの状態は、リレーシステムコントローラによって周期的にチェックおよび記録される。本明細書に記載しているように、マルチノードクラスタにデプロイされているリレーシステムノードを用いて、リレーシステムコントローラは、クライアントサービス要求をマルチノードクラスタ内の可用なリレーシステムノードに自動的に割り当てることができ、個々のノードの故障に起因するサービス不可用性を引き起こすことを回避している。そのため、本明細書の実施形態は、インターネットデータソースにクエリを行うためのリレーシステムの総合的なサービス可用性を改善している。いくつかの実施形態においては、外部データソースからブロックチェーンネットワークに戻されるように提供される応答の完全性が保証される。それゆえ、本明細書の実施形態は、ブロックチェーンネットワークとブロックチェーンネットワークの外部にあるデータを読み出すために使用されるリレーシステムのコンポーネントとの間の通信の完全性を改善している。このように、不正ユーザに対する潜在的攻撃チャネルを抑制してセキュリティを強化している。いくつかの実施形態においては、リレーシステムは、ユーザとリレーシステムノードとの間の直接的な接点を回避しており、それによって、リレーシステムノードの位置またはアクセスポイントがさらされることを回避している。そのため、例えばDDoS攻撃などといった多くの形式でネットワークを通じて不正な動作主体によってリレーシステムノードが発見および攻撃される可能性が低くなる。このことは、リレーシステムノードのセキュリティを改善しており、それによって、ブロックチェーンネットワークとリレーシステムノードとの間の通信のセキュリティをさらに改善している。
【0103】
図8は、本明細書の実施形態による、装置800のモジュールの例を図示している。装置800は、ブロックチェーンネットワーク内で実行されるリレーシステムスマートコントラクトの例示的な実施形態であり得る。いくつかの例においては、リレーシステムスマートコントラクトは、ブロックチェーンネットワークの外部にあるとともにブロックチェーンネットワークの外部にあるデータソースにクエリを行うリレーシステムの1つまたは複数のコンポーネントに要求を発行しそのリレーシステムの1つまたは複数のコンポーネントから応答を受信する。
【0104】
装置800は、上記で説明した実施形態に対応し得るし、装置800は、データソースからのデータのための要求を受信するための受信モジュール802と、ブロックチェーンネットワークの外部にあるマルチノードクラスタに要求を送信するための送信モジュール804であって、マルチノードクラスタは、複数のリレーシステムコンポーネントを含む、送信モジュール804と、マルチノードクラスタのリレーシステムコンポーネントから結果を受信するための受信モジュール806であって、結果は、リレーシステムコンポーネントの秘密鍵を使用してデジタル署名される、受信モジュール806と、リレーシステムスマートコントラクトにおいてリレーシステムコンポーネントが登録されていることを検証するための検証モジュール808と、リレーシステムコンポーネントが登録されていることを検証したことに応答して、リレーシステムコンポーネントの公開鍵と結果のデジタル署名とに基づいて結果の完全性を検証するための検証モジュール810と、結果の完全性を検証したことに応答して、結果をブロックチェーンネットワーク内のクライアントに送信するための送信モジュール812とを含む。
【0105】
一般に、本明細書において説明した発明特定事項の革新的な態様は、ブロックチェーンネットワーク内で実行されるリレーシステムスマートコントラクトによってデータソースからのデータのための要求を受信するステップと、リレーシステムスマートコントラクトによって、ブロックチェーンネットワークの外部にあるとともにマルチノードクラスタを含むリレーシステムに要求を送信するステップであって、マルチノードクラスタは、複数のリレーシステムノードを含む、ステップと、リレーシステムスマートコントラクトによってマルチノードクラスタのリレーシステムノードから提供される結果を受信するステップであって、結果は、リレーシステムノードの秘密鍵を使用してデジタル署名される、ステップと、リレーシステムスマートコントラクトにおいてリレーシステムノードが登録されていることをリレーシステムスマートコントラクトによって検証するステップと、リレーシステムノードが登録されていることを検証したことに応答して、リレーシステムノードの公開鍵と結果のデジタル署名とに基づいてリレーシステムスマートコントラクトによって結果の完全性を検証するステップと、結果の完全性を検証したことに応答して、結果をブロックチェーンネットワーク内のクライアントに送信するステップとのアクションにおいて具現化され得る。
【0106】
前述のおよび他の実施形態の各々は、リレーシステムコントローラが、マルチノードクラスタ内の複数のリレーシステムノードに状態クエリを周期的に送信して、複数のリレーシステムノードから状態応答を受信し、リレーシステムコントローラが、所定の時間ウィンドウ内にリレーシステムノードから状態応答を受信した場合には、可用なものとしてマルチノードクラスタ内のリレーシステムノードの状態を記録し、リレーシステムコントローラが、所定の時間ウィンドウ内に状態応答を受信しなかった場合には、非可用なものとしてマルチノードクラスタのリレーシステムノードの状態を記録することと、リレーシステムコントローラが、可用な状態を有しているとマルチノードクラスタ内のリレーシステムノードを選択し、要求をリレーシステムノードに送信することと、リレーシステムスマートコントラクトが、第1のハッシュ値を第2のハッシュ値と比較することによって結果の完全性を検証し、第1のハッシュ値が、公開鍵を使用してデジタル署名を復号することによって決定され、第2のハッシュ値が、結果およびハッシュ関数を使用して計算されることと、リレーシステムノードが、高信頼実行環境(TEE)を実行し、リレーシステムノードの秘密鍵と公開鍵とが、TEEの認証プロセス中に設定されることと、認証プロセスが、マルチノードクラスタ内の各リレーシステムノードについてリレーシステムコントローラによって行われ、リレーシステムコントローラが、各リレーシステムコンポーネントの公開鍵をリレーシステムスマートコントラクトに提供することと、データソースが、インターネットベースのデータソースを含むことと、クライアントが、クライアントスマートコントラクトを含むことといった、特徴のうちの1つまたは複数を単独または組合せで必要に応じて含み得る。
【0107】
上記の実施形態において示したシステム、装置、モジュール、またはユニットは、コンピュータチップまたはエンティティを使用して実装され得る、または、ある機能を有する製品を使用して実装され得る。典型的な実施形態デバイスは、コンピュータであり、コンピュータは、パーソナルコンピュータ、ラップトップコンピュータ、セルラ電話、カメラ電話、スマートフォン、携帯情報端末、メディアプレーヤ、ナビゲーションデバイス、電子メール送受信デバイス、ゲームコンソール、タブレットコンピュータ、ウェアラブルデバイス、またはこれらのデバイスの任意の組合せであり得る。
【0108】
装置内の各ユニットの機能および役割の実施プロセスについては、前回の方法における対応するステップの実施プロセスを参照することが可能である。簡潔にするために詳細はここでは省略する。
【0109】
装置の実施形態が方法の実施形態に基本的に対応するため、関連する部分については、方法の実施形態における関連する説明を参照されたい。上記で説明した装置の実施形態は一例に過ぎない。別個の部分として説明したユニットは、物理的に分離され得るしまたはされ得ない。ユニットとして図示した部分は、物理ユニットであり得るしまたはあり得ないし、1つの位置にあり得るし、または多数のネットワークユニットに分散され得る。モジュールの一部またはすべては、本明細書のソリューションの目的を達成するための実際の要求に基づいて選択され得る。当業者は、創造的努力無しで本出願の実施形態を理解および実施できよう。
【0110】
本明細書において説明した発明特定事項ならびにアクションおよび処理の実施形態は、本明細書において開示した構造およびそれらの構造的均等物を含む、デジタル電子回路の形で、有形に具現化されたコンピュータソフトウェアまたはファームウェアの形で、コンピュータハードウェアの形で、またはそれらの組合せのうちの1つまたは複数で実装され得る。本明細書において説明した発明特定事項の実施形態は、データ処理装置による実行のためにまたはデータ処理装置の処理を制御するために、コンピュータプログラムキャリア上に符号化された、例えばコンピュータプログラム命令の1つまたは複数のモジュールといった1つまたは複数のコンピュータプログラムとして実装され得る。キャリアは、有形非一時的コンピュータ記憶媒体であり得る。あるいはまたは加えて、キャリアは、データ処理装置による実行に適した受信機装置への伝送のために情報を符号化するために生成された、人為的に生成した伝搬信号、例えば、機械生成された電気信号、光信号、または電磁気信号であり得る。コンピュータ記憶媒体は、機械可読ストレージデバイス、機械可読ストレージ回路基板、ランダムもしくはシリアルアクセスメモリデバイス、またはそれらのうちの1つまたは複数の組合せであり得るもしくは一部であり得る。コンピュータ記憶媒体は伝搬信号ではない。
【0111】
「データ処理装置」という用語は、例として、プログラマブルプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するためのあらゆる種類の装置、デバイス、およびマシンを含む。データ処理装置は、特殊用途ロジック回路、例えば、FPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)、またはGPU(グラフィック処理ユニット)を含み得る。装置はまた、ハードウェアに加えて、コンピュータプログラムのための実行環境を作成するコード、例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの1つまたは複数の組合せを構成するコードを含み得る。
【0112】
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリ、モジュール、ソフトウェアモジュール、エンジン、スクリプト、またはコードとも称し得るまたは記述し得る、コンピュータプログラムは、コンパイル型もしくはインタプリタ型言語、または宣言型もしくは手続き型言語を含む、任意の形式のプログラミング言語で書かれ得るし、スタンドアロンプログラムとして、またはモジュール、コンポーネント、エンジン、サブルーチン、もしくはコンピューティング環境における実行に適した他のユニットとして、といったことを含む任意の形式で、デプロイされ得る。環境は、1つまたは複数のロケーションにおいてデータ通信ネットワークによって相互接続される1つまたは複数のコンピュータを含み得る。
【0113】
コンピュータプログラムは、ファイルシステム内のファイルに対応し得るが、必ずしも必要ではない。コンピュータプログラムは、例えば、マークアップ言語ドキュメントに記憶されている1つまたは複数のスクリプトといった、他のプログラムまたはデータを保持するファイルの一部に、当該プログラム専用の単一のファイルに、または、例えば、1つまたは複数のモジュール、サブプログラム、またはコードの一部を記憶するファイルといった、複数の協調ファイルに、記憶され得る。
【0114】
本明細書において説明したプロセスおよびロジックフローは、1つまたは複数のコンピュータプログラムを実行し、入力データを処理して出力を生成することによって処理を行う、1つまたは複数のコンピュータによって行われ得る。プロセスおよびロジックフローはまた、例えばFPGA、ASIC、またはGPUといった特殊用途ロジック回路によって、または、特殊用途ロジック回路と1つまたは複数のプログラマブルコンピュータとの組合せによって、実装され得る。
【0115】
コンピュータプログラムの実行に適したコンピュータは、汎用もしくは特殊用途マイクロプロセッサもしくはその両方、または任意の他の種類の中央処理ユニットに基づき得る。一般的に、中央処理ユニットは、リードオンリーメモリまたはランダムアクセスメモリまたはその両方から命令およびデータを受信することになる。コンピュータの要素は、命令を実行するための中央処理ユニットと、命令およびデータを記憶するための1つまたは複数のメモリデバイスとを含み得る。中央処理ユニットおよびメモリは、特殊用途ロジック回路によって補完され得る、またはそれに組み込まれ得る。
【0116】
一般的に、コンピュータはまた、1つまたは複数のマスストレージデバイスを含むことになる、または、1つまたは複数のマスストレージデバイスからデータを受信もしくは1つまたは複数のマスストレージデバイスにデータを送信することが動作可能なように結合されることになる。マスストレージデバイスは、例えば、磁気ディスク、光磁気ディスク、もしくは光ディスク、またはソリッドステートドライブであり得る。しかしながら、コンピュータは、そのようなデバイスを必ずしも有する必要はない。さらに、コンピュータは、数例挙げるとすれば、例えば、モバイル電話、携帯情報端末(PDA)、モバイルオーディオもしくはビデオプレーヤ、ゲームコンソール、Global Positioning System(GPS)受信機、または例えばユニバーサルシリアルバス(USB)フラッシュドライブなどのポータブルストレージデバイスといった別のデバイスに組み込まれ得る。
【0117】
ユーザとのインタラクションを提供するために、本明細書において説明した発明特定事項の実施形態は、ユーザに情報を表示するための、例えばLCD(液晶ディスプレイ)モニタといった、表示デバイスと、コンピュータに入力を提供することを可能にする、例えば、キーボード、および例えば、マウス、トラックボール、またはタッチパッドなどのポインティングデバイスといった、入力デバイスとを有するコンピュータ上で実装され得る、または、そのようなコンピュータと通信するように構成され得る。同様に、他の種類のデバイスがユーザとのインタラクションを提供するために使用され得る。例えば、ユーザに提供されるフィードバックは、例えば、視覚フィードバック、聴覚フィードバック、または触覚フィードバックといった任意の形式の感覚フィードバックであり得るし、ユーザからの入力は、音響、音声、または触覚入力を含む任意の形式で受信され得る。加えて、コンピュータは、ユーザによって使用されるデバイスにドキュメントを送信することおよびユーザによって使用されるデバイスからドキュメントを受信することによって、例えば、ユーザのデバイス上のウェブブラウザから受信した要求に応答してウェブブラウザにウェブページを送信することによって、または、例えばスマートフォンもしくは電子タブレットといったユーザデバイス上で動作するアプリとのインタラクションを行うことによって、ユーザとのインタラクションを行い得る。また、コンピュータは、メッセージングアプリケーションを動作する例えばスマートフォンといったパーソナルデバイスにテキストメッセージまたは他の形式のメッセージを送信し、その返信としてユーザから応答メッセージを受信することによって、ユーザとのインタラクションを行い得る。
【0118】
本明細書は、システム、装置、およびコンピュータプログラムコンポーネントに関連して「ように構成される」という用語を使用している。特定の処理またはアクションを行うように構成される1つまたは複数のコンピュータのシステムとは、処理においてシステムに処理またはアクションを行わせるソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せがインストールされているシステムを意味する。特定の処理またはアクションを行うように構成される1つまたは複数のコンピュータプログラムとは、データ処理装置によって実行されると装置に処理またはアクションを行わせる命令を含む1つまたは複数のプログラムを意味する。特定の処理またはアクションを行うように構成される特殊用途ロジック回路とは、処理またはアクションを行う電子ロジックを有する回路を意味する。
【0119】
本明細書は多くの特定の実施形態の詳細を含んでいるが、これらを、特許請求の範囲そのものによって定義される、主張しているものについての範囲に対する限定として解釈すべきではなく、むしろ特定の実施形態に固有のものであり得る特徴の説明として解釈すべきである。別個の実施形態に即して本明細書において説明したある特徴もまた、組み合わせることで単一の実施形態で実現され得る。反対に、単一の実施形態に即して説明した様々な特徴もまた、別々に複数の実施形態でまたは任意のサブコンビネーションで実現され得る。さらに、ある組合せで動作するものとして特徴を上記で説明している場合があるが、たとえ最初はそのように主張していたとしても、いくつかのケースにおいては、主張した組合せのうちの1つまたは複数の特徴をその組合せから削除し得るし、主張したものをサブコンビネーションまたはサブコンビネーションの変形とし得る。
【0120】
同様に、処理を特定の順序で図面に図示するとともに特許請求の範囲に記載しているが、このことを、示した特定の順序でもしくは一連の順序でそのような処理を行う必要があると理解すべきではないし、または、望ましい結果を達成するために図示した処理のすべてを行う必要があると理解すべきではない。ある環境においては、マルチタスク処理および並行処理が有利となり得る。さらに、上記で説明した実施形態における様々なシステムモジュールおよびコンポーネントの分離がすべての実施形態においてそのような分離を必要とすると理解すべきではなく、説明したプログラムコンポーネントおよびシステムは一般的に単一のソフトウェア製品に一緒に統合され得るまたは複数のソフトウェア製品にパッケージ化され得ると理解されたい。
【0121】
発明特定事項の特定の実施形態を説明してきた。他の実施形態も以下の特許請求の範囲の範囲内にある。例えば、特許請求の範囲に記載のアクションは、異なる順序で行われ得るし、それでも望ましい結果を達成し得る。一例として、添付の図面に図示したプロセスは、望ましい結果を達成するために示した特定の順序または一連の順序を必ずしも必要とするわけではない。いくつかのケースにおいては、マルチタスク処理およびパラレル処理が有利となり得る。