(57)【要約】  TEE内で実行されることが予期されていたサブロジックコードが実際に実行されたことと、結果として生じるデータが信頼できることとを証明するプログラム実行およびデータ証明スキームのための方法、システム、および装置であり、コンピュータ記憶媒体上に符号化されたコンピュータプログラムを含む。いくつかの実施形態においては、複数のサブロジックコードのうちの各サブロジックコードが、登録されるとともにTEE内に記憶されており、サブロジックコードに対応する鍵ペア(秘密鍵、公開鍵)が生成される。クライアントは、公開鍵を受信および記憶し、実行されることになるサブロジックの識別子とともにTEEに要求を送信する。識別子に対応するサブロジックコードは、サブロジックコードの秘密鍵を使用して生成されるデジタル署名を使用して結果を署名する、TEE内で実行される。クライアントは、サブロジックコードのデジタル署名と公開鍵とに基づいて結果を検証する。
2020522034.tif 000002
【特許請求の範囲】
【請求項１】
高信頼実行環境(TEE)内のサブロジックコードを実行するためのプログラム実行およびデータ証明のためのコンピュータ実施方法であって、前記方法は、
クライアントデバイスによって、ノードに要求を送信するステップであって、前記ノードは、TEE内の高信頼プログラムを実行し、前記要求は、識別子と1つまたは複数の要求パラメータとを含み、前記識別子は、前記サブロジックコードを識別する、ステップと、
前記クライアントデバイスによって、前記要求に対する応答を受信するステップであって、前記応答は、結果データとデジタル署名とを含み、前記結果データは、前記TEE内の前記サブロジックコードを使用した前記1つまたは複数の要求パラメータの処理によって生成され、前記デジタル署名は、前記サブロジックコードの秘密コード鍵を使用して生成される、ステップと、
前記クライアントデバイスによって、前記デジタル署名と前記サブロジックコードの公開コード鍵とを使用して前記結果データを検証するステップと
を含む、方法。
【請求項２】
前記クライアントデバイスによって、前記TEE内の前記高信頼プログラムに前記サブロジックコードを登録するために登録要求を送信するステップであって、前記登録要求は、前記識別子と前記サブロジックコードとを含む、ステップと、
前記クライアントデバイスによって、前記高信頼プログラムから登録結果を受信するステップであって、前記登録結果は、前記サブロジックコードの前記公開コード鍵を含む、ステップと
をさらに含む、請求項1に記載の方法。
【請求項３】
前記高信頼プログラムのデジタル署名と前記高信頼プログラムの公開鍵とを使用して前記登録結果を検証するステップであって、前記高信頼プログラムの前記デジタル署名は、前記高信頼プログラムの秘密鍵を使用して生成され、前記高信頼プログラムの前記公開鍵と前記秘密鍵とは、前記高信頼プログラムの認証の間に鍵ペアとして生成される、ステップをさらに含む、請求項2に記載の方法。
【請求項４】
前記サブロジックコードは、前記識別子に基づいてコンピュータ可読メモリから読み出され、前記結果を生成するために前記TEE内で実行される、請求項1から3のいずれか一項に記載の方法。
【請求項５】
前記サブロジックコードは、前記ノードに記憶されている複数のサブロジックコードのうちの1つである、請求項1から4のいずれか一項に記載の方法。
【請求項６】
前記公開コード鍵と前記秘密コード鍵とは、前記TEE内の前記サブロジックコードの登録の間にコード鍵ペアとして生成される、請求項1から5のいずれか一項に記載の方法。
【請求項７】
前記要求は、前記結果データを提供するために実行されることになる前記サブロジックコードのバージョンを示すバージョン番号をさらに含む、請求項1から6のいずれか一項に記載の方法。
【請求項８】
前記クライアントデバイスは、ブロックチェーンネットワーク内のクライアントノードを含む、請求項1から7のいずれか一項に記載の方法。
【請求項９】
高信頼実行環境(TEE)内のプログラム実行およびサブロジックコード実行のためのデータ証明のための装置であって、前記装置は、請求項1から8のいずれか一項に記載の方法を行うための複数のモジュールを含む、装置。
【請求項１０】
1つまたは複数のコンピュータと、
前記1つまたは複数のコンピュータに結合されているとともに、請求項1から8のいずれか一項に記載の方法を行うように前記1つまたは複数のコンピュータによって実行可能な命令を記憶している1つまたは複数のコンピュータ可読メモリと
を含む、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書は、高信頼実行環境(TEE)内で実行されるプログラムのためのプログラム実行およびデータ証明に関する。
【背景技術】
【０００２】
コンセンサスネットワークおよび/またはブロックチェーンネットワークとも称し得る、分散型台帳システム(DLS)は、関与エンティティが安全かつ変更不可能な形でデータを記憶することを可能にする。DLSは、任意の特定のユースケースを指すのではなく、ブロックチェーンネットワークを一般的に指す。例示的なタイプのブロックチェーンネットワークは、コンセンサスプロセスを制御するエンティティのグループを選択するために提供されるコンソーシアムブロックチェーンネットワークを含み得るし、アクセス制御レイヤを含む。
【０００３】
所謂、高信頼実行環境(TEE)は、ハードウェアの動作環境から隔離されたハードウェア(1つまたは複数のプロセッサ、メモリ)における高信頼環境である。TEEは、実行されるコードおよびメインプロセッサ内にロードされるまたはメインプロセッサから提供されるデータの機密性および完全性を保証する、プロセッサの独立したセキュアなエリアである。しかしながら、コードの実行に先立って、認証プロセスは、TEEが、予期されたように動作し、そこで実行されると予期されるコードを実行していることを検証(証明)するために行われる。
【０００４】
いくつかの事例においては、TEEにおいて実行されるコードは、ステートフルサブロジックを実行する。すなわち、異なるサブロジックが、それぞれの状態に応じてTEE内で実行され得る。それゆえ、クライアントがTEE内で実行されるプログラムに対する呼び出しを行う場合には、呼び出しは、要求パラメータと、サブロジックコードと、サブロジックコードの状態データとを含む。TEEにおいて実行されるプログラムは、サブロジックコードおよび状態データをロードし、要求パラメータに基づいてサブロジックを実行してクライアントに結果を提供する。しかしながら、プログラムの静的コードおよび静的データのみが、測定され、認証プロセスにおいてリモートで検証される。それゆえ、TEEにおいて実行されるプログラムは、予期されるサブロジックが実行されたことと、返信された結果が信頼できるものであることとについての証明を提供する必要がある。
【０００５】
TEE内で実行されるプログラムのためのプログラム実行およびデータ証明について技法がこれまでも提案されてきたが、セキュリティおよびリソース消費の問題に対処するより効率的なソリューションが有利なものとなるであろう。
【発明の概要】
【課題を解決するための手段】
【０００６】
本明細書は、プログラム実行のための技術および高信頼実行環境(TEE)内で実行されるプログラムのためのデータ証明を説明している。
【０００７】
一般に、本明細書において説明した発明特定事項の革新的な態様は、TEE内で実行されることが予期されていたサブロジックコードが実際に実行されたことと、結果として生じるデータが信頼できることとを証明するプログラム実行およびデータ証明スキームを目的としている。いくつかの実施形態においては、複数のサブロジックコードのうちの各サブロジックコードが、登録されるとともにTEE内に記憶されており、サブロジックコードに対応する鍵ペア(秘密鍵、公開鍵)が生成される。クライアントは、公開鍵を受信および記憶する。クライアントがTEE内で実行されるプログラムに要求を送信する場合には、要求は、実行されることになるサブロジックの識別子を含む。TEEは、識別子に対応する保存されているサブロジックを読み出し、サブロジックコードを実行し、結果を提供する。TEEは、サブロジックコードの秘密鍵を使用して生成されるデジタル署名を使用して結果を署名する。クライアントは、結果を受信し、サブロジックコードのデジタル署名と公開鍵とに基づいて結果を検証する。
【０００８】
特定の実施形態において提供したように本明細書において説明した発明特定事項は、以下の技術的利点のうちの1つまたは複数を実現する。例えば、実行されることになるサブロジックコードの識別子のみが、サブロジックコードそのものの代わりに、クライアントから要求において送信される。このことは、要求のサイズを大幅に低減することになり、そのことが、コンピューティングリソース(例えば、プロセッサ、メモリ、ネットワーク帯域幅)を節約し、ネットワークボトルネックを軽減することになる。さらに、要求を受信したことに応答して、高信頼プログラムが要求において搬送されたサブロジックコードを解析およびロードする必要がないため、処理が増加することを回避している。別の例としては、各要求を処理した後に、高信頼プログラムは、サブロジックコード全体ではなく結果を署名するだけであり、クライアントは、署名された結果をチェックするだけである。これらのアクティビティの両方が、従来のアプローチと比較して低減された処理をもたらすことになる。さらに、本明細書の実施形態は、高信頼プログラムによるサブロジックコードの使用のスケーラビリティおよびそのバリエーションを改善している。
【０００９】
本明細書はまた、1つまたは複数のプロセッサに結合されるとともに命令を記憶している1つまたは複数の非一時的コンピュータ可読記憶媒体を提供しており、命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに本明細書で提供した方法の実施形態による動作を行わせる。
【００１０】
本明細書は、本明細書で提供している方法を実施するためのシステムをさらに提供している。システムは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサに結合されるとともに命令を記憶しているコンピュータ可読記憶媒体とを含み、命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに本明細書で提供した方法の実施形態による動作を行わせる。
【００１１】
本明細書による方法が本明細書に記載の態様と特徴との任意の組合せを含み得ることは諒解されよう。すなわち、本明細書による方法は、特に本明細書に記載の態様と特徴との組合せに限定されるわけではなく、提供した態様と特徴との任意の組合せも含む。
【００１２】
本明細書の1つまたは複数の実施形態の詳細を添付の図面および以下の説明に記載している。本明細書の他の特徴および利点が、説明および図面から、および特許請求の範囲から明らかとなるであろう。
【図面の簡単な説明】
【００１３】
【図１】本明細書の実施形態を実行するために使用され得る環境の例を図示している図である。
【図２】本明細書の実施形態による、概念的機構の例を図示している図である。
【図３】本明細書の実施形態による、システムの例を図示している図である。
【図４】本明細書の実施形態による、信号フローの例を図示している図である。
【図５】本明細書の実施形態による、信号フローの例を図示している図である。
【図６】本明細書の実施形態による、信号フローの例を図示している図である。
【図７Ａ】本明細書の実施形態により実行され得るプロセスの例を図示している図である。
【図７Ｂ】本明細書の実施形態により実行され得るプロセスの例を図示している図である。
【図８】本明細書の実施形態による、装置のモジュールの例を図示している図である。
【００１４】
類似の参照番号および様々な図面内の記号は類似の要素を示す。
【発明を実施するための形態】
【００１５】
本明細書は、プログラム実行のための技術および高信頼実行環境(TEE)内で実行されるプログラムのためのデータ証明を説明している。より詳細には、ここでさらに詳細に説明しているように、本明細書の実施形態は、TEE内で実行されることが予期されていたサブロジックコードが実際に実行されたことと、結果として生じるデータが信頼できることとを証明するプログラム実行およびデータ証明スキームを目的としている。いくつかの実施形態においては、複数のサブロジックコードのうちの各サブロジックコードが、登録されるとともにTEE内に記憶されており、サブロジックコードに対応する鍵ペア(秘密鍵、公開鍵)が生成される。クライアントは、公開鍵を受信および記憶する。クライアントがTEE内で実行されるプログラムに要求を送信する場合には、要求は、実行されることになるサブロジックの識別子を含む。TEEは、識別子に対応する保存されているサブロジックを読み出し、サブロジックコードを実行し、結果を提供する。TEEは、サブロジックコードの秘密鍵を使用して生成されるデジタル署名を使用して結果を署名する。クライアントは、結果を受信し、サブロジックコードのデジタル署名と公開鍵とに基づいて結果を検証する。本開示の実施形態によれば、実行されることになるサブロジックコードの識別子のみが、サブロジックコードそのものの代わりに、クライアントから要求において送信される。このことは、要求のサイズを大幅に低減することになり、そのことが、コンピューティングリソース(例えば、プロセッサ、メモリ、ネットワーク帯域幅)を節約し、ネットワークボトルネックを軽減することになる。
【００１６】
本明細書の実施形態についてのさらなる状況をあげるとすれば、上述したように、コンセンサスネットワーク(例えば、ピア・ツー・ピアノードで構成される)およびブロックチェーンネットワークとも称し得る、分散型台帳システム(DLS)は、関与エンティティが安全かつ変更不可能な形でトランザクションを実施しデータを記憶することを可能にする。ブロックチェーンという用語は、特定のネットワークおよび/またはユースケースに一般的に関連付けられているが、ブロックチェーンは、任意の特定のユースケースを指すわけではなくDLSを一般的に指すために本明細書では使用している。
【００１７】
ブロックチェーンは、トランザクションが変更不可能となる方法でトランザクションを記憶するデータ構造である。そのため、ブロックチェーン上に記録されるトランザクションは、信頼性のあるものおよび信頼できるものとなる。ブロックチェーンは、1つまたは複数のブロックを含む。チェーン内の各ブロックは、前のブロックの暗号ハッシュを含めることによって、チェーン内のその直前にある前のブロックに連結される。各ブロックはまた、タイムスタンプ、それ自身の暗号ハッシュ、および1つまたは複数のトランザクションを含む。ブロックチェーンネットワークのノードによって既に検証されているトランザクションは、ハッシュ化され、Merkleツリーに符号化される。Merkleツリーは、ツリーのリーフノードにおけるデータがハッシュ化され、ツリーの各ブランチにおけるすべてのハッシュがブランチのルートにおいて連結されるデータ構造である。このプロセスは、ツリー全体のルートまでツリーの上方へと進行し続け、ツリー全体のルートは、ツリー内のすべてのデータを表すハッシュを記憶している。ツリーに記憶されているトランザクションであることを意味するハッシュは、それがツリーの構造と一致しているかどうかを決定することによって素早く検証され得る。
【００１８】
ブロックチェーンは、トランザクションを記憶するための分散化または少なくとも部分的に分散化されたデータ構造である一方で、ブロックチェーンネットワークは、トランザクションをブロードキャストすること、検証すること、および有効性を確認することなどによって、1つまたは複数のブロックチェーンを管理、更新、および維持管理するコンピューティングノードのネットワークである。上述したように、ブロックチェーンネットワークは、パブリックブロックチェーンネットワーク、プライベートブロックチェーンネットワーク、またはコンソーシアムブロックチェーンネットワークとして提供され得る。コンソーシアムブロックチェーンネットワークを参照して、本明細書の実施形態をここではさらに詳細に説明している。しかしながら、本明細書の実施形態が任意の適切なタイプのブロックチェーンネットワークにおいて実現され得ることも考えられる。
【００１９】
一般に、コンソーシアムブロックチェーンネットワークは、関与エンティティの間でプライベートなものとなっている。コンソーシアムブロックチェーンネットワークにおいては、コンセンサスプロセスは、コンセンサスノードとも称し得る、権限を与えられたノードのセットによって制御され、1つまたは複数のコンセンサスノードがそれぞれのエンティティ(例えば、金融機関、保険会社)に管理される。例えば、十(10)のコンソーシアムエンティティ(例えば、金融機関、保険会社)がコンソーシアムブロックチェーンネットワークを管理してもよく、その各々がコンソーシアムブロックチェーンネットワーク内の少なくとも1つのノードを管理する。
【００２０】
いくつかの例においては、コンソーシアムブロックチェーンネットワーク内では、グローバルブロックチェーンが、すべてのノードにわたって複製されるブロックチェーンとして提供される。すなわち、すべてのコンセンサスノードは、グローバルブロックチェーンに関する完全状態コンセンサスにある。コンセンサス(例えば、ブロックチェーンへのブロックの追加に対する合意)を得るために、コンセンサスプロトコルがコンソーシアムブロックチェーンネットワークにおいて実施される。例えば、コンソーシアムブロックチェーンネットワークは、以下でさらに詳細に説明している、実用的Byzantineフォールトトレランス(PBFT)コンセンサスを実施し得る。
【００２１】
図1は、本明細書の実施形態を実行するために使用され得る環境100の例を図示している図である。いくつかの例においては、例示的な環境100は、エンティティがコンソーシアムブロックチェーンネットワーク102に参加することを可能にする。例示的な環境100は、コンピューティングデバイス106、108、およびネットワーク110を含む。いくつかの例においては、ネットワーク110は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、インターネット、またはその組合せを含み、ウェブサイト、ユーザデバイス(例えば、コンピューティングデバイス)、およびバックエンドシステムを接続する。いくつかの例においては、ネットワーク110は、有線および/または無線通信リンクを介してアクセスされ得る。
【００２２】
図示した例においては、コンピューティングシステム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は、エンティティレイヤ202、ホステッドサービスレイヤ204、およびブロックチェーンネットワークレイヤ206を含む。図示した例においては、エンティティレイヤ202は、関与者A、関与者B、および関与者Cの3つの関与者を含み、各関与者は、それぞれのトランザクション管理システム208を有する。
【００２４】
図示した例においては、ホステッドサービスレイヤ204は、各トランザクション管理システム210のためのインターフェース210を含む。いくつかの例においては、それぞれのトランザクション管理システム208は、プロトコル(例えば、ハイパーテキスト・トランスファー・プロトコル・セキュア(HTTPS))を使用してネットワーク(例えば、図1のネットワーク110)を介してそれぞれのインターフェース210と通信する。いくつかの例においては、各インターフェース210は、それぞれのトランザクション管理システム208とブロックチェーンネットワークレイヤ206との間の通信接続を提供する。より詳細には、インターフェース210は、ブロックチェーンネットワークレイヤ206のブロックチェーンネットワーク212と通信する。いくつかの例においては、インターフェース210とブロックチェーンネットワークレイヤ206との間の通信は、リモートプロシージャコール(RPC)を使用して実施される。いくつかの例においては、インターフェース210は、それぞれのトランザクション管理システム208のためのブロックチェーンネットワークノードを「ホスト」する。例えば、インターフェース210は、ブロックチェーンネットワーク212へのアクセスのためのアプリケーションプログラミングインターフェース(API)を提供する。
【００２５】
本明細書に記載しているように、ブロックチェーンネットワーク212は、ブロックチェーン216に情報を変更不可能な形で記録する複数のノード214を含むピア・ツー・ピアネットワークとして提供される。単一のブロックチェーン216を概略的に図示しているが、ブロックチェーン216の複数のコピーが、提供され、ブロックチェーンネットワーク212にわたって維持管理される。例えば、各ノード214は、ブロックチェーンのコピーを記憶する。いくつかの実施形態においては、ブロックチェーン216は、コンソーシアムブロックチェーンネットワークに参加する2つ以上のエンティティの間で行われるトランザクションに関連付けられた情報を記憶する。
【００２６】
ブロックチェーン(例えば、図2のブロックチェーン216)は、各ブロックがデータを記憶しているブロックのチェーンで構成される。例示的なデータは、2つ以上の関与者間のトランザクションを表すトランザクションデータを含む。トランザクションを非限定的な例として本明細書では使用しているが、任意の適切なデータがブロックチェーンに記憶され得ること(例えば、ドキュメント、画像、ビデオ、オーディオ)も考えられる。例示的なトランザクションは、価値のあるもの(例えば、資産、製品、サービス、および通貨)の交換を含み得るがこれに限定されない。トランザクションデータは、ブロックチェーン内に変更不可能な形で記憶される。すなわち、トランザクションデータを変更することはできない。
【００２７】
ブロックに記憶する前に、トランザクションデータはハッシュ化される。ハッシュ化は、トランザクションデータ(文字列データとして提供される)を固定長のハッシュ値(文字列データとしても提供される)に変換するプロセスである。ハッシュ値を逆ハッシュ化してトランザクションデータを取得することはできない。ハッシュ化は、トランザクションデータにおけるわずかな変化でさえも完全に異なるハッシュ値という結果になることを保証している。さらに、上述したように、ハッシュ値は固定長である。すなわち、トランザクションデータのサイズに関係なく、ハッシュ値の長さは固定される。ハッシュ化は、ハッシュ関数によってトランザクションデータを処理してハッシュ値を生成することを含む。例示的なハッシュ関数は、256ビットハッシュ値を出力するセキュアなハッシュアルゴリズム(SHA)-256を含むがこれに限定されない。
【００２８】
複数のトランザクションのトランザクションデータがハッシュ化されブロックに記憶される。例えば、2つのトランザクションのハッシュ値が提供されると、それら自身がハッシュ化され別のハッシュを提供する。このプロセスは、すべてのトランザクションがブロックに記憶されるように、単一のハッシュ値が提供されるまで繰り返される。このようなハッシュ値は、Merkleルートハッシュと称され、ブロックのヘッダに記憶される。トランザクションについての何らかの変化は、そのハッシュ値における変化、最終的に、Merkleルートハッシュにおける変化をもたらすことになる。
【００２９】
ブロックは、コンセンサスプロトコルを介してブロックチェーンに追加される。ブロックチェーンネットワーク内の複数のノードは、コンセンサスプロトコルに関与し、ブロックがブロックチェーンに追加されるようにする作業を行う。そのようなノードをコンセンサスノードと称する。上述したように、PBFTは、コンセンサスプロトコルの非限定的な例として使用される。コンセンサスノードは、コンセンサスプロトコルを実行してトランザクションをブロックチェーンに追加し、ブロックチェーンネットワークの総合的な状態を更新する。
【００３０】
さらに詳細には、コンセンサスノードは、ブロックヘッダを生成し、ブロック内のトランザクションのすべてをハッシュ化し、単一のハッシュ値がブロック内のすべてのトランザクションに対して提供される(Merkleルートハッシュ)まで、ハッシュ値がペアになるように組み合わせてさらなるハッシュ値を生成する。このハッシュがブロックヘッダに追加される。コンセンサスノードはまた、ブロックチェーン内の最新ブロック(すなわち、ブロックチェーンに追加された最終ブロック)のハッシュ値を決定する。コンセンサスノードはまた、ノンス値およびタイムスタンプをブロックヘッダに追加する。
【００３１】
一般に、PBFTは、Byzantine障害(例えば、正常に動作していないノード、不正ノード)に耐性がある実用的Byzantineステートマシンの複製を提供する。このことは、障害が生じるであろうことを想定すること(例えば、独立したノードの故障の存在および/またはコンセンサスノードによって送信される操作メッセージを想定すること)によってPBFTでは実現される。PBFTでは、コンセンサスノードは、プライマリコンセンサスノードおよびバックアップコンセンサスノードを含むシーケンスにおいて提供される。プライマリコンセンサスノードは、周期的に変更される。トランザクションは、ブロックチェーンネットワークの系全体の状態(world state)に関して合意に至ったブロックチェーンネットワーク内のコンセンサスノードによってブロックチェーンに追加される。このプロセスにおいては、メッセージは、コンセンサスノード間で送信され、各コンセンサスノードは、メッセージが指定のピアノードから受信されたことを証明し、メッセージが送信中に変更されなかったことを検証する。
【００３２】
PBFTでは、多様な局面において、コンセンサスプロトコルが、同じ状態で開始するすべてのコンセンサスノードに提供される。はじめに、クライアントは、サービス動作を発動する(例えば、ブロックチェーンネットワーク内のトランザクションを実行する)ためにプライマリコンセンサスノードに要求を送信する。要求を受信したことに応答して、プライマリコンセンサスノードは、バックアップコンセンサスノードに要求をマルチキャストする。バックアップコンセンサスノードが要求を実行し、各々がクライアントに応答を送信する。クライアントは、閾値数の応答が受信されるまで待機する。いくつかの例においては、クライアントは、f+1個の応答が受信されるまで待機する、ここで、fは、ブロックチェーンネットワーク内で許容され得る、障害のあるコンセンサスノードの最大数である。目標達成は、ブロックチェーンに追加されることになるレコードの順で十分な数のコンセンサスノードが合意に至ることであり、レコードは、受理されるか拒否される。
【００３３】
いくつかのブロックチェーンネットワークにおいては、暗号化がトランザクションのプライバシーを維持管理するために実施される。例えば、ブロックチェーンネットワーク内の他のノードがトランザクションの詳細を理解することができないように、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)の少なくとも一部が、TEE内で実行され、プロセッサおよびメモリへのアクセスを有する。TEEのおかげで、TAは、メインOSで動作している他のアプリケーションから保護される。さらに、TEEは、TEE内で互いにTAを暗号的に隔離している。
【００３７】
TEEの例は、米国カリフォルニア州サンタ・クララ市のIntel Corporationによって提供されるSoftware Guard Extension(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は実行を継続する。
【００４０】
認証プロセスは、SGXが提供されるTEE内で予期されるコード(例えば、TAの高信頼部分)がセキュアに実行されていることを検証するために行われ得る。一般に、認証プロセスは、チャレンジ側(例えば、ブロックチェーンネットワーク内の別のノード、ブロックチェーンネットワークの鍵管理システム(KMS))から認証要求を受信するTAを含む。それに応じて、TAは、そのエンクレーブがクォートとも称するリモート認証を生成することを要求する。リモート認証を生成することは、ローカル認証を検証する、所謂、クォーティングエンクレーブにエンクレーブから送信される記ローカル認証を含み、非対称認証鍵を使用してローカル認証を署名することによってローカル認証をリモート認証に変換する。リモート認証(クォート)は、チャレンジ側(例えば、クライアントまたはブロックチェーンネットワークのKMS)に提供される。
【００４１】
チャレンジ側は、認証検証サービスを使用してリモート認証を検証する。SGXについては、Intelが、チャレンジ側からリモート認証を受信してリモート認証を検証する、Intel Attestation Service(IAS)を提供している。より詳細には、IASが、リモート認証を処理し、リモート認証が検証されたかどうかを示す、レポート(例えば、認証検証レポート(AVR))を提供する。検証されなかった場合には、エラーが示され得る。検証された(予期されるコードがTEEにおいてセキュアに実行されている)場合には、チャレンジ側は、TAとのインタラクションを開始または継続し得る。例えば、検証に応答して、(チャレンジ側として)KMSは、ノードが他のノードおよび/またはクライアントとセキュアに通信することを可能にするために、(例えば、楕円曲線Diffie-Hellman(ECDH)などの鍵交換プロセスを介して)TEEを実行するノードに非対称暗号鍵(例えば、公開鍵と秘密鍵とのペア)を発行し得る。
【００４２】
上述したように、SGXを使用して提供されるTEEにおいては、コード少なくとも一部(例えば、TAの高信頼部分)はエンクレーブ内で実行され、そのようなコードをエンクレーブプログラムと称し得る。また上述したように、認証プロセス(リモート認証)は、エンクレーブプログラムの実行に先立って行われる。すなわち、エンクレーブおよびコードが、コードがエンクレーブ内で予期されているように実行されたことを検証するためにリモート認証において使用される、クォートを提供するために測定される。一般的に、エンクレーブプログラムそのものコードおよびデータのみが、認証において測定され、その測定についてのハッシュが、クォートにおいて搬送され、リモート認証サービス(例えば、IAS)によって認証される。
【００４３】
さらに詳細には、リモート認証プロセス(リモート検証とも称する)は、非対称暗号、およびリモート認証のために特に設定されるクォーティングエンクレーブ(QE)を使用する。QEは、クォートをデジタル署名するために、(ハードウェア内で設定される)デバイス固有のプライベート非対称鍵を使用する。セキュリティをさらに強化するために、認証は、Enhanced Privacy ID(EPID)として知られている、Direct Anonymous Attestation(DAA)スキームへの拡張を使用する。EPIDは、プラットフォームが、プラットフォームを一意に識別または異なる署名をリンク付けすることなく、データオブジェクト(例えば、クォート)にデジタル署名することを可能にする、グループ署名スキームとして説明することができる。QEは、プラットフォーム認証を署名するために使用されるEPID鍵を生成する。EPID鍵は、EPIDバックエンドインフラによって認証され、プラットフォームと、その下位層のハードウェアの信頼性との両方を表している。QEのみが、プロセッサのファームウェアのバージョンに結び付けられたEPID鍵へのアクセスを有する。それゆえ、EPID鍵を使用して署名されるクォートは、プロセッサそのものによって発行されたものとみなされ得る。
【００４４】
認証プロセスを開始するために、クライアントは、TAがエンクレーブ内で予期されるコードを実行していることを実証するために、TAにチャレンジを発行する。TAは、QEのエンクレーブ識別情報(QEID)とともに提供される。QEIDおよびクライアントのチャレンジは、エンクレーブに送信される。エンクレーブは、チャレンジに対するレスポンスを含むマニフェストとエンクレーブとセキュアに通信するためにクライアントによって使用され得る公開鍵とを生成する。公開鍵は、認証プロセスの一部として一時的に生成される。エンクレーブは、マニフェストのハッシュを生成し、マニフェストをエンクレーブに結び付けるレポートの生成のためのハッシュを含む。エンクレーブは、署名されることになるQEにレポートを提供するアプリケーションにレポートを送信する。QEは、クォートを作成し、そのEPID鍵を用いてクォートを署名し、TAに署名したクォートを返信する。TAは、チャレンジを開始したクライアントにクォートを送信する。
【００４５】
クライアントは、認証のためにリモート認証サービスにクォートを提供する。例えば、IASは、SGX対応のエンクレーブの認証エビデンス(例えば、クォート)を検証する認証アプリケーションプログラミングインターフェース(API)を提供する。認証APIは、Representational State Transfer(REST)APIであり、データシリアル化フォーマットとしてJavaScript(登録商標) Object Notation(JSON)を使用する。クライアントは、認証エビデンスペイロード(AEP)を含む要求を、認証APIを介して、IASに送信する。AEPは、isvEnclaveQuoteフィールドにおいて提供されるクォートを含む。IASは、クォートを処理して、エンクレーブの識別情報とエンクレーブが実行されるプラットフォームの有効性とを検証する。より詳細には、IASは、エンクレーブの識別情報とプラットフォームのTrusted Computing Base(TCB)との検証についての暗号的に署名されたレポートとしてAVRを提供する。AVRは、isvEnclaveQuoteStatusフィールドにおいて提供されるクォート状態値を含む。エンクレーブとプラットフォームとが検証された場合には、クォート状態は、クォートのEPID署名が検証されたことと、プラットフォームのTCBレベルが最新であることとを示す、OKとして提供される。
【００４６】
AVRは、Report Signing Keyを用いて(例えば、RSA-SHA256を使用して)リモート認証サービスによって暗号的に署名され、Report Signing Certificate Chain(RSCC)が、AVRとともに提供される。クライアントは、RSCCを復号および検証し、RSCCが高信頼Attestation Report Signing CA Certificateに根差していることを検証することによって、AVRについての署名を検証する。Attestation Report Signing CA Certificateは、クライアントがチャレンジを開始することに先立って生じる、クライアントが認証サービスに登録した後に、クライアントへのダウンロードが可能となる。クライアントは、Attestation Report Signing Certificate(例えば、x.509デジタル証明書の形式で配布されるReport Keyの公開部分)を使用して、AVRについての署名を検証する。
【００４７】
検証が成功したことに応答して、クライアントは、エンクレーブとの後続のセキュアな通信のために使用されるセッション鍵を導出する。セッション鍵は、署名鍵(SK)、およびマスタ鍵(MK)を含む。セッション鍵は、秘密鍵と公開鍵とを含む鍵ペアと称し得る。セッション鍵は、クライアントとエンクレーブとの間のDiffie-Hellman Key Exchange(DHKE)の一部として提供される鍵導出鍵(KDK)を使用して導出される。この交換から得られる共有鍵は、同一の鍵を導出しそれを使用してデータを復号することができる、エンクレーブに提供されることになる、データを暗号化するためにクライアントによって使用され得る。それゆえ、認証を行った後に、トラストアンカーは、鍵交換を介して設定される共有鍵において提供される。
【００４８】
いくつかの事例においては、エンクレーブ内で実行されるコードおよび/またはエンクレーブ内のデータは動的である。すなわち、例えば、エンクレーブプログラムはステートフルサブロジックコードを動作すること可能にし得るし、状態は時間とともに変化する。この例は、特定の登録証明書を使用して外部サービス(例えば、ウェブベースのサービス)に接続するサブロジックコード(例えば、スマートコントラクトコード、クライアントコード)を含み得るがこれに限定されない。そのようなケースにおいては、エンクレーブプログラムが呼び出されるたびに、登録証明書が要求において提供される。要求パラメータを搬送することに加えて、サブロジックコードおよびその状態データも必要となる。エンクレーブプログラムがサブロジックコードおよび状態データをロードした後に、サブロジックがエンクレーブ内で実行され、要求パラメータが結果を取得するために処理される。エンクレーブプログラムは元の認証プロセスによって測定および検証されたそれ自身の静的コードおよび静的データのみを有しているため、エンクレーブプログラムは、サブロジックが結果を提供したことと、結果が信頼できることとについての証明をクライアントに提供する必要がある。
【００４９】
サブロジックが結果を提供したことをクライアントに証明するための従来のアプローチは、各要求とともにサブロジックコード全体を提供することを含む。例えば、特定のサブロジックコードが実行されることになる場合には、クライアントは、サブロジックコード全体および要求パラメータ(例えば、サブロジックコードを用いて処理されることになるデータ)を含むエンクレーブプログラムに要求を送信する。エンクレーブプログラムは、サブロジックコードを実行して結果を提供する。サブロジックコードまたはサブロジックコードのハッシュ値と結果とは、TEEの秘密鍵(例えば、上記のマスタ鍵とも称する)を使用して署名される。クライアントが検証のためにエンクレーブプログラムからの返信結果を受信すると、クライアントは、元のサブロジックコードを使用して(または、ハッシュ値を再計算して)結果を検証し、特定のサブロジックコードがエンクレーブプログラムによって実行されたことを証明して結果を提供する。
【００５０】
サブロジックコードが結果を提供したことをクライアントに証明するそのようなアプローチにはデメリットがある。例えば、クライアントが要求をエンクレーブプログラムに送信するたびに、サブロジックコードの表現全体が要求において搬送される必要があり、ネットワーク伝送に負荷をかけるより大きな要求サイズが結果として生じることになる。別の例としては、各要求の処理のために、エンクレーブプログラムは、要求において搬送されたサブロジックコードを解析およびロードする必要があり、このことが処理の増加を結果として生じることになる。別の例としては、各要求を処理した後に、エンクレーブプログラムはサブロジックコードを署名する必要があり、クライアントはその結果提供されるサブロジックコードに対するチェックを繰り返す必要がある。これらのアクティビティの両方が、増大した処理をもたらすことになる。さらに別の例として、異なるサブロジックコードについての複雑度、ダイバーシチ、および非互換性に起因して、共通のフォーマットのままでサブロジックコードを直接表現することが困難となる。したがって、サブロジックコードはエンクレーブプログラムクエリインターフェースに結合され、スケーラビリティが低くなる。
【００５１】
本明細書で使用しているように、サブロジックコードは、エンクレーブプログラムの認証後のエンクレーブプログラムによる実行のために提供されるコンピュータ実行可能コードを指し得る。いくつかの例においては、サブロジックコードは、エンクレーブプログラムにはない1つまたは複数の機能を含む。このように、サブロジックコードが、エンクレーブプログラムの機能性を拡張するためにエンクレーブプログラムによって実行され得る。
【００５２】
上記の状況を考慮して、本明細書の実施形態は、効率的かつ簡易化したエンクレーブプログラムサブロジック証明スキームを目的としている。より詳細には、ここでさらに詳細に説明しているように、本明細書の実施形態は、TEE機構を使用して、エンクレーブプログラムのロジック表現の証明を複数の独立した署名に基づいた証明に変換する。さらに詳細には、本明細書の実施形態は、エンクレーブプログラム実行サブロジックタスクを複数の段階に分割する。第1の段階は、リモート検証(認証)を含む。第2の段階は、サブロジックコード登録を含む。第3の段階は、サブロジッククエリ実行を含む。本明細書に記載しているように、本明細書の実施形態は、ネットワーク伝送および処理を低減するとともに、より高いパフォーマンス効率および改善されたスケーラビリティを達成している。
【００５３】
第1の段階のリモート認証に関しては、クライアントが、エンクレーブプログラムに対するリモート認証チャレンジを開始する。それに応じて、エンクレーブプログラムは、本明細書に記載しているように、クライアントに返信される認証情報に含まれる、鍵ペア(例えば、公開鍵、秘密鍵)を生成する。クライアントは、認証情報をリモート認証サービス(例えば、IAS)に送信する。リモート認証サービスは、検証結果(例えば、AVR)を提供するために認証情報を処理し、検証結果をクライアントに返信する。リモート認証にパスした後に、クライアントは、エンクレーブプログラムの公開鍵を使用して、エンクレーブプログラムがその秘密鍵を使用して署名するエンクレーブプログラムから返信されたレスポンスを検証する。
【００５４】
図3は、本明細書の実施形態による、システム300の例を図示している図である。図示しているように、システム300は、クライアント308、ノード310、および認証サービス312を含む。図示した例においては、ノード310は、TEE技術(例えば、Intel SGX)を使用して実装される。例えば、本明細書に記載しているように、エンクレーブプログラムは、ノード310のTEE内で実行される。一般に、認証サービス312は、クライアント308のためにノード310の正当性を検証する。認証サービスの例は、上記で説明した、IASを含む。認証プロセス中に、クライアント308は、ノード310から認証検証サービス312へとノード310の正当性を示す認証エビデンス320を中継する。いくつかの実施形態においては、認証エビデンス320は、ノード310の測定値322およびノード310の署名326を含む。ノード310の測定値322は、ノード310のTEE内で実行されるエンクレーブプログラムの静的コードに基づいたハッシュ値を含み得る。認証エビデンス320に含まれるノード310の署名326は、ノード310の認証鍵を使用して署名されたノード310の測定値322を含み得る。
【００５５】
いくつかの実施形態においては、ノード310の認証鍵は、EPID秘密鍵を含む。上述したように、EPIDは、プライバシーを保護しつつ、高信頼システムの認証のためにIntelによって提供されるアルゴリズムである。一般に、ネットワークのメンバ(例えば、コンピュータまたはサーバ)の各々は、認証エビデンスを署名するためにEPID秘密鍵が割り当てられており、ネットワークにおける認証エビデンスの検証側は、ネットワークの他のメンバのEPID秘密鍵と対をなすEPID公開鍵を記憶している。メンバの各々は、それ自身のEPID秘密鍵を使用して認証エビデンスの署名を生成し得るし、検証側は、EPID公開鍵を使用して他のメンバの署名を検証し得る。そのため、EPID鍵は、コンピュータまたはサーバなどのデバイスが正規デバイスであることを証明するために使用され得る。
【００５６】
認証エビデンス320は、ノード310によって生成された公開鍵324をさらに含み得る。認証エビデンス320がノード310によって生成された公開鍵324を含む場合には、ノード310の署名326は、測定値322と、ノード310の認証鍵を使用して署名された公開鍵324とを含む。
【００５７】
ノード310は、クライアント308から要求を取り込み全うする、任意の適切なサーバ、コンピュータ、モジュール、またはコンピューティング要素を含む。例えば、本開示の実施形態によれば、ノード310は、クライアント308などといったクライアントからの要求を受信および処理して、サブロジックコードを処理し、それぞれの結果を提供する。クライアント308からの要求を処理する前に、クライアント308は、ノード310にチャレンジを行う。それに応じて、ノード310は、認証エビデンス320を生成し、ノード310の正当性を検証するために認証サービス312に認証エビデンス320を提供する、クライアント308に認証エビデンス320を送信する。いくつかの実施形態においては、ノード310は、公開鍵324および秘密鍵を含む鍵ペアを生成し、認証エビデンス320に公開鍵324を含める。公開鍵324は、本明細書に記載しているように、クライアント308とノード310との間の今後の通信のために使用される。例えば、ノード310は秘密鍵を使用して要求結果を署名し得るし、クライアント308は公開鍵324を使用して署名された要求結果を検証し得る。
【００５８】
認証サービス312は、ノード310からクライアント308によって転送された認証エビデンス320の正当性を検証する、任意の適切なサーバ、コンピュータ、モジュール、またはコンピューティング要素を含む。上述したように、認証エビデンス320は、ノード310の測定値322、ノード310の署名326、および(必要に応じて)ノード310によって生成された公開鍵324を含む。認証エビデンス320を受信すると、認証サービス312は、認証エビデンス320内のノード310の署名326を検証し、認証検証レポート(AVR)330を生成する。
【００５９】
認証サービス312は、認証サービス312の認証鍵を使用して認証エビデンス320内の署名326を検証する。いくつかの実施形態においては、認証サービス312の認証鍵は、ノード310が認証エビデンス320を署名するために使用したEPID秘密鍵と対をなすEPID公開鍵を含む。認証エビデンス320内の署名を検証した後に、認証サービス312は、認証エビデンス320、認証エビデンス320内の署名326が有効であるかどうかを示す検証結果334、および認証サービス312の署名336を含むようにAVR330を生成する。
【００６０】
いくつかの実施形態においては、AVR330は、リレーシステムノード310の署名326を除いて認証エビデンス320を含む。例えば、AVR330は、リレーシステムノード310の測定値322、リレーシステムノード310によって生成された公開鍵324、検証結果334、および認証サービス312の署名336を含み得る。いくつかの実施形態においては、認証サービス312の署名336は、認証サービス312のレポート署名鍵(例えば、認証サービス312が認証検証レポートを署名するために使用する秘密鍵)を使用して署名された認証エビデンス320および検証結果334を含む。レポート署名鍵が認証サービス312の認証鍵とは異なる得ることに留意されたい。
【００６１】
図4は、本明細書の実施形態による、信号フロー400の例を図示している。信号フロー400は、認証検証プロセスを表している。便宜上、プロセスが、1つまたは複数のロケーションに位置する1つまたは複数のコンピュータのシステムによって行われるとともに本明細書に従って適切に行われるものとして説明することにする。例えば、適切にプログラムされた分散システム(例えば、図1のブロックチェーンシステム100、図3のシステム300)がそのプロセスを行い得る。
【００６２】
一般的に、動作中には、クライアント308は、ノード310から認証エビデンスを受信し、認証エビデンスを検証するために認証サービス312に認証エビデンスを送信する。クライアント308は、認証エビデンス内のノード310の署名に対する検証に基づいてノード310の正当性を示す認証サービス312からAVRを受信する。
【００６３】
図4の例においては、クライアント308が、ノード310に認証要求(例えば、チャレンジ)を送信する(410)。認証要求は、ノード310の正当性または有効性を示す認証エビデンスと、ノード310のTEE内で実行されるエンクレーブプログラムとを要求するためにノード310に送信される。いくつかの実施形態においては、認証エビデンスは、ノード310の測定値およびエンクレーブプログラムと、ノード310の署名とを含む。ノード310の測定値は、ノード310の初期状態のハッシュ値を含み得る。例えば、ノード310の測定値は、ノード310上で実施されるプロセスコードのハッシュ値(エンクレーブプログラム)を含み得る。
【００６４】
認証要求に対する応答では、ノード310が、認証エビデンスを生成する(412)。上述したように、認証エビデンスは、ノード310の正当性または有効性を示し、ノード310の測定値およびエンクレーブプログラムと、ノード310の署名とを含み得る。いくつかの実施形態においては、認証エビデンスは、ノード310によって生成された公開鍵をさらに含む。例えば、ノード310は、例えば、Rivest-Shamir-Adleman(RSA)アルゴリズムなどといった、所定の鍵生成アルゴリズムを使用して、秘密鍵と公開鍵とを含むランダム暗号鍵ペアを生成し得る。いくつかの例においては、公開鍵は、認証エビデンスにおいて提供され、クライアント308とノード310との間の今後の通信のために使用され得る。例えば、ノード310は秘密鍵を使用して要求結果を署名し得るし、クライアント308は公開鍵を使用して署名された要求結果を検証し得る。
【００６５】
いくつかの実施形態においては、ノード310の測定値は、ノード310の初期状態のハッシュ値を含む。認証エビデンス内のノード310の署名は、ノード310の認証鍵を使用して署名されている、測定値およびノード310によって生成された公開鍵を含む。いくつかの実施形態においては、ノード310の認証鍵は、EPID秘密鍵を含む。EPID秘密鍵を使用して署名された認証エビデンスは、認証エビデンスを生成したデバイスが正規のものであることを証明するために、EPID秘密鍵と対をなすEPID公開鍵を使用して検証側によって検証され得る。
【００６６】
ノード310が、認証エビデンスをクライアント308に送信する(414)。クライアント308が、ノード310から送信された認証エビデンスを認証サービス312に転送する(416)。いくつかの実施形態においては、クライアント308は、認証検証要求を認証サービス312に送信する。認証検証要求は、ノード310から送信された認証エビデンスと、例えば、ノード310がSGXプラットフォームサービスを使用しているかどうかを示す記述子などといった、補足情報とを含む。
【００６７】
認証サービス312が、クライアント308によって転送された認証エビデンスを受信したことに応答して認証エビデンスを検証する(418)。上述したように、認証エビデンスは、ノード310の測定値、ノード310によって生成された公開鍵、およびノード310の署名を含む。認証サービス312は、認証サービス312の認証鍵を使用して認証エビデンス内のノード310の署名を検証することによって認証エビデンスを検証し得る。例えば、認証サービス312は、ノード310が認証エビデンスを署名するために使用するEPID秘密鍵と対をなす認証検証サーバのEPID公開鍵を使用してノード310の署名を検証し得る。
【００６８】
認証エビデンス内のノード310の署名が有効であると認証サービス312が決定した場合には、認証サービス312は、ノード310が本物または正規のデバイスであると決定し得る。認証エビデンス内のノード310の署名が無効であると認証サービス312が決定した場合には、認証サービス312は、ノード310が本物ではないまたは非正規のデバイスであると決定し、任意の後続のデータおよびノード310から要求を拒否し得る。
【００６９】
認証サービス312が、認証エビデンスの検証に基づいてAVRを生成する(420)。いくつかの実施形態においては、AVRは、ノード310の認証エビデンス、認証検証結果、および認証検証サービス312のデジタル署名を含み得る。いくつかの実施形態においては、AVRは、ノード310の署名を除いてノード310の認証エビデンスを含み得る。例えば、AVRは、ノード310の測定値、ノード310によって生成された公開鍵、認証検証結果、および認証サービス312の署名を含み得る。AVR内の認証検証結果は、ノード310の署名が有効であるかどうかを示す。例えば、認証検証結果は、ノード310の署名が有効であることを示す「有効」もしくは「OK」の値または署名が無効であることを示す「無効」の値を含み得る。
【００７０】
いくつかの実施形態においては、認証サービス312の署名は、レポート署名鍵を使用して署名されている認証エビデンスおよび認証検証結果を含む。レポート署名鍵は、認証サービス312がAVRを署名するために使用する秘密鍵であり得る。いくつかの実施形態においては、レポート署名鍵は、所定の鍵生成アルゴリズムを使用して認証サービス312によって生成される。例えば、レポート署名鍵は、RSA-Secure Hash Algorithm(SHA)256を使用して生成され得る。レポート署名鍵が、認証サービス312が認証エビデンスを検証するために使用している認証鍵(例えば、EPID公開鍵)とは異なるものであることに留意されたい。
【００７１】
いくつかの実施形態においては、認証サービス312が、AVRをリレーシステムコントローラ308に送信する(422)。上述したように、AVRは、ノード310の識別情報の検証についての暗号的に署名されたレポートを含み、ノード310の認証エビデンス、認証検証結果、および認証サービス312のデジタル署名を含み得る。クライアント308が、AVRを検証する(424)。例えば、クライアント308は、AVR内の認証サービス312の署名を検証し得る。いくつかの実施形態においては、クライアント308は、レポート署名証明書を使用して認証サービス312の署名を検証する。レポート署名証明書は、X.509デジタル証明書であり得る。レポート署名証明書は、認証サービス312によって生成されるとともに、認証サービス312がAVRを署名するために使用するレポート署名鍵と対をなす、公開鍵を含み得る。
【００７２】
AVR内の認証サービス312の署名が有効であることをクライアント308が検証した場合には、クライアント308は、AVRが認証サービス312によって実際に送信されたと決定する。AVR内の認証サービス312の署名が無効であるとクライアント308が決定した場合には、クライアント308は、認証検証レポートが本物ではないと決定し、AVRを拒否することになる。クライアント308は、さらに、AVR内の認証検証結果を検査して、ノード310の認証エビデンスが有効であると決定し得る。いくつかの実施形態においては、クライアント308は、認証エビデンス内の測定値をクライアント308によって記憶されている測定値と比較して、認証エビデンスが有効であるかどうかを決定する。
【００７３】
クライアント308が、AVRが本物であると決定するとともにノード310の認証エビデンスが有効であると決定したことに応答して、有効または正規のデバイスとしてノード310を登録する(426)。クライアント308はまた、認証エビデンスに含まれるとともにノード310によって生成される公開鍵を記憶する。公開鍵は、本明細書に記載しているように、クライアント308とノード310との間の今後の通信のためにクライアント308によって使用されることになる。
【００７４】
第2の段階のサブロジックコード登録に関しては、本明細書の実施形態によれば、クライアント308が、実行のためにノード310にサブロジックコードを登録する。いくつかの例においては、サブロジックコードは、ノード310内のエンクレーブプログラムによって実行され得るコンピュータ実行可能コードである。サブロジックコードは、エンクレーブプログラムの機能性を拡張するモジュールとして説明することができる。いくつかの実施形態においては、クライアント308は、ノード310に複数のサブロジックコードを登録する。いくつかの例においては、各サブロジックコードは、1つまたは複数のバージョン(例えば、v1、v1.1、v2)を含み得る。
【００７５】
本開示の実施形態によれば、サブロジックコードの登録は、クライアント308が登録要求をエンクレーブプログラムに送信することと、エンクレーブプログラムが登録結果を提供することとを含む。いくつかの例においては、登録されることになる各サブロジックコードについて、登録要求は、サブロジックコードを一意に識別する識別子と、サブロジックコードそのものとを含む。いくつかの例においては、登録されることになる各サブロジックコードについて、登録要求は、サブロジックコードを一意に識別する識別子、バージョン番号、およびサブロジックコードそのものを含む。いくつかの例においては、登録要求が各サブロジックコードについて送信され得る(例えば、単一のサブロジックコードについての単一の登録要求)。いくつかの例においては、登録要求が複数のサブロジックコードについて送信され得る(例えば、2つ以上のサブロジックコードについての単一の登録要求)。
【００７６】
いくつかの実施形態においては、登録要求を受信したことに応答して、エンクレーブプログラムは、サブロジックコードを記憶し、保存されているサブロジックコードをそれぞれの識別子に関連付けるインデックスを提供する。いくつかの実施形態においては、各サブロジックコードについて、エンクレーブプログラムは、秘密コード鍵と公開コード鍵とを含む、コード鍵ペアを生成する。このように、各サブロジックコードは、それぞれのコード鍵ペアを有する。いくつかの例においては、エンクレーブプログラムは、上記で説明したKDKに基づいて鍵導出関数(KDF)を使用してコード鍵ペアを生成する。
【００７７】
いくつかの例においては、単一のコード鍵ペアは、同一のサブロジックコードの複数のバージョンに対して提供される。例えば、サブロジックコードが第1のバージョンおよび第2のバージョンを含む場合には、同一のコード鍵ペアが、サブロジックコードの第1のバージョンおよび第2のバージョンの両方で占有される。いくつかの例においては、コード鍵ペアは、同一のサブロジックコードの各バージョンに対して提供される。例えば、サブロジックコードが第1のバージョンおよび第2のバージョンを含む場合には、第1のコード鍵ペアは第1のバージョンに対して提供され、第2のコード鍵ペアは第2のバージョンに対して提供される。
【００７８】
いくつかの実施形態においては、サブロジックコードがエンクレーブプログラムによって登録および記憶された後に、エンクレーブプログラムは、クライアント308に登録結果を提供する。いくつかの例においては、登録結果は、(例えば、サブロジックコードの登録が成功したことを示す)登録インジケータ、サブロジックコードの公開コード鍵、およびデジタル署名を含む。いくつかの例においては、エンクレーブプログラムは、上記で説明した認証プロセスの一部として提供された、その秘密鍵を使用して、デジタル署名を生成する。例えば、登録インジケータおよび/または公開コード鍵は、第1のハッシュ値を提供するためにハッシュ関数を用いて処理される。ハッシュ関数の例は、SHA-256を含むがこれに限定されない。エンクレーブプログラムは、第1のハッシュ値および秘密鍵に基づいてデジタル署名を生成する。例えば、第1のハッシュ値および秘密鍵は、デジタル署名を提供する署名アルゴリズムによって処理される。
【００７９】
いくつかの実施形態においては、クライアント308は、登録結果を受信し、上記で説明した認証プロセスの一部として提供された、エンクレーブプログラムの公開鍵を使用して、登録結果を検証する。例えば、クライアント308は、ハッシュ関数を用いて登録インジケータおよび/または公開コード鍵を処理して第2のハッシュ値を提供し、エンクレーブプログラムの公開鍵を使用してデジタル署名から第1のハッシュ値を決定する。クライアント308は、第1のハッシュ値と第2のハッシュ値とを比較する。第1のハッシュ値と第2のハッシュ値とが同一である場合には、登録結果は有効であり、クライアント308は公開コード鍵を記憶する。第1のハッシュ値と第2のハッシュ値とが同一ではない場合には、登録結果は無効である。
【００８０】
図5は、サブロジック登録段階中の信号フロー500の例を図示している。信号フロー500は、サブロジック登録プロセスを表している。便宜上、プロセスが、1つまたは複数のロケーションに位置する1つまたは複数のコンピュータのシステムによって行われるとともに本明細書に従って適切に行われるものとして説明することにする。例えば、適切にプログラムされた分散システム(例えば、図1のブロックチェーンシステム100、図3のシステム300)がそのプロセスを行い得る。
【００８１】
図5の例においては、クライアント308が、ノード310内で実行されるエンクレーブプログラムに登録要求を送信する(502)。いくつかの例においては、登録されることになる各サブロジックコードについて、登録要求は、サブロジックコードを一意に識別する識別子と、サブロジックコードそのものとを含む。いくつかの例においては、登録されることになる各サブロジックコードについて、登録要求は、サブロジックコードを一意に識別する識別子、バージョン番号、およびサブロジックコードそのものを含む。
【００８２】
いくつかの実施形態においては、登録要求を受信したことに応答して、エンクレーブプログラムが、サブロジックコードを記憶し(504)、保存されているサブロジックコードをそれぞれの識別子に関連付けるインデックスを提供する(506)。エンクレーブプログラムが、保存されているサブロジックコードのための秘密コード鍵と公開コード鍵とを含む、コード鍵ペアを生成する(508)。エンクレーブプログラムが、登録結果を作成する(510)。いくつかの例においては、登録結果は、(例えば、サブロジックコードの登録が成功したことを示す)登録インジケータ、サブロジックコードの公開コード鍵、およびデジタル署名を含む。デジタル署名は、認証プロセス中に生成された、エンクレーブプログラムの秘密鍵に基づいて生成される。エンクレーブプログラム310が、登録結果をクライアント308に送信する(512)。いくつかの実施形態においては、クライアント308が、本明細書に記載しているように、登録結果を受信し、エンクレーブプログラムの公開鍵を使用して登録結果を検証する(514)。登録結果が有効である場合には、クライアント308が、公開コード鍵を記憶する(516)。
【００８３】
第3の段階のサブロジッククエリ実行に関しては、本明細書の実施形態によれば、クライアント308は、特定のサブロジックコードを呼び出して結果を提供するために、ノード310内で実行されるエンクレーブプログラムに要求を送信する。いくつかの実施形態においては、要求は、実行されることになるサブロジックの識別子と、1つまたは複数の要求パラメータとを含む。いくつかの実施形態においては、要求は、実行されることになるサブロジックの識別子、実行されることになるサブロジックコードのバージョン、および1つまたは複数の要求パラメータを含む。いくつかの例においては、1つまたは複数の要求パラメータは、結果を提供するためにサブロジックコードを使用して処理されることになるデータを含む。
【００８４】
要求を受信したことに応答して、エンクレーブプログラムは、要求されたサブロジックコードを(要求に含まれている場合には、バージョンも)読み出し、サブロジックコードを実行して結果を提供する。例えば、エンクレーブプログラムは、サブロジックコードを用いて1つまたは複数の要求パラメータを処理する。いくつかの例においては、結果は、サブロジックコードを用いて要求パラメータと、エンクレーブプログラムの1つまたは複数の機能とを処理したことに基づいて生成される。いくつかの例においては、エンクレーブプログラムは、サブロジックコードを用いて1つまたは複数の要求パラメータおよび追加のデータを処理する。例示的な追加のデータは、エンクレーブプログラムから提供されるデータ(例えば、ノード310に記憶されているデータ)を含み得る。
【００８５】
エンクレーブプログラムは、結果およびデジタル署名を含む応答を提供する。いくつかの例においては、エンクレーブプログラムは、上記で説明した登録プロセスの一部として提供された、サブロジックコードの秘密コード鍵を使用して、デジタル署名を生成する。例えば、結果は、第1のハッシュ値を提供するためにハッシュ関数を用いて処理される。ハッシュ関数の例は、SHA-256を含むがこれに限定されない。エンクレーブプログラムは、第1のハッシュ値およびサブロジックコードの秘密コード鍵に基づいてデジタル署名を生成する。例えば、第1のハッシュ値および秘密コード鍵は、デジタル署名を提供する署名アルゴリズムによって処理される。
【００８６】
いくつかの実施形態においては、クライアント308は、応答を受信し、上記で説明した登録プロセスの一部として提供された、サブロジックコードの公開コード鍵を使用して、結果を検証する。例えば、クライアント308は、ハッシュ関数を用いて結果を処理して第2のハッシュ値を提供し、サブロジックコードの公開コード鍵を使用してデジタル署名から第1のハッシュ値を決定する。クライアント308は、第1のハッシュ値と第2のハッシュ値とを比較する。第1のハッシュ値と第2のハッシュ値とが同一である場合には、結果は有効であり、クライアント308は結果に基づいてさらなる動作を行い得る。第1のハッシュ値と第2のハッシュ値とが同一ではない場合には、結果は無効である。
【００８７】
図6は、サブロジッククエリ実行段階中の信号フロー600の例を図示している。信号フロー600は、サブロジッククエリ実行プロセスを表している。便宜上、プロセスが、1つまたは複数のロケーションに位置する1つまたは複数のコンピュータのシステムによって行われるとともに本明細書に従って適切に行われるものとして説明することにする。例えば、適切にプログラムされた分散システム(例えば、図1のブロックチェーンシステム100、図3のシステム300)がそのプロセスを行い得る。
【００８８】
図6の例においては、クライアント308が、特定のサブロジックコードを呼び出して結果を提供するために、ノード310内で実行されるエンクレーブプログラムに要求を送信する(602)。いくつかの実施形態においては、要求は、実行されることになるサブロジックの識別子と、1つまたは複数の要求パラメータとを含む。要求を受信したことに応答して、エンクレーブプログラムが、要求されたサブロジックコードを(要求に含まれている場合には、バージョンも)読み出し(604)、サブロジックコードを実行して結果を提供する(606)。エンクレーブプログラムが、サブロジックコードの秘密コード鍵を使用して結果およびデジタル署名を含む応答を提供する(608)。エンクレーブプログラムが、応答をクライアント308に送信する(610)。クライアント308が、応答を受信し、サブロジックコードの公開コード鍵を使用して結果を検証する(612)。
【００８９】
図7Aは、本明細書の実施形態により実行され得るプロセス700の例を図示している。いくつかの実施形態においては、例示的なプロセス700は、1つまたは複数のコンピューティングデバイスを使用して実行される1つまたは複数のコンピュータ実行可能プログラムを使用して行われ得る。いくつかの例においては、例示的なプロセス700は、TEE内の実行のためにサブロジックを登録するために、クライアントとTEEを実行するノードとによって行われ得る。
【００９０】
登録要求を送信する(702)。例えば、クライアント308は、ノード310内で実行されるエンクレーブプログラムに登録要求を送信する。いくつかの例においては、登録されることになる各サブロジックコードについて、登録要求は、サブロジックコードを一意に識別する識別子と、サブロジックコードそのもの(例えば、コンピュータ実行可能命令)とを含む。登録要求を受信する(704)。例えば、登録要求は、ノード310内のエンクレーブプログラムによって受信される。いくつかの例においては、エンクレーブプログラムは、要求を解析して、識別子およびサブロジックコードを決定する。
【００９１】
コード鍵ペアを提供する(706)。例えば、エンクレーブプログラムは、サブロジックコードを記憶し、保存されているサブロジックコードをそれぞれの識別子に関連付けるインデックスを提供する。エンクレーブプログラムは、保存されているサブロジックコードのための秘密コード鍵と公開コード鍵とを含む、コード鍵ペアを生成する。デジタル署名を生成する(708)。例えば、エンクレーブプログラムは、認証プロセス中に生成された、エンクレーブプログラムの秘密鍵を使用してデジタル署名を生成する。本明細書に記載しているように、デジタル署名は、サブロジックコードの公開コード鍵と、エンクレーブプログラムの秘密鍵とに基づいて提供される。
【００９２】
登録結果を送信する(710)。例えば、エンクレーブプログラムは、登録結果をクライアント308に送信する。いくつかの例においては、登録結果は、サブロジックコードの公開コード鍵と、デジタル署名とを含む。登録結果を受信する(712)。例えば、クライアント308は、登録結果を受信する。登録結果が検証されたかどうかを決定する(714)。例えば、クライアント308は、本明細書に記載しているように、エンクレーブプログラムの公開鍵を使用してハッシュ値の比較を行う。登録結果が検証されなかった場合には、エラーを示す(716)。登録結果が検証された場合には、公開コード鍵を記憶する(718)。例えば、クライアント308は、サブロジックコードの公開コード鍵を記憶し、公開コード鍵をサブロジックコードの識別子とインデックス付けする。
【００９３】
図7Bは、本明細書の実施形態により実行され得るプロセス750の例を図示している。いくつかの実施形態においては、例示的なプロセス750は、1つまたは複数のコンピューティングデバイスを使用して実行される1つまたは複数のコンピュータ実行可能プログラムを使用して行われ得る。いくつかの例においては、例示的なプロセス750は、TEE内のサブロジックを実行し、プログラム実行およびサブロジック実行のためのデータ証明を提供するために、クライアントとTEEを実行するノードとによって行われ得る。
【００９４】
要求を送信する(752)。例えば、クライアント308は、特定のサブロジックコードを呼び出して結果を提供するために、ノード310内で実行されるエンクレーブプログラムに要求を送信する。いくつかの実施形態においては、要求は、実行されることになるサブロジックの識別子と、1つまたは複数の要求パラメータとを含む。要求を受信する(754)。例えば、要求は、ノード310内のエンクレーブプログラムによって受信される。要求を解析する(756)。例えば、エンクレーブプログラムは、要求を解析して、識別子および1つまたは複数の要求パラメータを決定する。
【００９５】
サブロジックコードを読み出して実行する(758)。例えば、エンクレーブプログラムは、コンピュータ可読メモリから識別子に基づいて、要求されたサブロジックコードを(要求に含まれている場合には、バージョンも)読み出す。エンクレーブプログラムは、1つまたは複数の要求パラメータを処理して結果データを提供するために、サブロジックコードを実行する。応答を準備して送信する(760)。例えば、エンクレーブプログラムは、サブロジックコードの秘密コード鍵を使用して結果およびデジタル署名を含む応答を提供する。エンクレーブプログラムは、応答をクライアント308に送信する。
【００９６】
応答を受信する(762)。例えば、クライアント308は、応答を受信する。応答が検証されたかどうかを決定する(764)。例えば、クライアント308は、本明細書に記載しているように、サブロジックコードの公開コード鍵を使用してハッシュ値の比較を行う。応答が検証されなかった場合には、エラーを示し(766)、結果データはクライアント308によって使用されない。応答が検証された場合には、結果データを使用する(768)。例えば、クライアント308は、さらなる処理のために結果データを使用する。
【００９７】
図8は、本明細書の実施形態による、装置800のモジュールの例を図示している。装置800は、TEE内で実行されることになるサブロジックコードを呼び出すとともにTEE内のサブロジックコードを登録するための図3のクライアント308などといった、クライアントの例示的な実施形態であり得る。装置800は、上記で説明した実施形態に対応し得るし、装置800は、以下のモジュールを含む。
【００９８】
送信モジュール802は、要求をノードに送信する。例えば、本明細書に記載しているように、ノードは、TEE内の高信頼プログラムを実行する。いくつかの例においては、要求は、識別子および1つまたは複数の要求パラメータを含み、識別子は、サブロジックコードを識別する。受信モジュール804は、要求に対する応答を受信する。例えば、本明細書に記載しているように、応答は、結果データおよびデジタル署名を含み、結果データは、TEE内のサブロジックコードを使用した1つまたは複数の要求パラメータの処理によって生成される。デジタル署名は、サブロジックコードの秘密コード鍵を使用して生成される。検証モジュール806は、デジタル署名とサブロジックコードの公開コード鍵とを使用して結果データを検証する。送信モジュール808は、TEE内の高信頼プログラムにサブロジックコードを登録するために登録要求を送信する。いくつかの例においては、登録要求は、識別子およびサブロジックコードを含む。受信モジュール810は、高信頼プログラムから登録結果を受信する。いくつかの例においては、登録結果は、サブロジックコードの公開コード鍵を含む。
【００９９】
一般に、本明細書において説明した発明特定事項の革新的な態様は、クライアントデバイスによって、ノードに要求を送信するステップであって、ノードは、TEE内の高信頼プログラムを実行し、要求は、識別子と1つまたは複数の要求パラメータとを含み、識別子は、サブロジックコードを識別する、ステップと、クライアントデバイスによって、要求に対する応答を受信するステップであって、応答は、結果データと、デジタル署名とを含み、結果データは、TEE内のサブロジックコードを使用した1つまたは複数の要求パラメータの処理によって生成され、デジタル署名は、サブロジックコードの秘密コード鍵を使用して生成される、ステップと、クライアントデバイスによって、デジタル署名とサブロジックコードの公開コード鍵とを使用して結果データを検証するステップといったアクションにおいて具現化され得る。本態様の他の実施形態は、対応するコンピュータシステム、装置、1つまたは複数のコンピュータ記憶デバイス上に記録されたコンピュータプログラムを含み、各々は、方法のアクションを行うように構成される。
【０１００】
前述のおよび他の実施形態の各々は、クライアントデバイスによって、TEE内の高信頼プログラムにサブロジックコードを登録するために登録要求を送信するステップであって、登録要求は、識別子とサブロジックコードとを含む、ステップと、クライアントデバイスによって、高信頼プログラムから登録結果を受信するステップであって、登録結果は、サブロジックコードの公開コード鍵を含む、ステップとをアクションがさらに含むことと、高信頼プログラムのデジタル署名と高信頼プログラムの公開鍵とを使用して登録結果を検証するステップであって、高信頼プログラムのデジタル署名は、高信頼プログラムの秘密鍵を使用して生成され、高信頼プログラムの公開鍵と秘密鍵とは、高信頼アプリケーションの認証の間に鍵ペアとして生成される、ステップをアクションがさらに含むことと、サブロジックが、識別子に基づいてコンピュータ可読メモリから読み出され、結果を生成するためにTEE内で実行されることと、サブロジックコードが、ノードに記憶されている複数のサブロジックコードのうちの1つであることと、公開コード鍵と秘密コード鍵とが、TEE内のサブロジックコードの登録の間にコード鍵ペアとして生成されることと、要求が、結果を提供するために実行されることになるサブロジックコードのバージョンを示すバージョン番号をさらに含むことと、クライアントデバイスが、ブロックチェーンネットワーク内のノードを含むことといった、特徴のうちの1つまたは複数を単独または組合せで必要に応じて含み得る。
【０１０１】
本明細書に記載しているように、本明細書の実施形態は、従来のシステムと比較して1つまたは複数の技術的効果を達成している。いくつかの実施形態においては、実行されることになるサブロジックコードの識別子のみが、サブロジックコードそのものの代わりに、クライアントから要求において送信される。このことは、要求のサイズを大幅に低減することになり、そのことが、コンピューティングリソース(例えば、プロセッサ、メモリ、ネットワーク帯域幅)を節約し、ネットワークボトルネックを軽減することになる。いくつかの実施形態においては、要求を受信したことに応答して、エンクレーブプログラムが要求において搬送されたサブロジックコードを解析およびロードする必要がないため、処理が増加することを回避している。いくつかの実施形態においては、各要求を処理した後に、エンクレーブプログラムは、サブロジックコード全体ではなく結果を署名するだけであり、クライアントは、署名された結果をチェックするだけである。これらのアクティビティの両方が、従来のアプローチと比較して低減された処理をもたらすことになる。いくつかの実施形態においては、サブロジックコードの使用のスケーラビリティを改善しており、サブロジックコードのバリエーション(例えば、バージョン)をサポートしている。
【０１０２】
本明細書において説明した発明特定事項ならびにアクションおよび処理の実施形態は、本明細書において開示した構造およびそれらの構造的均等物を含む、デジタル電子回路の形で、有形に具現化されたコンピュータソフトウェアまたはファームウェアの形で、コンピュータハードウェアの形で、またはそれらの組合せのうちの1つまたは複数で実装され得る。本明細書において説明した発明特定事項の実施形態は、データ処理装置による実行のためにまたはデータ処理装置の処理を制御するために、コンピュータプログラムキャリア上に符号化された、例えばコンピュータプログラム命令の1つまたは複数のモジュールといった1つまたは複数のコンピュータプログラムとして実装され得る。キャリアは、有形非一時的コンピュータ記憶媒体であり得る。あるいはまたは加えて、キャリアは、データ処理装置による実行に適した受信機装置への伝送のために情報を符号化するために生成された、人為的に生成した伝搬信号、例えば、機械生成された電気信号、光信号、または電磁気信号であり得る。コンピュータ記憶媒体は、機械可読ストレージデバイス、機械可読ストレージ回路基板、ランダムもしくはシリアルアクセスメモリデバイス、またはそれらのうちの1つまたは複数の組合せであり得るもしくは一部であり得る。コンピュータ記憶媒体は伝搬信号ではない。
【０１０３】
「データ処理装置」という用語は、例として、プログラマブルプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するためのあらゆる種類の装置、デバイス、およびマシンを含む。データ処理装置は、特殊用途ロジック回路、例えば、FPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)、またはGPU(グラフィック処理ユニット)を含み得る。装置はまた、ハードウェアに加えて、コンピュータプログラムのための実行環境を作成するコード、例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの1つまたは複数の組合せを構成するコードを含み得る。
【０１０４】
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリ、モジュール、ソフトウェアモジュール、エンジン、スクリプト、またはコードとも称し得るまたは記述し得る、コンピュータプログラムは、コンパイル型もしくはインタプリタ型言語、または宣言型もしくは手続き型言語を含む、任意の形式のプログラミング言語で書かれ得るし、スタンドアロンプログラムとして、またはモジュール、コンポーネント、エンジン、サブルーチン、もしくはコンピューティング環境における実行に適した他のユニットとして、といったことを含む任意の形式で、デプロイされ得る。環境は、1つまたは複数のロケーションにおいてデータ通信ネットワークによって相互接続される1つまたは複数のコンピュータを含み得る。
【０１０５】
コンピュータプログラムは、ファイルシステム内のファイルに対応し得るが、必ずしも必要ではない。コンピュータプログラムは、例えば、マークアップ言語ドキュメントに記憶されている1つまたは複数のスクリプトといった、他のプログラムまたはデータを保持するファイルの一部に、当該プログラム専用の単一のファイルに、または、例えば、1つまたは複数のモジュール、サブプログラム、またはコードの一部を記憶するファイルといった、複数の協調ファイルに、記憶され得る。
【０１０６】
本明細書において説明したプロセスおよびロジックフローは、1つまたは複数のコンピュータプログラムを実行し、入力データを処理して出力を生成することによって処理を行う、1つまたは複数のコンピュータによって行われ得る。プロセスおよびロジックフローはまた、例えばFPGA、ASIC、またはGPUといった特殊用途ロジック回路によって、または、特殊用途ロジック回路と1つまたは複数のプログラマブルコンピュータとの組合せによって、実装され得る。
【０１０７】
コンピュータプログラムの実行に適したコンピュータは、汎用もしくは特殊用途マイクロプロセッサもしくはその両方、または任意の他の種類の中央処理ユニットに基づき得る。一般的に、中央処理ユニットは、リードオンリーメモリまたはランダムアクセスメモリまたはその両方から命令およびデータを受信することになる。コンピュータの要素は、命令を実行するための中央処理ユニットと、命令およびデータを記憶するための1つまたは複数のメモリデバイスとを含み得る。中央処理ユニットおよびメモリは、特殊用途ロジック回路によって補完され得る、またはそれに組み込まれ得る。
【０１０８】
一般的に、コンピュータはまた、1つまたは複数のマスストレージデバイスを含むことになる、または、1つまたは複数のマスストレージデバイスからデータを受信もしくは1つまたは複数のマスストレージデバイスにデータを送信することが動作可能なように結合されることになる。マスストレージデバイスは、例えば、磁気ディスク、光磁気ディスク、もしくは光ディスク、またはソリッドステートドライブであり得る。しかしながら、コンピュータは、そのようなデバイスを必ずしも有する必要はない。さらに、コンピュータは、数例挙げるとすれば、例えば、モバイル電話、携帯情報端末(PDA)、モバイルオーディオもしくはビデオプレーヤ、ゲームコンソール、Global Positioning System(GPS)受信機、または例えばユニバーサルシリアルバス(USB)フラッシュドライブなどのポータブルストレージデバイスといった別のデバイスに組み込まれ得る。
【０１０９】
ユーザとのインタラクションを提供するために、本明細書において説明した発明特定事項の実施形態は、ユーザに情報を表示するための、例えばLCD(液晶ディスプレイ)モニタといった、表示デバイスと、コンピュータに入力を提供することを可能にする、例えば、キーボード、および例えば、マウス、トラックボール、またはタッチパッドなどのポインティングデバイスといった、入力デバイスとを有するコンピュータ上で実装され得る、または、そのようなコンピュータと通信するように構成され得る。同様に、他の種類のデバイスがユーザとのインタラクションを提供するために使用され得る。例えば、ユーザに提供されるフィードバックは、例えば、視覚フィードバック、聴覚フィードバック、または触覚フィードバックといった任意の形式の感覚フィードバックであり得るし、ユーザからの入力は、音響、音声、または触覚入力を含む任意の形式で受信され得る。加えて、コンピュータは、ユーザによって使用されるデバイスにドキュメントを送信することおよびユーザによって使用されるデバイスからドキュメントを受信することによって、例えば、ユーザのデバイス上のウェブブラウザから受信した要求に応答してウェブブラウザにウェブページを送信することによって、または、例えばスマートフォンもしくは電子タブレットといったユーザデバイス上で動作するアプリとのインタラクションを行うことによって、ユーザとのインタラクションを行い得る。また、コンピュータは、メッセージングアプリケーションを動作する例えばスマートフォンといったパーソナルデバイスにテキストメッセージまたは他の形式のメッセージを送信し、その返信としてユーザから応答メッセージを受信することによって、ユーザとのインタラクションを行い得る。
【０１１０】
本明細書は、システム、装置、およびコンピュータプログラムコンポーネントに関連して「ように構成される」という用語を使用している。特定の処理またはアクションを行うように構成される1つまたは複数のコンピュータのシステムとは、処理においてシステムに処理またはアクションを行わせるソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せがインストールされているシステムを意味する。特定の処理またはアクションを行うように構成される1つまたは複数のコンピュータプログラムとは、データ処理装置によって実行されると装置に処理またはアクションを行わせる命令を含む1つまたは複数のプログラムを意味する。特定の処理またはアクションを行うように構成される特殊用途ロジック回路とは、処理またはアクションを行う電子ロジックを有する回路を意味する。
【０１１１】
本明細書は多くの特定の実施形態の詳細を含んでいるが、これらを、特許請求の範囲そのものによって定義される、主張しているものについての範囲に対する限定として解釈すべきではなく、むしろ特定の実施形態に固有のものであり得る特徴の説明として解釈すべきである。別個の実施形態に即して本明細書において説明したある特徴もまた、組み合わせることで単一の実施形態で実現され得る。反対に、単一の実施形態に即して説明した様々な特徴もまた、別々に複数の実施形態でまたは任意のサブコンビネーションで実現され得る。さらに、ある組合せで動作するものとして特徴を上記で説明している場合があるが、たとえ最初はそのように主張していたとしても、いくつかのケースにおいては、主張した組合せのうちの1つまたは複数の特徴をその組合せから削除し得るし、主張したものをサブコンビネーションまたはサブコンビネーションの変形とし得る。
【０１１２】
同様に、処理を特定の順序で図面に図示するとともに特許請求の範囲に記載しているが、このことを、示した特定の順序でもしくは一連の順序でそのような処理を行う必要があると理解すべきではないし、または、望ましい結果を達成するために図示した処理のすべてを行う必要があると理解すべきではない。ある環境においては、マルチタスク処理および並行処理が有利となり得る。さらに、上記で説明した実施形態における様々なシステムモジュールおよびコンポーネントの分離がすべての実施形態においてそのような分離を必要とすると理解すべきではなく、説明したプログラムコンポーネントおよびシステムは一般的に単一のソフトウェア製品に一緒に統合され得るまたは複数のソフトウェア製品にパッケージ化され得ると理解されたい。
【０１１３】
発明特定事項の特定の実施形態を説明してきた。他の実施形態も以下の特許請求の範囲の範囲内にある。例えば、特許請求の範囲に記載のアクションは、異なる順序で行われ得るし、それでも望ましい結果を達成し得る。一例として、添付の図面に図示したプロセスは、望ましい結果を達成するために示した特定の順序または一連の順序を必ずしも必要とするわけではない。いくつかのケースにおいては、マルチタスク処理およびパラレル処理が有利となり得る。
【符号の説明】
【０１１４】
110  ネットワーク
202  関与者A
204  関与者B
206  関与者C
308  クライアント
310:ノード
310:ノード(TEE)
312  認証サービス
320  認証エビデンス
322  測定値
324  公開鍵
326  署名
334  検証結果
336  署名
802  送信モジュール
804  受信モジュール
806  検証モジュール
808  送信モジュール
810  受信モジュール
【図１】
2020522034.tif 000003
【図２】
2020522034.tif 000004
【図３】
2020522034.tif 000005
【図４】
2020522034.tif 000006
【図５】
2020522034.tif 000007
【図６】
2020522034.tif 000008
【図７Ａ】
2020522034.tif 000009
【図７Ｂ】
2020522034.tif 000010
【図８】
2020522034.tif 000011
【国際調査報告】
2020522034.tif 000012
2020522034.tif 000013