IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インテル コーポレイションの特許一覧

特開2022-99256信頼された実行環境のためのスケーラブルな証明
<>
  • 特開-信頼された実行環境のためのスケーラブルな証明 図1
  • 特開-信頼された実行環境のためのスケーラブルな証明 図2
  • 特開-信頼された実行環境のためのスケーラブルな証明 図3
  • 特開-信頼された実行環境のためのスケーラブルな証明 図4
  • 特開-信頼された実行環境のためのスケーラブルな証明 図5
  • 特開-信頼された実行環境のためのスケーラブルな証明 図6
  • 特開-信頼された実行環境のためのスケーラブルな証明 図7
  • 特開-信頼された実行環境のためのスケーラブルな証明 図8
  • 特開-信頼された実行環境のためのスケーラブルな証明 図9
  • 特開-信頼された実行環境のためのスケーラブルな証明 図10
  • 特開-信頼された実行環境のためのスケーラブルな証明 図11
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022099256
(43)【公開日】2022-07-04
(54)【発明の名称】信頼された実行環境のためのスケーラブルな証明
(51)【国際特許分類】
   G06F 21/62 20130101AFI20220627BHJP
   G06F 21/60 20130101ALI20220627BHJP
【FI】
G06F21/62
G06F21/60 320
【審査請求】未請求
【請求項の数】26
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2021185355
(22)【出願日】2021-11-15
(31)【優先権主張番号】17/131,684
(32)【優先日】2020-12-22
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】593096712
【氏名又は名称】インテル コーポレイション
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】アンジョ ルーカス バールディック‐オバーワグナー
(72)【発明者】
【氏名】ラヴィ エル.サヒタ
(72)【発明者】
【氏名】モナ ヴィジュ
(72)【発明者】
【氏名】デヨル リー
(72)【発明者】
【氏名】ハイドン シア
(72)【発明者】
【氏名】ラメシュクマール イリッカル
(72)【発明者】
【氏名】サミュエル オルティス
(72)【発明者】
【氏名】クシティジュ アルン ドシ
(72)【発明者】
【氏名】ムーラッド チェルファウイ
(72)【発明者】
【氏名】アンジェイ クリアタ
(72)【発明者】
【氏名】テク ジョ ゴー
(57)【要約】      (修正有)
【課題】信頼された実行環境のためのスケーラブルな証明を実現するシステム、方法及びプログラムを提供する。
【解決手段】ファンクションアズアサービス(FaaS)環境において、クライアントが、FaaSサーバ上の信頼された実行環境(TEE)内で実行される機能を利用する。FaaSプラットフォームの複数のテナントは、ゲートウェイを介して、FaaSプラットフォームにより実行される機能を提供する。各テナントのクライアントデバイスは、FaaSプラットフォーム上の任意の数のTEE内で実行され、かつ、ゲートウェイを介してアクセスされる、任意の数の機能のためのコード及びデータを提供し、さらに、単一の代理証明器TEEのためのコード及びデータを提供し、代理証明器TEEを使用してテナントの他のTEEの各々を証明し、それらのTEE内の機能との信頼を確立する。
【選択図】図6
【特許請求の範囲】
【請求項1】
信頼された実行環境(TEE)のリモート証明を提供するシステムであって、
少なくとも1つのプロセッサと、
前記プロセッサに動作上結合されたネットワークインターフェースと、
前記プロセッサにより実行されると前記少なくとも1つのプロセッサに動作を実行させる命令を記憶するための、前記少なくとも1つのプロセッサに結合されたメモリと、を含み、前記動作は、
第1の機能のための第1のTEEを作成することと、
第2の機能のための第2のTEEを作成することと、
前記第1の機能へのリモートアクセスのためのゲートウェイを提供することと、
クライアントデバイスから、及び前記ネットワークインターフェースを介して、前記第2のTEEの完全性を検証する要求を受信することと、
前記要求に応答して、
前記第1の機能を実行して前記第2のTEEの証明データを生成することと、
前記証明データを前記クライアントデバイスに前記ネットワークインターフェースを介して提供することと、
を含む、システム。
【請求項2】
前記第2のTEEの前記証明データの生成は、
前記第2のTEE内から、前記第2のTEEのアイデンティティと前記第2のTEEの属性とメッセージ認証コード(MAC)とを含む署名された構造を生成することであり、前記構造は一時的な秘密鍵を使用して署名される、ことと、
前記第1のTEEの前記第1の機能を使用して前記署名された構造を検証することと、
を含む、請求項1に記載のシステム。
【請求項3】
前記動作は、
前記クライアントデバイスから、及び前記ネットワークインターフェースを介して、前記ゲートウェイで機能コールを受けることであり、前記機能コールは前記第2の機能に関連づけられている、ことと、
前記機能コールに応答して、
前記第2の機能を実行して戻り値を生成することと、
前記戻り値を前記クライアントデバイスに前記ネットワークインターフェースを介して提供することと、
をさらに含む、請求項1又は請求項2に記載のシステム。
【請求項4】
前記動作は、
前記機能コールに応答して、前記第2の機能により、前記第1のTEEのデータへのアクセスを要求すること
をさらに含む、請求項3に記載のシステム。
【請求項5】
前記動作は、
前記第1の機能により、前記第2の機能が検証されたと判定することと、
前記第2の機能による、前記第1のTEEのデータへのアクセスの要求に応答して、前記第2の機能が検証されたという判定に基づいて、前記データへの要求されたアクセスを提供することと、
をさらに含む、請求項4に記載のシステム。
【請求項6】
前記データへの要求されたアクセスの提供は、
一時的な鍵を使用して前記データを暗号化することと、
前記第2の機能に前記一時的な鍵へのアクセスを提供することと、
を含む、請求項5に記載のシステム。
【請求項7】
前記動作は、
前記第2のTEEの完全性を検証する前記要求を受信する前に、前記第1のTEEの完全性を検証する第2の要求を受信すること
をさらに含む、請求項1乃至6のうちいずれか1項に記載のシステム。
【請求項8】
前記ゲートウェイは、前記クライアントデバイスにより検証されない、請求項1乃至7のうちいずれか1項に記載のシステム。
【請求項9】
前記ゲートウェイは、第3のTEEの第3の機能へのリモートアクセスを提供し、
前記第1の機能は、前記第3のTEEの完全性を検証できない、
請求項1乃至8のうちいずれか1項に記載のシステム。
【請求項10】
前記動作は、
第4の機能のための第4のTEEを作成することと、
第2のクライアントデバイスから、及び前記ネットワークインターフェースを介して、前記第4の機能への第2の機能コールを受けることであり、前記第2の機能コールは前記第3のTEEの完全性を検証する、ことと、
をさらに含む、請求項9に記載のシステム。
【請求項11】
信頼された実行環境(TEE)のリモート証明を提供する方法であって、
プロセッサにより、第1の機能のための第1の信頼された実行環境(TEE)を作成するステップと、
前記プロセッサにより、第2の機能のための第2のTEEを作成するステップと、
前記プロセッサにより、前記第1の機能へのリモートアクセスのためのゲートウェイを提供するステップと、
クライアントデバイスから、及びネットワークインターフェースを介して、前記第2のTEEの完全性を検証する要求を受信するステップと、
前記要求に応答して、
前記プロセッサにより、前記第1の機能を実行して前記第2のTEEの証明データを生成するステップと、
前記証明データを前記クライアントデバイスに前記ネットワークインターフェースを介して提供するステップと、
を含む方法。
【請求項12】
前記第2の機能の前記証明データの生成は、
前記第2のTEE内から、前記第2のTEEのアイデンティティと前記第2のTEEの属性とメッセージ認証コード(MAC)とを含む署名された構造を生成することであり、前記構造は一時的な秘密鍵を使用して署名される、ことと、
前記プロセッサにより、前記第1のTEEの前記第1の機能を使用して前記署名された構造を検証することと、
を含む、請求項11に記載の方法。
【請求項13】
前記クライアントデバイスから、及び前記ネットワークインターフェースを介して、前記ゲートウェイで機能コールを受けることであり、前記機能コールは前記第2の機能に関連づけられている、ステップと、
前記機能コールに応答して、
前記プロセッサにより、前記第2の機能を実行して戻り値を生成するステップと、
前記戻り値を前記クライアントデバイスに前記ネットワークインターフェースを介して提供するステップと、
をさらに含む、請求項11又は請求項12に記載の方法。
【請求項14】
前記機能コールに応答して、前記第2の機能により、前記第1のTEEのデータへのアクセスを要求するステップ
をさらに含む請求項13に記載の方法。
【請求項15】
前記第1の機能により、前記第2の機能が検証されたと判定するステップと、
前記第2の機能による、前記第1のTEEのデータへのアクセスの要求に応答して、前記第2の機能が検証されたという判定に基づいて、前記データへの要求されたアクセスを提供するステップと、
をさらに含む、請求項14に記載の方法。
【請求項16】
前記データへの要求されたアクセスの提供は、
一時的な鍵を使用して前記データを暗号化することと、
前記第2の機能に前記一時的な鍵へのアクセスを提供することと、
を含む、請求項15に記載の方法。
【請求項17】
前記第2のTEEの完全性を検証する前記要求を受信する前に、前記第1のTEEの完全性を検証する第2の要求を受信するステップ
をさらに含む請求項11乃至16のうちいずれか1項に記載の方法。
【請求項18】
前記ゲートウェイは、前記クライアントデバイスにより検証されない、請求項11乃至17のうちいずれか1項に記載の方法。
【請求項19】
前記ゲートウェイは、第3のTEEの第3の機能へのリモートアクセスを提供し、
前記第1の機能は、前記第3のTEEの完全性を検証できない、
請求項11乃至18のうちいずれか1項に記載の方法。
【請求項20】
前記プロセッサにより、第4の機能のための第4のTEEを作成するステップと、
第2のクライアントデバイスから、及び前記ネットワークインターフェースを介して、前記第4の機能への第2の機能コールを受けるステップであり、前記第2の機能コールは前記第3のTEEの完全性を検証する、ステップと、
をさらに含む請求項19に記載の方法。
【請求項21】
少なくとも1つのプロセッサに、動作を実行することにより信頼された実行環境(TEE)のリモート証明を提供させるコンピュータプログラムであって、前記動作は、
第1の機能のための第1の信頼された実行環境(TEE)を作成することと、
第2の機能のための第2のTEEを作成することと、
前記第1の機能へのリモートアクセスのためのゲートウェイを提供することと、
クライアントデバイスから、及びネットワークインターフェースを介して、前記第2のTEEの完全性を検証する要求を受信することと、
前記要求に応答して、
前記第1の機能を実行して前記第2のTEEの証明データを生成することと、
前記証明データを前記クライアントデバイスに前記ネットワークインターフェースを介して提供することと、
を含む、コンピュータプログラム。
【請求項22】
前記第2の機能の前記証明データの生成は、
前記第2のTEE内から、前記第2のTEEのアイデンティティと前記第2のTEEの属性とメッセージ認証コード(MAC)とを含む署名された構造を生成することであり、前記構造は一時的な秘密鍵を使用して署名される、ことと、
前記第1のTEEの前記第1の機能を使用して前記署名された構造を検証することと、
を含む、請求項21に記載のコンピュータプログラム。
【請求項23】
前記動作は、
前記クライアントデバイスから、及び前記ネットワークインターフェースを介して、前記ゲートウェイで機能コールを受けることであり、前記機能コールは前記第2の機能に関連づけられている、ことと、
前記機能コールに応答して、
前記第2の機能を実行して戻り値を生成することと、
前記戻り値を前記クライアントデバイスに前記ネットワークインターフェースを介して提供することと、
をさらに含む、請求項21又は請求項22に記載のコンピュータプログラム。
【請求項24】
信頼された実行環境(TEE)のリモート証明を提供するシステムであって、
記憶のための手段と、
ネットワークインターフェース手段と、
処理手段であり、
第1の機能のための第1のTEEを作成し、
第2の機能のための第2のTEEを作成し、
前記第1の機能へのリモートアクセスのためのゲートウェイを提供し、
クライアントデバイスから、及び前記ネットワークインターフェース手段を介して、前記第2のTEEの完全性を検証する要求を受信し、
前記要求に応答して、
前記第1の機能を実行して前記第2のTEEの証明データを生成し、
前記証明データを前記クライアントデバイスに前記ネットワークインターフェース手段を介して提供する
処理手段と、
を含むシステム。
【請求項25】
前記第2のTEEの前記証明データを生成するために、前記処理手段は、
前記第2のTEE内から、前記第2のTEEのアイデンティティと前記第2のTEEの属性とメッセージ認証コード(MAC)とを含む署名された構造を生成し、前記構造は一時的な秘密鍵を使用して署名され、
前記第1のTEEの前記第1の機能を使用して前記署名された構造を検証する、
請求項24に記載のシステム。
【請求項26】
請求項21乃至23のうちいずれか1項に記載のコンピュータプログラムを記憶したコンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本明細書に開示される主題事項は、概して、ハードウェアの信頼された実行環境(TEE)に関する。具体的には、本開示は、TEE内の機能に対するスケーラブルな証明及びオーケストレーションのためのシステム及び方法を扱う。
【背景技術】
【0002】
ハードウェア特権レベルは、デバイス上で動作するアプリケーションによるメモリアクセスを制限するために、プロセッサにより使用されることがある。オペレーティングシステムは、より高い特権レベルで動作し、デバイスの全てのメモリにアクセスし、他のアプリケーションのためのメモリ範囲を定義することができる。より低い特権レベルで動作するアプリケーションは、オペレーティングシステムにより定義された範囲内のメモリへのアクセスに制限され、他のアプリケーション又はオペレーティングシステムのメモリにアクセスすることができない。しかしながら、アプリケーションは、悪意のある又は損なわれたオペレーティングシステムからの保護を有さない。
【0003】
エンクレーブは、エンクレーブ内にロードされたコード及びデータがエンクレーブ外で実行するコードによるアクセスから保護されることを保証する保護をプロセッサにより有効にされる。したがって、エンクレーブは、エンクレーブに含まれるデータ及びコードの、オペレーティングシステムを含む悪意のあるソフトウェアからのアクセスを、ハードウェアレベルで防止する孤立した実行環境を提供する。
【図面の簡単な説明】
【0004】
いくつかの実施形態を添付図面の図において限定でなく例として示す。
図1】いくつかの例示的な実施形態による、TEEを使用してサービスとして機能を提供するサーバに適したネットワーク環境を示すネットワーク図である。
図2】いくつかの例示的な実施形態による、TEEのスケーラブルな証明に適した、ファンクションアズアサービスサーバのブロック図である。
図3】従来技術のリングベースのメモリ保護のブロック図である。
図4】いくつかの例示的な実施形態による、TEEの待ち時間を低減するのに適した、エンクレーブベースのメモリ保護のブロック図である。
図5】いくつかの例示的な実施形態による、TEEのスケーラブルな証明での使用に適した、データベーススキーマのブロック図である。
図6】いくつかの例示的な実施形態による、TEEのスケーラブルな証明での使用に適した、機能とデバイスとの間の通信リンクのブロック図である。
図7】いくつかの例示的な実施形態による、TEEのスケーラブルな証明を提供する際のサーバによる実行に適した方法の動作を示すフローチャートである。
図8】いくつかの例示的な実施形態による、TEEのスケーラブルな証明を利用する際のクライアントによる実行に適した方法の動作を示すフローチャートである。
図9】いくつかの例示的な実施形態による、TEEのスケーラブルな証明を利用する際のクライアントによる実行に適した方法の動作を示すフローチャートである。
図10】コンピューティングデバイスのソフトウェアアーキテクチャの一例を示すブロック図である。
図11】マシンに本明細書で論じられる方法のいずれか1つ以上を実行させるための命令が実行され得る、コンピュータシステムの例示的な形態のマシンのブロック図である。
【発明を実施するための形態】
【0005】
例示的な方法及びシステムは、TEEのスケーラブルな証明(attestation)に向けられる。最も一般的な意味では、TEEは、その信頼がどのように得られるかにかかわらず、任意の信頼された実行環境(trusted execution environment)である。エンクレーブ(enclave)は、エンクレーブの外部のプロセスが高められた特権レベルで動作しているとしても、それらのプロセスによるアクセスから保護されたメモリの一部である。例として、TEEは、エンクレーブ内のコードを実行することにより提供されるものとして論じられる。しかしながら、他のタイプのTEEが使用されてもよい。
【0006】
TEEは、機密情報をTEEの外部の全てのソフトウェアから保護することにより機密情報のセキュアな取り扱いを可能にするために使用することができる。TEEは、モジュールプログラミングにも使用されてもよく、各モジュールは、他のモジュールにより引き起こされる脆弱性にさらされることなく、それ自身の機能性のために必要なあらゆるものを含む。例えば、あるTEEに対して成功したコードインジェクション攻撃が、別のTEEのコードに影響を与えることはできない。
【0007】
トータルメモリ暗号化(Total memory encryption、TME)は、メモリ内のデータを、プロセッサをバイパスすることによりアクセスされることから保護する。システムは、ブート時にプロセッサ内で暗号化鍵を生成し、この鍵をプロセッサの外部に決して記憶しない。TME暗号化鍵は、それがリブートをまたいで存続せず、プロセッサの外部に決して記憶されないため、一時的な鍵(ephemeral key)である。プロセッサによりメモリに書き込まれた全てのデータは、暗号化鍵を使用して暗号化され、それがメモリから読み戻されるとき復号される。したがって、プロセッサの仲介なくメモリから直接データを読み取ろうとするハードウェアベースの攻撃は失敗する。
【0008】
マルチキーTME(MKTME)は、複数の鍵を利用するようにTMEを拡張する。個々のメモリページは、TMEの一時的な鍵を使用して、又はソフトウェアにより提供される鍵を使用して暗号化することができる。これは、ソフトウェアベースの攻撃に関してTMEより高められたセキュリティを提供する可能性があり、なぜならば、攻撃者は、攻撃ソフトウェアがアクセスを獲得した任意のメモリをプロセッサに自動的に復号させるのでなく、ターゲットソフトウェアにより使用されている特定の鍵を識別する必要があるためである。
【0009】
ファンクションアズアサービス(function-as-a-service、FaaS)環境において、クライアントは、FaaSサーバ上のTEE内で実行する機能を利用する。FaaSプラットフォームは、アプリケーションロジックを実行するがデータを記憶しないクラウドコンピューティングサービスを提供する。機能に機密データを提供する前に、クライアントは、機能がTEEで実行されていること、したがって、機密データは信頼された環境の一部でない他の機能によりアクセスできないことを検証する。
【0010】
証明のためのいくつかの完全又は部分的な解決策が存在する。例えば、TEEにおける実行のためにFaaSサーバに提供されるコードブロックに、公開鍵を埋め込むことができる。クライアントデバイスは、データをコードブロックにおいて機能に送信する前に、データを暗号化することができる。したがって、クライアントデバイスは、公開鍵へのアクセスを有するコードのみが暗号化されたデータにアクセスできることを保証される。しかしながら、この機能は、依然として、セキュア化されていない環境で実行される可能性がある。さらに、攻撃者は、コードブロックから公開鍵を抽出し、それを意図された機能になりすます悪意のあるコードで使用する可能性がある。
【0011】
エンクレーブが作成される時、それは「測定され(measured)」得る。この文脈において、測定値は、エンクレーブの属性及び内容を一意に識別するのに十分なデータの集合を指す。したがって、2つのエンクレーブは、それらが同じコードとデータを含む、同じ量のメモリを使用する、等しいセキュリティレベルを有するなどの場合にのみ、同じ測定値を有することになる。エンクレーブの測定は、ハードウェアプロセッサにより実行され、保護されたレジスタ又はメモリに記憶される。測定値は、楕円曲線デジタル署名アルゴリズム(Elliptic-Curve-Digital-Signature-Algorithm、ECDSA)ベースの非対称証明鍵を使用してプロセッサにより署名され得る。対応する復号鍵を組み込まれた別のプロセッサが、署名を検証することができる。署名されたデータは、タイムスタンプと署名者の識別子を含むことができる。このように、受信者は、署名されたデータが現在通用し、FaaSサーバで生じていることを確認することができる。
【0012】
この証明メカニズムを使用し、クライアントは、クライアントから直接アクセスされている機能が実際にTEEで動作していることを証明することができる。しかしながら、FaaSサーバが複数の機能へのゲートウェイインターフェースを提供することは有益であり得る。例えば、表現状態転送(representational state transfer、REST)アプリケーションプログラミングインターフェース(API)は、クライアントがハイパーテキストトランスポートプロトコル(HTTP)を使用して機能コールを行うことを可能にする。これらの実装において、ゲートウェイアプリケーションは、REST API機能コールの全てを受け取り、ユニフォームリソースロケータ(URL)を機能識別子及び機能パラメータに変換し、機能パラメータと共に機能をコールし、結果を受け取り、ネットワークを通じて結果を提供する。ゲートウェイはTEE内で動作してもよく、その場合、クライアントデバイスはゲートウェイを証明し得る。しかしながら、ゲートウェイの測定値は、下層の機能もTEEで動作していることをクライアントデバイスが証明できるものではない。
【0013】
FaaSプラットフォームの複数のテナントは、ゲートウェイを介してFaaSプラットフォームにより実行される機能を提供することができる。テナントは、データへの共通のアクセスを共有するユーザのグループ、例えば、特定の企業にリンクされたアカウントを有するユーザなどである。テナント間のデータ保護は、テナント及びFaaSプラットフォームの目標であり得る。FaaSプラットフォームは、1つ以上のデータセンタにおいて、1つ以上のFaaSサーバを含む。したがって、ゲートウェイは、分散コンピューティングのためのロードバランサ又は他の機能性を含むことがある。FaaSプラットフォームがゲートウェイを介して複数のテナントに機能を提供しているため、1つのテナントがゲートウェイを制御することはできない。
【0014】
本明細書で論じられるように、各テナントは、FaaSプラットフォーム上の任意の数のTEE内で実行され、かつゲートウェイを介してアクセスされる、任意の数の機能のためのコード及びデータを提供することができる。さらに、各テナントは、単一の代理証明器(surrogate attester)TEEのためのコード及びデータを提供することができる。テナントのクライアントデバイスは、代理証明器TEEを使用してテナントの他のTEEの各々を証明し、それらのTEE内の機能との信頼を確立する。ひとたび機能が証明されると、クライアントデバイスは、テナントの他のTEEがゲートウェイ(これも証明され得る)と同じプラットフォーム上で動作していることを確信する。
【0015】
テナントが代理証明器TEEの内容をコントロールするため、代理証明器TEEは、テナントのデプロイされたTEEの各々をセキュアに証明するように設計でき、これは、ゲートウェイが行うことはできない。各テナントに対して単一の代理証明器TEEのみが必要とされるため、この解決策はスケーラブルであり、証明のオーバーヘッドを増加させることなく各テナントに対して任意の数のTEEを作成することを可能にする。
【0016】
テナントのエンクレーブを証明する既存の方法との比較では、本明細書に論じられる方法及びシステムは、各エンクレーブのネットワークを通じての直接の証明を必要とせずにエンクレーブにアクセスするゲートウェイの使用を可能にし、したがって、ネットワークの使用を低減させる。テナント機能がより精細な粒度のエンクレーブで保護されるとき、単一の代理証明器TEEのオーバーヘッドは増加しないため、システムセキュリティが高められる。これらの効果が全体として考慮されるとき、本明細書に記載される方法論の1つ以上は、さもなければエンクレーブの証明に関与するであろう特定の労力又はリソースの必要を回避することができる。1つ以上のマシン、データベース、又はネットワークにより使用される計算リソースが同様に削減され得る。このような計算リソースの例には、プロセッササイクル、ネットワークトラフィック、メモリ使用量、データ記憶容量、電力消費、及び冷却キャパシティが含まれる。
【0017】
図1は、いくつかの例示的な実施形態による、TEEを使用してサービスとして機能を提供するサーバに適したネットワーク環境100を示すネットワーク図である。ネットワーク環境100は、FaaSサーバ110A及び110B、クライアントデバイス120A及び120B、並びにネットワーク130を含む。FaaSサーバ110A~110Bは、ネットワーク130を介してクライアントデバイス120A~120Bに機能を提供する。FaaSサーバ110A及び110Bは、集合的にFaaSサーバ110と、又は総称的にFaaSサーバ110と呼ばれることがある。クライアントデバイス120A及び120Bは、集合的にクライアントデバイス120と、又は総称的にクライアントデバイス120と呼ばれることがある。
【0018】
クライアントデバイス120A及び120Bは、異なるテナントのデバイスであり得、それにより、各テナントは、それらのテナント固有のデータ及びコードが他のテナントによりアクセス可能でないことを保証することを望む。したがって、FaaSサーバ110A~110Bは、提供される各FaaSに対してエンクレーブを使用することができる。FaaSサーバ110A~110Bと、クライアントデバイス120A及び120Bは各々、全体的に又は部分的に、図9に関して後述するように、コンピュータシステムに実装することができる。
【0019】
TEEの証明をスケーラブルに提供するために本明細書に記載されるシステム及び方法を使用することができる。例えば、各テナントに対する証明代理エンクレーブをFaaSサーバ110により作成して、ゲートウェイを通して機能にアクセスする前に、提供される機能のクライアントデバイス120による証明を可能にすることができる。
【0020】
図1に示すマシン、データベース、又はデバイスのいずれも、そのマシン、データベース、又はデバイスについて本明細書に記載される機能を実行するための専用コンピュータであるようにソフトウェアにより修正される(例えば、構成又はプログラムされる)汎用コンピュータで実装することができる。例えば、本明細書に記載される方法のいずれか1つ以上を実施可能なコンピュータシステムは、図9に関して後に論じられる。本明細書で用いられるとき、「データベース」は、データ記憶リソースであり、テキストファイル、テーブル、スプレッドシート、関係データベース(例えば、オブジェクト関係データベース)、トリプルストア、階層的データストア、ドキュメント指向NoSQLデータベース、ファイルストア、又はこれらの任意の適切な組み合わせとして構造化されたデータを記憶することができる。データベースは、インメモリデータベースでもよい。さらに、図1に示すマシン、データベース、又はデバイスのうちの任意の2つ以上を単一のマシン、データベース、又はデバイスに組み合わせてもよく、任意の単一のマシン、データベース、又はデバイスについて本明細書に記載される機能を複数のマシン、データベース、又はデバイス間で細分化してもよい。
【0021】
FaaSサーバ110及びクライアントデバイス120は、ネットワーク130により接続される。ネットワーク130は、マシン、データベース、及びデバイスの間の通信を可能にする任意のネットワークであってよい。したがって、ネットワーク130は、有線ネットワーク、無線ネットワーク(例えば、モバイル又はセルラネットワーク)、又はこれらの任意の適切な組み合わせでもよい。ネットワーク130は、プライベートネットワーク、パブリックネットワーク(例えば、インターネット)、又はこれらの任意の適切な組み合わせを構成する1つ以上の部分を含んでもよい。デバイスの各々は、ネットワークインターフェースを使用してネットワーク130に接続される。
【0022】
図2は、いくつかの例示的な実施形態による、TEEのスケーラブルな証明に適した、FaaSサーバ110Aのブロック図200である。FaaSサーバ110Aは、通信モジュール210、ゲートウェイ機能220、アプリケーションの信頼されたコンポーネント(trusted component)230、信頼されたドメインモジュール(trusted domain module)240、代理証明器(surrogate attester)250、共有メモリ260、及びプライベートメモリ270を含み、全てが互いに(例えば、バス、共有メモリ、又はスイッチを介して)通信するように構成されるものとして示されている。本明細書に記載されるモジュールのうちの任意の1つ以上が、ハードウェア(例えば、マシンのプロセッサ)を使用して実装されてもよい。例えば、本明細書に記載される任意のモジュールが、そのモジュールについて本明細書に記載される動作を実行するように構成されたプロセッサにより実装されてもよい。さらに、これらのモジュールのうちの任意の2つ以上を単一のモジュールに組み合わせてもよく、単一のモジュールについて本明細書に記載される機能を複数のモジュール間で細分化してもよい。さらに、様々な例示的な実施形態によれば、単一のマシン、データベース、又はデバイス内に実装されるものとして本明細書に記載されるモジュールは、複数のマシン、データベース、又はデバイスにわたり分散されてもよい。
【0023】
通信モジュール210は、FaaSサーバ110Aに送信されたデータを受信し、FaaSサーバ110Aからデータを送信する。例えば、通信モジュール210は、クライアントデバイス130Aから、機能を実行する要求を受信することができる。機能が実行された後、機能の結果は、通信モジュール210によりクライアントデバイス130Aに提供される。通信モジュール210により送受信される通信は、ネットワーク130により仲介されてもよい。コールされる機能は、別の機能により仲介されてもよい。例えば、通信モジュール210は、ゲートウェイ機能220にURLを提供することができる。ゲートウェイ機能220は、URLをパースし(parses)、信頼されたコンポーネント230内の機能を呼び出す。
【0024】
ゲートウェイ機能220は、エンクレーブの内部又は外部で実行することができる。ゲートウェイ機能がエンクレーブ内で動作しない場合、オペレーティングシステム又は他の信頼されていないコンポーネントが損なわれる場合、ゲートウェイ機能220は攻撃に対して脆弱である。信頼されたコンポーネント230は、エンクレーブ内で実行される。したがって、オペレーティングシステム又は信頼されていないコンポーネント220が損なわれた場合でも、信頼されたコンポーネント230のデータ及びコードはセキュアなままである。
【0025】
信頼されたドメインモジュール240は、エンクレーブを作成及び保護し、ゲートウェイ機能220と信頼されたコンポーネント230との間の実行の遷移の責任を負う。署名されたコードが、信頼されたドメインモジュール240に提供され得、信頼されたドメインモジュール240は、コードが署名されてからコードが修正されていないことを検証する。署名されたコードは、エンクレーブの一部として示されている物理メモリの一部にロードされる。その後、ハードウェア保護は、信頼されていないソフトウェアによるエンクレーブメモリのアクセス、修正、実行、又はこれらの適切な組み合わせを防止する。このコードは、信頼されたドメインモジュール240にのみ利用可能な鍵を使用して暗号化されてもよい。
【0026】
信頼されたコンポーネント230がひとたび初期化されると、ゲートウェイ機能220は、信頼されていないモードから信頼されたモードへ、又は信頼されたエンクレーブ間で遷移する、信頼されたドメインモジュール240の特別なプロセッサ命令を使用して、信頼されたコンポーネント230の機能を呼び出すことができる。信頼されたコンポーネント230は、パラメータ検証を実行し、パラメータが有効である場合に要求された機能を実行し、信頼されたドメインモジュール240を介して制御をゲートウェイ機能220に返す。複数の信頼されたコンポーネント230がFaaSサーバ110A内でインスタンス化され、各々が1つ以上の機能を提供してもよい。
【0027】
信頼されたドメインモジュール240は、インテル(登録商標)ソフトウェアガードエクステンション(Software Guard Extensions、SGX)、インテル(登録商標)トラストドメインエクステンション(Trust Domain Extensions、TDX)、又は双方を提供するインテル(登録商標)ハードウェアプロセッサの1つ以上のコンポーネントとして実装されてもよい。インテル(登録商標)SGXにおいて、証明は、ソフトウェアエンティティがエンクレーブ内に保護されたインテル(登録商標)SGX対応プラットフォーム上で動作していることを、そのソフトウェアに秘密及び保護されたデータを提供する前に、第3のエンティティが確立するメカニズムである。証明は、エンクレーブのセキュリティ特性に関する情報を含む、エンクレーブの署名を正確に反映するクレデンシャルを生成するプラットフォームの能力に依存する。インテル(登録商標)SGXアーキテクチャは、2つの形式の証明をサポートするメカニズムを提供する。同じプラットフォーム上で動作するエンクレーブ間で基本的なアサーションを作成するメカニズムがあり、これはローカル又はプラットフォーム内の証明をサポートし、次いで、エンクレーブとリモートの第三者との間の証明のための基盤を提供する別のメカニズムがある。
【0028】
代理証明器250は、エンクレーブ(例えば、信頼されたコンポーネント230)のための証明(attestation)を生成する。証明は、非対称暗号化を使用し、内蔵のプロセッサ機能によりサポートされる、証明されたエンクレーブとホスト(例えば、FaaSサーバ110A)とを一意に識別する証拠構造である。証明は、通信モジュール210を介してクライアントデバイス120に提供することができ、クライアントデバイス120が、信頼されたコンポーネント230が損なわれていないことを確認できるようにする。例えば、プロセッサは、鍵のアクセスを防止するハードウェアを使用して、内蔵の秘密鍵を有して製造され得る。この秘密鍵を使用し、証明構造をプロセッサにより署名して、署名された構造を生成することができる。ハードウェア製造者により公開された対応する公開鍵を使用し、この署名はクライアントデバイス120により確認することができる。これにより、クライアントデバイス120は、リモートデバイス(例えば、FaaSサーバ110A)上のエンクレーブが、改ざんされることなく実際に作成されたことを保証することができる。
【0029】
ゲートウェイ機能220と信頼されたコンポーネント230の双方が、共有メモリ260にアクセス及び修正することができるが、信頼されたコンポーネント230のみが、プライベートメモリ270にアクセス及び修正することができる。図2には、1つのみの信頼されたコンポーネント230と1つのみのプライベートメモリ270が示されているが、各テナントが複数の信頼されたコンポーネント230を有し、各々が対応するプライベートメモリ27を有してもよい。さらに、複数のアプリケーションが、別個のメモリ空間で、ゆえに別個の共有メモリ260で動作してもよい。この文脈において、「共有」は、メモリが、メモリ空間へのアクセスを有する全てのソフトウェア及びハードウェア(例えば、アプリケーション及びそのオペレーティングシステム)によりアクセス可能であり、必ずしもシステム上で動作している全てのアプリケーションによりアクセス可能ではないことを指す。
【0030】
テナントの代理証明器250は、テナントのための1つ以上の信頼されたコンポーネント230の完全性を検証することができる。したがって、単一の代理証明器250との通信により、テナントのクライアントデバイス120は、任意の数の信頼されたコンポーネント230を、これらのコンポーネントの機能を呼び出す前に、単一のゲートウェイ機能220を使用して検証することができる。
【0031】
エンクレーブ間(例えば、代理証明器250と、同じテナントの1つ以上の信頼されたコンポーネント230の各々との間、又は、信頼されたコンポーネント230の2つの間)の相互証明は、各エンクレーブに、それが証明するエンクレーブの測定値ハッシュ(例えば、インテル(登録商標)SGXにより提供されるMRENCLAVE値)のリストを維持させることにより、可能にすることができる。測定値はマニフェストに保持されてもよく、マニフェストのハッシュ値はエンクレーブ作成時にロードされ、それにより、エンクレーブが信頼する測定値ハッシュをセキュア化することができる。したがって、(例えば、インテル(登録商標)SGX又はTDXを使用して)セキュアプロセッサから別のエンクレーブの測定値ハッシュを要求した後、要求されたハッシュを記憶されたハッシュと比較して、該別のエンクレーブが信頼されたエンクレーブの1つであることを、第三者の証明検証器を使用せずに確認することができる。したがって、代理証明器250がテナントにより信頼され、代理証明器250がFaaSサーバ上で動作する他のエンクレーブに対して証明することができる限り、テナントは、エンクレーブの全てがセキュアであることを証明することができる。
【0032】
図3は、従来技術のリングベースのメモリ保護のブロック図300である。ブロック図300は、アプリケーション310及び320、並びにオペレーティングシステム330を含む。オペレーティングシステム330は、リング0(インテル(登録商標)及びAMD(登録商標)プロセッサ)、例外レベル1(ARM(登録商標)プロセッサ)、又は同等の特権レベルでプロセッサコマンドを実行する。アプリケーション310~320は、リング3(インテル(登録商標)及びAMD(登録商標)プロセッサ)、例外レベル0(ARM(登録商標)プロセッサ)、又は同等の特権レベルでプロセッサコマンドを実行する。
【0033】
ハードウェアプロセッサは、より低い特権レベルで実行しているコードが、オペレーティングシステムにより定義されたメモリ範囲外のメモリにアクセスすることを防止する。したがって、アプリケーション310のコードは、(図3の「X」により示されるように)オペレーティングシステム330又はアプリケーション320のメモリに直接アクセスすることができない。オペレーティングシステム330は、特定のアクセスポイントを(例えば、コールゲート、インテル(登録商標)プロセッサにおけるSYSENTER/SYSEXIT命令、AMD(登録商標)プロセッサにおけるSYSCALL/SYSRET命令、又はこれらの任意の適切な組み合わせ若しくは同等物により)予め定義することにより、アプリケーション310~320に何らかの機能を公開する。
【0034】
オペレーティングシステム330は、メモリの全部へのアクセスを有するため、アプリケーション310及び320は、悪意のあるオペレーティングシステムからの保護を有さない。例えば、競合者が、アプリケーション310を動作させる前にオペレーティングシステムを修正して、アプリケーション310のコード及びデータへのアクセスを獲得し、リバースエンジニアリングを可能にする可能性がある。
【0035】
さらに、アプリケーションがオペレーティングシステム330の脆弱性を悪用し、それ自身をオペレーティングシステムの特権レベルに昇格させることができる場合、このアプリケーションは、メモリの全部にアクセスすることができる。例えば、アプリケーション310は、通常、(図3においてアプリケーション310及び320の間にXで示されるように)アプリケーション320のメモリにアクセスできないが、それ自身をリング0又は例外レベル1に昇格させた後、アプリケーション320のメモリにアクセスすることができる。したがって、ユーザが悪意のあるプログラム(例えば、アプリケーション310)を動作させるよう騙された場合、ユーザ又はアプリケーションプロバイダのプライベートデータが、メモリから直接アクセスされる可能性がある(例えば、アプリケーション320により使用されるバンキングパスワード)。
【0036】
図4は、いくつかの例示的な実施形態による、TEEの待ち時間を低減するのに適した、エンクレーブベースのメモリ保護のブロック図400である。ブロック図400は、アプリケーション410、エンクレーブ420、及びオペレーティングシステム430を含む。オペレーティングシステム430は、リング0(インテル(登録商標)及びAMD(登録商標)プロセッサ)、例外レベル1(ARM(登録商標)プロセッサ)、又は同等の特権レベルでプロセッサコマンドを実行する。アプリケーション410及びエンクレーブ420は、リング3(インテル(登録商標)及びAMD(登録商標)プロセッサ)、例外レベル0(ARM(登録商標)プロセッサ)、又は同等の特権レベルでプロセッサコマンドを実行する。
【0037】
オペレーティングシステム430は、エンクレーブ420のメモリを割り当て、エンクレーブ420にロードされるコード及びデータをプロセッサに指示する。しかしながら、ひとたびインスタンス化されると、オペレーティングシステム430は、エンクレーブ420のメモリへのアクセスを有さない。したがって、オペレーティングシステム430が悪意があり又は損なわれたとしても、エンクレーブ420のコード及びデータはセキュアなままである。
【0038】
エンクレーブ420は、アプリケーション410に機能性を提供することができる。オペレーティングシステム430は、アプリケーション410が(例えば、ECALL命令を使用することにより)エンクレーブ420の機能を呼び出すことを許可されるかどうかを制御することができる。したがって、悪意のあるアプリケーションは、オペレーティングシステム430を損なうことにより、エンクレーブ420の機能を呼び出す能力を獲得できる可能性がある。それにもかかわらず、ハードウェアプロセッサは、悪意のあるアプリケーションがエンクレーブ420のメモリ又はコードに直接アクセスすることを防止する。したがって、エンクレーブ420内のコードは、機能が正しく又は非攻撃者により呼び出されていると仮定することはできないが、エンクレーブ420内のコードは、パラメータチェック及び他の内部セキュリティ手段に対する完全な制御を有し、その内部のセキュリティ脆弱性にのみさらされる。
【0039】
図5は、いくつかの例示的な実施形態による、TEEのスケーラブルな証明での使用に適した、データベーススキーマ500のブロック図である。データベーススキーマ500は、証明テーブル510及びリモート機能テーブル540を含む。証明テーブル510は、フォーマット520の行530A、530B、及び530Cを含む。証明テーブル510は、代理証明器250、クライアントデバイス120A~120B、又はこれらの任意の適切な組み合わせにより使用することができる。リモート機能テーブル540は、フォーマット550の行560A、560B、及び560Cを含む。リモート機能テーブル540は、クライアントデバイス120A~120Bにより使用することができる。
【0040】
証明テーブル510のフォーマット520は、エンクレーブ識別子フィールド及びステータスフィールドを含む。行530A~530Cの各々は、1つのエンクレーブのためのデータを記憶する。エンクレーブ識別子は、エンクレーブのための一意の識別子である。例えば、エンクレーブが作成されたとき、信頼されたドメインモジュール240は、次の未使用識別子を作成されたエンクレーブに割り当てることができる。ステータスフィールドは、証明済み(attested)、未証明(unattested)、又は証明テナントにより所有されていないなどの、エンクレーブのステータスを示す。
【0041】
したがって、図5の例では、証明テーブル510に3つのエンクレーブが示されている。エンクレーブのうちの1つは証明されており、1つは証明されておらず、1つは所有されていない。したがって、証明テーブル510が代理証明器250に統合される場合、クライアントデバイス120Aからのステータスの要求は、エンクレーブ0のみが証明されたという指標で応答され得る。結果として、クライアントデバイス120Aは、エンクレーブ0に関連づけられた機能に対してのみ、FaaSサーバ110Aへのコールを認可することができる。あるいは、代理証明器250は、クライアントデバイス120Aに結果を提供する前に、証明されていないエンクレーブ(例えば、行530Bのエンクレーブ1)を証明するよう試みることにより、要求に応答してもよい。
【0042】
証明テーブル510がクライアントデバイス120上に記憶される実施形態では、各クライアントデバイス120上で実行するアプリケーションが、FaaSサーバ110Aを使用して機能を呼び出す前に、機能に対応するエンクレーブのステータスフィールドをチェックしてもよい。したがって、証明されていない機能は呼び出されず、テナントデータは機能に公開されない。レイジー証明(Lazy attestation)が実行されてもよく、それにより、機能のTEEは、クライアントデバイスにおける証明の要求に応答してのみ証明される。
【0043】
代わりに又はさらに、各クライアントデバイス120は、リモート機能テーブル540を使用してもよい。リモート機能テーブル540のフォーマット550は、機能名、サーバ識別子、及びステータスフィールドを含む。行560A~560Cの各々は、単一の機能のためのデータを記憶する。機能名は、機能に対する一意の識別子である。サーバ識別子は、機能を実行するサーバを識別する。図5の例では、サーバ10.0.0.1がDSP機能及びFOLD機能を実行し、サーバ10.0.0.2がENCRYPT機能を実行する。図5の例では、サーバ識別子はインターネットプロトコル(IP)アドレスであるが、他の識別子を使用してもよい。ステータスフィールドは、証明済み又は未証明などの、機能を含むエンクレーブのステータスを示す。
【0044】
図6は、いくつかの例示的な実施形態による、TEEのスケーラブルな証明での使用に適した、機能とデバイスとの間の通信リンクのブロック図600である。図6に示されるように、FaaS110Aは、ゲートウェイ610、機能620A、620B、620C、及び620D、並びに代理証明器クライアント630A及び630Bを提供する。図2を参照し、ゲートウェイ610はゲートウェイ機能220に対応し、機能620A~620Dは4つの信頼されたコンポーネント230に対応し、代理証明器クライアント630A~630Dは2つの代理証明器250に対応する。
【0045】
2つの異なるテナントのクライアントデバイス120A及び120Bは、2つのインターフェース、すなわち、ゲートウェイ610と、テナントに対応する代理証明器クライアント630A又は630Bとを介して、FaaS110Aにコンタクトする。FaaSサーバ110Aは、機能620A、620B、620C、及び620Dを提供し、各々が別個のTEE内にある。この例において、代理証明器クライアント630Aは、FaaSサーバ110A上での実行のためにクライアントデバイス120Aに関連づけられたテナントにより提供されたコードを含む、機能620A及び620BのTEEを証明する。同様に、代理証明器クライアント630Bは、FaaSサーバ110A上での実行のためにクライアントデバイス120Bに関連づけられたテナントにより提供されたコードを含む、機能620C及び620DのTEEを証明する。代理証明器クライアント630Aは、機能620C及び620DのTEEを証明することができず、なぜならば、代理証明器クライアント630Aは、機能620C及び620Dのコードを提供したのと同じテナントにより提供されなかったためである。これらが異なるテナントにより提供されたため、機能620C~620Dにより使用される秘密セキュリティ情報は、代理証明器クライアント630Aには利用できない。したがって、代理証明器クライアント630A~630Bの追加は、TEEの使用により提供されるテナント間のセキュリティを損なわない。
【0046】
代理証明器クライアント630Aを使用して機能620A及び620Bを証明した後、クライアントデバイス120Aは、ゲートウェイ610を使用して、セキュアな環境で正しい機能が呼び出されていることを確信して、機能620A又は620Bのうちの1つを呼び出す。このプロセスは、任意の数のテナントの任意の数のクライアントに対して繰り返されてもよく、各テナントは、任意の数の保護された機能620A~620Dを有するが、各テナントに対して1つの代理証明器クライアント630A~630Bのみを使用する。結果として、FaaSサーバ110Aのスケーラビリティは、代理証明器クライアントなしで各TEEのリモート証明を提供するシステムよりも改善され、FaaSサーバ110Aのセキュリティは、各TEEのリモート証明を許可しないシステムよりも改善される。
【0047】
図7は、いくつかの例示的実施形態による、TEEのスケーラブルな証明を提供する際のサーバによる実行に適した方法700の動作を示すフローチャートである。方法700は、動作710、720、730、及び740を含む。限定でなく例として、方法700は、図1のFaaSサーバ110Aにより、図2図4に示されるモジュール、データベース、及び構造を使用して実行することができる。
【0048】
動作710において、信頼されたドメインモジュール240が、第1の機能のための第1のTEE、第2の機能のための第2のTEE、及び第1の機能へのリモートアクセスのためのゲートウェイを作成する。図4を参照し、第1の機能は機能420Aでもよく、第2の機能は代理証明器クライアント430Aでもよく、ゲートウェイはゲートウェイ410でもよい。いくつかの例示的な実施形態において、代理証明器クライアント430Aは、クライアントデバイス120Aにより、代理証明器クライアント430A自体の証明データを要求及び検証することにより検証される。証明器クライアント430Aの証明がひとたび完了すると、クライアントデバイス120Aは、代理証明器クライアント430Aによりクライアントデバイス120Aとのさらなる通信のために使用される暗号化鍵を提供することができる。
【0049】
いくつかの例示的な実施形態において、ゲートウェイ410は、クライアントデバイス120Aにより、ゲートウェイ410自体の証明データを要求及び検証することにより検証される。他の例示的な実施形態において、ゲートウェイ410は、クライアントデバイス120Aにより検証されない。
【0050】
TEEを作成することは、TEEのための予め計算されたハッシュ値を含む要求であり、TEEのためのコード及びデータを含む共有メモリ260の一部(例えば、要求に含まれるアドレス及びサイズにより識別される部分)を示す、要求を、処理するステップを含んでもよい。信頼されたドメインモジュール240は、バイナリメモリ状態(例えば、要求で示された共有メモリ260の部分)に対してハッシュ機能を実行して、要求で提供されたハッシュ値が計算されたハッシュ値と一致することを確認することができる。ハッシュ値が一致する場合、信頼されたドメインモジュール240は、示されたメモリが要求されたTEEのコード及びデータを実際に含むことを確認している。ハッシュ値が一致しない場合、信頼されたドメインモジュール240はエラー値を返し、修正されたメモリがエンクレーブにロードされるのを防ぐことができる。
【0051】
FaaSサーバ110Aは、ネットワーク130を介して、第2のTEEの完全性を検証する要求を受信する(動作720)。例えば、第1の機能へのリモート機能コールが行われ得る。さらなる例として、代理証明器クライアント430Aが、機能420Aを含むTEEの完全性を検証するために呼び出されてもよい。
【0052】
動作730において、FaaSサーバ110Aは、第1の機能を実行して第2のTEEの証明データを生成する。例えば、第2のTEEの測定値が、第1の機能によりアクセスされ、動作720において第1の機能コールを受ける前に第1の機能とクライアントデバイス120Aとの間で交換された鍵を使用して署名されてもよい。
【0053】
TEEのためのデータとコードは、TEEの作成者からの自己署名証明書を含むことができる。この自己署名証明書により、信頼されたドメインモジュール240は、TEEにロードされているデータ及びコードが、それらが署名されてから修正されていないことを検証することができる。署名されたデータは、作成者の識別子を含む。したがって、第2のTEEの証明データは、TEEが署名の後に修正されなかったことと、作成者の識別子との双方を示す。作成者がクライアントデバイス120Aに関連づけられたテナントである場合、TEEの妥当性が確認される。さらなる保護のために、第2のTEEの証明データが第2のTEE内に生成され、第1の機能にエクスポートされてもよい。証明データは、第2のTEEのアイデンティティ(identity)、第2のTEEの1つ以上の属性、メッセージ認証コード(message authentication code、MAC)、又はこれらの任意の適切な組み合わせを含む構造でもよい。この構造は、一時的な秘密鍵を使用して署名されてもよい。
【0054】
TEEのメモリ空間は、一時的な128ビットメモリ暗号化鍵を用いる高度暗号化標準(Advanced Encryption Standard、AES)の、Xor‐encrypt‐xor(XEX)ベースのTweaked‐codebookモードのciphertext stealing(XTS)モードを使用して暗号化され得る。さらに、暗号的完全性保護が、セキュアハッシュアルゴリズム3(SHA-3)ベースのMACを使用して提供されてもよい。MACは、メッセージを識別するために使用される情報の部分である。MACは、メッセージのデータ完全性を、メッセージ内容へのいかなる変更も検出する検証を可能にすることにより保護する。
【0055】
第1の機能は、動作740において、証明データをネットワークを介して提供する。この例を続けると、クライアントデバイス120Aは、署名された証明データを受信し、そのデータが既に証明された代理証明器クライアント430Aにより署名されたことを検証し、証明データが第2のTEEを正しく識別していることを検証する。
【0056】
あるいは、第1の機能が、署名された構造を検証し、証明データ自体を提供するのでなく証明が成功したか失敗したかについての指標をクライアントデバイスに提供してもよい。証明データを検証することは、署名に使用された一時的な秘密鍵に対応する一時的な公開鍵を使用して証明データの署名を検証することを含み得る。
【0057】
第2のTEEの検証がひとたび完了すると、クライアントデバイス120Aは、第2のTEEの第2の機能をゲートウェイを介して安全に呼び出すことができる。第2のTEEの第2の機能の呼び出しは、第2の機能にパラメータを提供すること、戻り値を生成すること、及び戻り値をネットワーク130を介してクライアントデバイス120Aに提供することを含み得る。
【0058】
いくつかの例示的な実施形態において、第2の機能は、第1のTEEのデータへのアクセスを要求する。例えば、クライアントデバイス120Aは、図4に示される直接接続を介して第1のTEEに構成データを提供することができ、機能420Aは、そのデータにアクセスし、ゲートウェイ410を介して通信されるパラメータの数を低減することができる。第1のTEEは、第2のTEEが検証されたかどうかを判定し、第2のTEEが検証された場合のみ、要求されたデータを共有することができる。これは、テナントのデータが検証されていない機能と共有されないことを保証する。
【0059】
データは、一時的な鍵を使用して1つのTEEのデータを暗号化し、暗号化されたデータと一時的な鍵へのアクセスを別のTEEに提供することにより、TEE間で渡されてもよい。ハードウェア保護は、一時的な鍵が保護されていないメモリ(例えば、TEEの外部で動作するコード)から使用されることを防止することができる。
【0060】
図8は、いくつかの例示的な実施形態による、TEEのスケーラブルな証明を利用する際のクライアントによる実行に適した方法800の動作を示すフローチャートである。方法800は、動作810、820、及び830を含む。限定でなく例として、方法800は、図1のクライアントデバイス120Aにより、図2図4に示されるモジュール、データベース、及び構造を使用して実行することができる。
【0061】
動作810において、クライアントデバイス(例えば、クライアントデバイス120A)は、リモートサーバ(例えば、FaaSサーバ110A)の第1のTEEの完全性を検証する。例えば、クライアントデバイス120Aは、代理証明クライアント430Aからの署名された証明データを要求することができる。代理証明クライアント430Aは、TEE内から証明データを生成し、証明データは、TEE内からのみアクセスできるハードウェア保護された鍵により署名される。クライアントデバイス120Aは、署名された証明データを受信し、クライアントデバイス120Aの信頼されたドメインモジュール240を使用して署名を検証し、この証明データを、TEEのコード及びデータがリモートサーバに提供される前に生成された証明データのローカルコピーに対して検証する。
【0062】
クライアントデバイスは、動作820において、第1のTEEの第1の機能への第1のリモート機能コールを行って、リモートサーバの第2のTEEの完全性を検証する。例えば、クライアントデバイス120Aは、代理証明クライアント430Aを呼び出して、機能420Aを含むTEEの完全性を検証することができる。代理証明クライアント430Aは、第2のTEEのローカル証明を実行し、機能420AのTEEが証明されたというセキュアな確認をクライアントデバイス120Aに送信する。
【0063】
いくつかの例示的な実施形態において、第1のリモート機能コールは、証明される第2のTEEのための、クライアントデバイス120Aからのデータを含む。これらの例示的な実施形態において、代理証明クライアント430Aは、クライアントデバイス120Aから受信した証明データを、第2のTEEについてローカルに受信した証明データと比較する。証明データの2つのセットが一致する場合、検証応答がクライアントデバイス120Aに提供される。そうでない場合、代理証明クライアント430Aは、第2のTEEが検証できなかったことを示す。
【0064】
他の例示的な実施形態において、代理証明クライアント430AのTEEは、代理証明クライアント430Aがデプロイされるとき、第2のTEEの証明データを含む。これらの例示的な実施形態において、代理証明クライアント430Aは、記憶された証明データを第2のTEEについてローカルに受信した証明データと比較して、検証応答を送信するか、又は第2のTEEが検証できなかったという指標を送信するかを決定する。
【0065】
動作830において、第1の機能により提供される検証に基づいて、クライアントデバイスは、第2のTEEの第1の機能への第2のリモート機能コールを行う。例えば、代理証明クライアント430Aが第2のTEEを検証した場合、クライアントデバイス120Aは、検証された機能420Aを呼び出すことができる。検証された機能420Aの起動は、代理証明クライアント430Aの呼び出しと同様に直接的でもよく、あるいはゲートウェイ410を利用し、間接的でもよい。
【0066】
したがって、方法800の使用により、クライアントデバイス120Aは、代理証明クライアント430Aを直接呼び出すだけで、FaaSサーバ110A上の任意の数のTEEにおける任意の数の機能を検証可能にされ、クライアント及びサーバの双方における検証プロセスの複雑さを低減し、ネットワークトラフィック及び関連するオーバーヘッドを低減する。
【0067】
図9は、いくつかの例示的な実施形態による、TEEのスケーラブルな証明を利用する際のクライアントによる実行に適した方法900の動作を示すフローチャートである。方法900は、動作910、920、930、940、及び950を含む。限定でなく例として、方法900は、図1のクライアントデバイス120Aにより、図2図4に示されるモジュール、データベース、及び構造を使用して実行することができる。
【0068】
動作910において、クライアントデバイス(例えば、クライアントデバイス120A)は、機能のTEEがリモートサーバ(例えば、FaaSサーバ110A)上で証明されたかどうかを判定する。例えば、図3のリモート機能テーブル340は、機能のエントリが存在するかを判定するために照会され得、機能が証明されたことを示す。
【0069】
TEEが証明された場合、クライアントデバイスは、リモートサーバ上の機能を呼び出す(動作920)。リモート機能テーブル340の行360Aを参照し、クライアントデバイスは、動作910において、DSP機能が証明されていることを確認し、動作920において、サーバ10.0.0.1上のDSP機能を呼び出す。
【0070】
しかしながら、TEEが証明されていない場合、クライアントデバイスは、動作930において、リモートサーバからの証明を要求する。方法800及びブロック図600に関して論じられているように、これは、リモートサーバ上の異なるTEE内の異なる機能に対するリモート機能コールを行うことにより実行することができる。
【0071】
動作940において、要求された証明の結果がクライアントデバイスによりチェックされる。証明が成功であった場合、機能が証明されたかどうかを示すローカルデータが(例えば、証明テーブル310に行を追加すること、又はリモート機能テーブル340内の既存の行を更新することにより)更新され、リモート機能が呼び出される(動作920)。
【0072】
証明が成功でなかった場合、機能のローカルバージョンが呼び出される(動作950)。いくつかの例示的な実施形態において、リモートサーバの計算能力はクライアントデバイスの計算能力よりも大きく、ゆえに、セキュアな機能が利用可能なとき、リモートサーバを使用することが好ましい。しかしながら、機能をローカルに呼び出すことを可能にすることにより、機能を利用するアプリケーションは、リモートサーバが機能を提供できないとしても続行することができる。
【0073】
したがって、方法900の使用により、クライアントデバイス120Aは、代理証明クライアント430Aを直接呼び出すだけで、FaaSサーバ110A上の任意の数のTEEにおける任意の数の機能を検証可能にされ、クライアント及びサーバの双方における検証プロセスの複雑さを低減し、ネットワークトラフィック及び関連するオーバーヘッドを低減する。さらに、機能がリモートで利用できず又はセキュアでないとき、機能をローカルに呼び出すことができ、より高い信頼性を可能にする。
【0074】
上述の主題事項の実装を考慮し、本出願は、以下の例のリストを開示する。単独での例の1つの特徴、又は、組み合わせて、及び任意で1つ以上のさらなる例の1つ以上の特徴と組み合わせて得られる例の2つ以上の特徴は、本出願の開示の範囲内に同様に入るさらなる例である。
【0075】
例1は、信頼された実行環境(trusted execution environment、TEE)のリモート証明を提供するシステムであり、当該システムは、少なくとも1つのプロセッサと、前記プロセッサに動作上結合されたネットワークインターフェースと、前記プロセッサにより実行されると前記少なくとも1つのプロセッサに動作を実行させる命令を記憶するための、前記少なくとも1つのプロセッサに結合されたメモリと、を含み、前記動作は、第1の機能のための第1のTEEを作成することと、第2の機能のための第2のTEEを作成することと、前記第1の機能へのリモートアクセスのためのゲートウェイを提供することと、クライアントデバイスから、及び前記ネットワークインターフェースを介して、前記第2のTEEの完全性を検証する要求を受信することと、前記要求に応答して、前記第1の機能を実行して前記第2のTEEの証明データを生成することと、前記証明データを前記クライアントデバイスに前記ネットワークインターフェースを介して提供することと、を含む。
【0076】
例2において、例1の主題事項は、前記第2のTEEの前記証明データの生成は、前記第2のTEE内から、前記第2のTEEのアイデンティティと前記第2のTEEの属性とメッセージ認証コード(MAC)とを含む署名された構造を生成することであり、前記構造は一時的な秘密鍵を使用して署名される、ことと、前記第1のTEEの前記第1の機能を使用して前記署名された構造を検証することと、を含む、ことを含む。
【0077】
例3において、例1~2の主題事項は、前記動作は、前記クライアントデバイスから、及び前記ネットワークインターフェースを介して、前記ゲートウェイで機能コールを受けることであり、前記機能コールは前記第2の機能に関連づけられている、ことと、前記機能コールに応答して、前記第2の機能を実行して戻り値を生成することと、前記戻り値を前記クライアントデバイスに前記ネットワークインターフェースを介して提供することと、をさらに含む、ことを含む。
【0078】
例4において、例3の主題事項は、前記動作は、前記機能コールに応答して、前記第2の機能により、前記第1のTEEのデータへのアクセスを要求することをさらに含む、ことを含む。
【0079】
例5において、例4の主題事項は、前記動作は、前記第1の機能により、前記第2の機能が検証されたと判定することと、前記第2の機能による、前記第1のTEEのデータへのアクセスの要求に応答して、前記第2の機能が検証されたという判定に基づいて、前記データへの要求されたアクセスを提供することと、をさらに含む、ことを含む。
【0080】
例6において、例5の主題事項は、前記データへの要求されたアクセスの提供は、一時的な鍵を使用して前記データを暗号化することと、前記第2の機能に前記一時的な鍵へのアクセスを提供することと、を含む、ことを含む。
【0081】
例7において、例1~6の主題事項は、前記動作は、前記第2のTEEの完全性を検証する前記要求を受信する前に、前記第1のTEEの完全性を検証する第2の要求を受信することをさらに含む、ことを含む。
【0082】
例8において、例1~7の主題事項は、前記ゲートウェイは、前記クライアントデバイスにより検証されないことを含む。
【0083】
例9において、例1~8の主題事項は、前記ゲートウェイは、第3のTEEの第3の機能へのリモートアクセスを提供し、前記第1の機能は、前記第3のTEEの完全性を検証できないことを含む。
【0084】
例10において、例9の主題事項は、前記動作は、第4の機能のための第4のTEEを作成することと、第2のクライアントデバイスから、及び前記ネットワークインターフェースを介して、前記第4の機能への第2の機能コールを受けることであり、前記第2の機能コールは前記第3のTEEの完全性を検証する、ことと、をさらに含む、ことを含む。
【0085】
例11は、信頼された実行環境(TEE)のリモート証明を提供する方法であり、当該方法は、プロセッサにより、第1の機能のための第1の信頼された実行環境(TEE)を作成するステップと、前記プロセッサにより、第2の機能のための第2のTEEを作成するステップと、前記プロセッサにより、前記第1の機能へのリモートアクセスのためのゲートウェイを提供するステップと、クライアントデバイスから、及びネットワークインターフェースを介して、前記第2のTEEの完全性を検証する要求を受信するステップと、前記要求に応答して、前記プロセッサにより、前記第1の機能を実行して前記第2のTEEの証明データを生成するステップと、前記証明データを前記クライアントデバイスに前記ネットワークインターフェースを介して提供するステップと、を含む。
【0086】
例12において、例11の主題事項は、前記第2の機能の前記証明データの生成は、前記第2のTEE内から、前記第2のTEEのアイデンティティと前記第2のTEEの属性とメッセージ認証コード(MAC)とを含む署名された構造を生成することであり、前記構造は一時的な秘密鍵を使用して署名される、ことと、前記プロセッサにより、前記第1のTEEの前記第1の機能を使用して前記署名された構造を検証することと、を含む、ことを含む。
【0087】
例13において、例11~12の主題事項は、前記クライアントデバイスから、及び前記ネットワークインターフェースを介して、前記ゲートウェイで機能コールを受けることであり、前記機能コールは前記第2の機能に関連づけられている、ステップと、前記機能コールに応答して、前記プロセッサにより、前記第2の機能を実行して戻り値を生成するステップと、前記戻り値を前記クライアントデバイスに前記ネットワークインターフェースを介して提供するステップと、を含む。
【0088】
例14において、例13の主題事項は、前記機能コールに応答して、前記第2の機能により、前記第1のTEEのデータへのアクセスを要求するステップを含む。
【0089】
例15において、例14の主題事項は、前記第1の機能により、前記第2の機能が検証されたと判定するステップと、前記第2の機能による、前記第1のTEEのデータへのアクセスの要求に応答して、前記第2の機能が検証されたという判定に基づいて、前記データへの要求されたアクセスを提供するステップと、を含む。
【0090】
例16において、例15の主題事項は、前記データへの要求されたアクセスの提供は、一時的な鍵を使用して前記データを暗号化することと、前記第2の機能に前記一時的な鍵へのアクセスを提供することと、を含む、ことを含む。
【0091】
例17において、例11~16の主題事項は、前記第2のTEEの完全性を検証する前記要求を受信する前に、前記第1のTEEの完全性を検証する第2の要求を受信するステップを含む。
【0092】
例18において、例11~17の主題事項は、前記ゲートウェイは、前記クライアントデバイスにより検証されないことを含む。
【0093】
例19において、例11~18の主題事項は、前記ゲートウェイは、第3のTEEの第3の機能へのリモートアクセスを提供し、前記第1の機能は、前記第3のTEEの完全性を検証できないことを含む。
【0094】
例20において、例19の主題事項は、前記プロセッサにより、第4の機能のための第4のTEEを作成するステップと、第2のクライアントデバイスから、及び前記ネットワークインターフェースを介して、前記第4の機能への第2の機能コールを受けるステップであり、前記第2の機能コールは前記第3のTEEの完全性を検証する、ステップと、を含む。
【0095】
例21は、少なくとも1つのプロセッサに、動作を実行することにより信頼された実行環境(TEE)のリモート証明を提供させる命令を有する非一時的コンピュータ読取可能媒体であり、前記動作は、第1の機能のための第1の信頼された実行環境(TEE)を作成することと、第2の機能のための第2のTEEを作成することと、前記第1の機能へのリモートアクセスのためのゲートウェイを提供することと、クライアントデバイスから、及びネットワークインターフェースを介して、前記第2のTEEの完全性を検証する要求を受信することと、前記要求に応答して、前記第1の機能を実行して前記第2のTEEの証明データを生成することと、前記証明データを前記クライアントデバイスに前記ネットワークインターフェースを介して提供することと、を含む。
【0096】
例22において、例21の主題事項は、前記第2の機能の前記証明データの生成は、前記第2のTEE内から、前記第2のTEEのアイデンティティと前記第2のTEEの属性とメッセージ認証コード(MAC)とを含む署名された構造を生成することであり、前記構造は一時的な秘密鍵を使用して署名される、ことと、前記第1のTEEの前記第1の機能を使用して前記署名された構造を検証することと、を含む、ことを含む。
【0097】
例23において、例21~22の主題事項は、前記動作は、前記クライアントデバイスから、及び前記ネットワークインターフェースを介して、前記ゲートウェイで機能コールを受けることであり、前記機能コールは前記第2の機能に関連づけられている、ことと、前記機能コールに応答して、前記第2の機能を実行して戻り値を生成することと、前記戻り値を前記クライアントデバイスに前記ネットワークインターフェースを介して提供することと、をさらに含む、ことを含む。
【0098】
例24において、例23の主題事項は、前記動作は、前記機能コールに応答して、前記第2の機能により、前記第1のTEEのデータへのアクセスを要求することをさらに含む、ことを含む。
【0099】
例25において、例24の主題事項は、前記動作は、前記第1の機能により、前記第2の機能が検証されたと判定することと、前記第2の機能による、前記第1のTEEのデータへのアクセスの要求に応答して、前記第2の機能が検証されたという判定に基づいて、前記データへの要求されたアクセスを提供することと、をさらに含む、ことを含む。
【0100】
例26において、例25の主題事項は、前記データへの要求されたアクセスの提供は、一時的な鍵を使用して前記データを暗号化することと、前記第2の機能に前記一時的な鍵へのアクセスを提供することと、を含む、ことを含む。
【0101】
例27において、例21~26の主題事項は、前記動作は、前記第2の機能の完全性を検証する前記要求を受信する前に、前記第1の機能の完全性を検証する第2の要求を受信することをさらに含む、ことを含む。
【0102】
例28において、例21~27の主題事項は、前記ゲートウェイは、前記クライアントデバイスにより検証されないことを含む。
【0103】
例29において、例21~28の主題事項は、前記ゲートウェイは、第3のTEEの第3の機能へのリモートアクセスを提供し、前記第1の機能は、前記第3のTEEの完全性を検証できないことを含む。
【0104】
例30において、例29の主題事項は、前記動作は、前記プロセッサにより、第4の機能のための第4のTEEを作成することと、第2のクライアントデバイスから、及び前記ネットワークインターフェースを介して、前記第4の機能への第2の機能コールを受けることであり、前記第2の機能コールは前記第3のTEEの完全性を検証する、ことと、をさらに含む、ことを含む。
【0105】
例31は、信頼された実行環境(TEE)のリモート証明を提供するシステムであり、当該システムは、記憶のための手段と、ネットワークインターフェース手段と、処理手段であり、第1の機能のための第1のTEEを作成し、第2の機能のための第2のTEEを作成し、前記第1の機能へのリモートアクセスのためのゲートウェイを提供し、クライアントデバイスから、及び前記ネットワークインターフェース手段を介して、前記第2のTEEの完全性を検証する要求を受信し、前記要求に応答して、前記第1の機能を実行して前記第2のTEEの証明データを生成し、前記証明データを前記クライアントデバイスに前記ネットワークインターフェース手段を介して提供する処理手段と、を含む。
【0106】
例32において、例31の主題事項は、前記第2のTEEの前記証明データを生成するために、前記処理手段は、前記第2のTEE内から、前記第2のTEEのアイデンティティと前記第2のTEEの属性とメッセージ認証コード(MAC)とを含む署名された構造を生成し、前記構造は一時的な秘密鍵を使用して署名され、前記第1のTEEの前記第1の機能を使用して前記署名された構造を検証することを含む。
【0107】
例33において、例31~32の主題事項は、前記処理手段はさらに、前記クライアントデバイスから、及び前記ネットワークインターフェース手段を介して、前記ゲートウェイで機能コールを受け、前記機能コールは前記第2の機能に関連づけられ、前記機能コールに応答して、前記第2の機能を実行して戻り値を生成し、前記戻り値を前記クライアントデバイスに前記ネットワークインターフェース手段を介して提供することを含む。
【0108】
例34において、例33の主題事項は、前記処理手段はさらに、前記機能コールに応答して、前記第2の機能により、前記第1のTEEのデータへのアクセスを要求することを含む。
【0109】
例35において、例34の主題事項は、前記処理手段はさらに、前記第1の機能により、前記第2の機能が検証されたと判定し、前記第2の機能による、前記第1のTEEのデータへのアクセスの要求に応答して、前記第2の機能が検証されたという判定に基づいて、前記データへの要求されたアクセスを提供することを含む。
【0110】
例36において、例35の主題事項は、前記データへの要求されたアクセスを提供するために、前記処理手段は、一時的な鍵を使用して前記データを暗号化し、前記第2の機能に前記一時的な鍵へのアクセスを提供することを含む。
【0111】
例37において、例31~36の主題事項は、前記処理手段はさらに、前記第2のTEEの完全性を検証する前記要求を受信する前に、前記第1のTEEの完全性を検証する第2の要求を受信することを含む。
【0112】
例38において、例31~37の主題事項は、前記ゲートウェイは、前記クライアントデバイスにより検証されないことを含む。
【0113】
例39において、例31~38の主題事項は、前記ゲートウェイは、第3のTEEの第3の機能へのリモートアクセスを提供し、前記第1の機能は、前記第3のTEEの完全性を検証できないことを含む。
【0114】
例40において、例39の主題事項は、前記処理手段は、第4の機能のための第4のTEEを作成し、第2のクライアントデバイスから、及び前記ネットワークインターフェース手段を介して、前記第4の機能への第2の機能コールを受け、前記第2の機能コールは前記第3のTEEの完全性を検証することを含む。
【0115】
例41は、処理回路により実行されると前記処理回路に例1~40のいずれかを実施する動作を実行させる命令を含む、少なくとも1つのマシン読取可能媒体である。
【0116】
例42は、例1~40のいずれかを実施するための手段を含む装置である。
【0117】
例43は、例1~40のいずれかを実施するためのシステムである。
【0118】
例44は、例1~40のいずれかを実施するための方法である。
【0119】
図10は、コンピューティングデバイスのソフトウェアアーキテクチャ1002の一例を示すブロック図1000である。アーキテクチャ1002は、例えば、本明細書に記載されるような、様々なハードウェアアーキテクチャと組み合わせて使用することができる。図10は、ソフトウェアアーキテクチャの非限定的な例に過ぎず、本明細書に記載の機能性を容易にするために、多くの他のアーキテクチャが実装されてもよい。代表的なハードウェア層1004が示されており、例えば、上記で参照された任意のコンピューティングデバイスを表すことができる。いくつかの例において、ハードウェア層1004は、図10のコンピュータシステムのアーキテクチャに従って実装されてもよい。
【0120】
代表的なハードウェア層1004は、関連づけられた実行可能命令1008を有する1つ以上の処理ユニット1006を含む。実行可能命令1008は、本明細書に記載される方法、モジュール、サブシステム、及びコンポーネントなどの実装を含む、ソフトウェアアーキテクチャ1002の実行可能命令を表し、さらに、実行可能命令1008を同様に有するメモリ及び/又は記憶モジュール1010を含んでもよい。ハードウェア層1004は、ソフトウェアアーキテクチャ1002の一部として示される他のハードウェアなどの、ハードウェア層1004の任意の他のハードウェアを表す他のハードウェア1012により示されるような他のハードウェアを含んでもよい。
【0121】
図10の例示的なアーキテクチャにおいて、ソフトウェアアーキテクチャ1002は、各層が特定の機能性を提供する層のスタックとして概念化され得る。例えば、ソフトウェアアーキテクチャ1002は、オペレーティングシステム1014、ライブラリ1016、フレームワーク/ミドルウェア1018、アプリケーション1020、及びプレゼンテーション層1044などの層を含むことができる。動作上、アプリケーション1020及び/又は層内の他のコンポーネントは、ソフトウェアスタックを通してアプリケーションプログラミングインターフェース(API)コール1024を呼び出し、APIコール1024に応答してメッセージ1026として示される応答、戻り値などにアクセスすることができる。例示された層は本質的に代表的なものであり、全てのソフトウェアアーキテクチャが全ての層を有するわけではない。例えば、いくつかのモバイル又は専用オペレーティングシステムはフレームワーク/ミドルウェア1018を提供しないことがあり、一方、他はそのような層を提供することがある。他のソフトウェアアーキテクチャが、さらなる層又は異なる層を含んでもよい。
【0122】
オペレーティングシステム1014は、ハードウェアリソースを管理し、共通サービスを提供することができる。オペレーティングシステム1014は、例えば、カーネル1028、サービス1030、及びドライバ1032を含んでもよい。カーネル1028は、ハードウェア層と他のソフトウェア層との間の抽象化層として機能することができる。例えば、カーネル1028は、メモリ管理、プロセッサ管理(例えば、スケジューリング)、コンポーネント管理、ネットワーキング、セキュリティ設定などの責任を負ってもよい。サービス1030は、他のソフトウェア層に対して他の共通サービスを提供することができる。いくつかの例において、サービス1030は、割込みサービスを含む。割込みサービスは、割込みがアクセスされると、割込みの受信を検出し、応答においてアーキテクチャ1002に、その現在の処理を一時停止させ、割込みサービスルーチンを実行させることができる。
【0123】
ドライバ1032は、下層のハードウェアを制御し又はこれとインターフェースをとることの責任を負うことができる。例えば、ドライバ1032は、ハードウェア構成に依存して、ディスプレイドライバ、カメラドライバ、Bluetooth(登録商標)ドライバ、フラッシュメモリドライバ、シリアル通信ドライバ(例えば、ユニバーサルシリアルバス(USB)ドライバ)、Wi-Fi(登録商標)ドライバ、NFCドライバ、オーディオドライバ、電力管理ドライバなどを含んでもよい。
【0124】
ライブラリ1016は、アプリケーション1020及び/又は他のコンポーネント及び/又は層により利用され得る共通インフラストラクチャを提供することができる。ライブラリ1016は、典型的には、下層のオペレーティングシステム1014の機能性(例えば、カーネル1028、サービス1030、及び/又は、ドライバ1032)と直接インターフェースをとるよりも、他のソフトウェアモジュールがより容易な方法でタスクを実行することを可能にする機能性を提供する。ライブラリ1016は、メモリ割り当て機能、文字列操作機能、数学機能などの機能を提供し得るシステムライブラリ1034(例えば、C標準ライブラリ)を含んでもよい。さらに、ライブラリ1016は、メディアライブラリ(例えば、MPEG4、H.264、MP3、AAC、AMR、JPG、PNGなどの様々なメディアフォーマットの提示及び操作をサポートするライブラリ)、グラフィックスライブラリ(例えば、ディスプレイ上にグラフィックコンテンツの2次元及び3次元をレンダリングするために使用され得るOpenGLフレームワーク)、データベースライブラリ(例えば、様々な関係データベース機能を提供し得るSQLite)、ウェブライブラリ(例えば、ウェブブラウジング機能性を提供し得るWebKit)などのAPIライブラリ1036を含んでもよい。ライブラリ1016は、アプリケーション1020及び他のソフトウェアコンポーネント/モジュールに多くの他のAPIを提供するために、広範囲の他のライブラリ1038をさらに含んでもよい。
【0125】
フレームワーク/ミドルウェア1018は、アプリケーション1020及び/又は他のソフトウェアコンポーネント/モジュールにより利用され得るより高いレベルの共通インフラストラクチャを提供することができる。例えば、フレームワーク/ミドルウェア1018は、様々なグラフィックユーザインターフェース(GUI)機能、高レベルリソース管理、高レベル位置サービス等を提供してもよい。フレームワーク/ミドルウェア1018は、アプリケーション1020及び/又は他のソフトウェアコンポーネント/モジュールにより利用され得る広範囲の他のAPIを提供してもよく、その一部は、特定のオペレーティングシステム又はプラットフォームに特有でもよい。
【0126】
アプリケーション1020は、内蔵アプリケーション1040及び/又はサードパーティアプリケーション1042を含む。代表的な内蔵アプリケーション1040の例は、これらに限られないが、連絡先(contacts)アプリケーション、ブラウザアプリケーション、ブックリーダアプリケーション、位置アプリケーション、メディアアプリケーション、メッセージングアプリケーション、及び/又はゲームアプリケーションを含んでもよい。サードパーティアプリケーション1042は、内蔵アプリケーションと他のアプリケーションの広範な組み合わせとのうちの任意のものを含んでよい。特定の例において、サードパーティアプリケーション1042(例えば、特定のプラットフォームのベンダ以外のエンティティによりAndroidTM又はiOSTMソフトウェア開発キット(SDK)を使用して開発されたアプリケーション)は、iOSTM、AndroidTM、Windows(登録商標) Phone、又は他のモバイルコンピューティングデバイスのオペレーティングシステムなどのモバイルオペレーティングシステム上で動作するモバイルソフトウェアでもよい。この例において、サードパーティアプリケーション1042は、本明細書に記載される機能性を容易にするために、オペレーティングシステム1014などのモバイルオペレーティングシステムにより提供されるAPIコール1024を呼び出すことができる。
【0127】
アプリケーション1020は、オペレーティングシステム機能(例えば、カーネル1028、サービス1030、及び/又はドライバ1032)、ライブラリ(例えば、システムライブラリ1034、APIライブラリ1036、及び他のライブラリ1038)、フレームワーク/ミドルウェア1018を利用して、システムのユーザと対話するためのユーザインターフェースを作成することができる。代わりに又はさらに、いくつかのシステムにおいて、ユーザとの対話は、プレゼンテーション層1044などのプレゼンテーション層を通して発生してもよい。これらのシステムにおいて、アプリケーション/モジュール「論理」は、ユーザと対話するアプリケーション/モジュールの態様から分離することができる。
【0128】
いくつかのソフトウェアアーキテクチャは仮想マシンを利用する。図10の例において、これは仮想マシン1048により示されている。仮想マシンは、アプリケーション/モジュールがあたかもそれらがハードウェアコンピューティングデバイス上で実行しているかのように実行できるソフトウェア環境を作成する。仮想マシンは、ホストオペレーティングシステム(オペレーティングシステム1014)によりホストされ、常にではないが典型的には仮想マシンモニタ1046を有し、仮想マシンモニタ1046は、仮想マシンの動作と、ホストオペレーティングシステム(すなわち、オペレーティングシステム1014)とのインターフェースを管理する。ソフトウェアアーキテクチャは、オペレーティングシステム1050、ライブラリ1052、フレームワーク/ミドルウェア1054、アプリケーション1056、及び/又はプレゼンテーション層1058など、仮想マシン1048内で実行する。仮想マシン1048内で実行されるソフトウェアアーキテクチャのこれらの層は、前述の対応する層と同じとすることができ、あるいは異なってもよい。
【0129】
モジュール、コンポーネント、及び論理
本明細書では、特定の実施形態を、論理又は複数のコンポーネント、モジュール、若しくはメカニズムを含むものとして記載している。モジュールは、ソフトウェアモジュール(例えば、(1)非一時的マシン読取可能媒体上に、又は(2)伝送信号において、具現化されたコード)又はハードウェア実装モジュールのいずれかを構成することができる。ハードウェア実装モジュールは、特定の動作を実行することができる有形のユニットであり、特定の方法で構成又は配置することができる。例示的な実施形態において、1つ以上のコンピュータシステム(例えば、スタンドアロン、クライアント、又はサーバコンピュータシステム)又は1つ以上のハードウェアプロセッサが、本明細書に記載される特定の動作を実行するように動作するハードウェア実装モジュールとしてソフトウェア(例えば、アプリケーション又はアプリケーション部分)により構成されてもよい。
【0130】
様々な実施形態において、ハードウェア実装モジュールは、機械的又は電子的に実装することができる。例えば、ハードウェア実装モジュールは、特定の動作を実行するように永続的に構成された専用の回路又は論理を(例えば、フィールドプログラマブルゲートアレイ(FPGA)又は特定用途向け集積回路(ASIC)などの専用プロセッサとして)含んでもよい。ハードウェア実装モジュールはまた、特定の動作を実行するためにソフトウェアにより一時的に構成されるプログラマブル論理又は回路を(例えば、汎用プロセッサ又は他のプログラマブルプロセッサ内に含まれるものとして)含んでもよい。ハードウェア実装モジュールを機械的に、専用の永続的に構成された回路において、又は一時的に構成された回路(例えば、ソフトウェアにより構成される)において実現する判断は、コスト及び時間の考慮により決められ得ることが理解されよう。
【0131】
したがって、用語「ハードウェア実装モジュール」は、物理的に構築され、永続的に構成され(例えば、ハードワイヤード)、又は、特定の方法で動作し及び/又は本明細書に記載される特定の動作を実行するように仮に又は一時的に構成される(例えば、プログラムされる)エンティティである、有形のエンティティを包含すると理解されるべきである。ハードウェア実装モジュールが一時的に構成される(例えば、プログラムされる)実施形態を考えると、ハードウェア実装モジュールの各々は、任意の1つの時点に構成又はインスタンス化される必要はない。例えば、ハードウェア実装モジュールが、ソフトウェアを使用して構成される汎用プロセッサを含む場合、この汎用プロセッサは、異なる時間にそれぞれの異なるハードウェア実装モジュールとして構成され得る。したがって、ソフトウェアは、プロセッサを、例えばある時点で特定のハードウェア実装モジュールを構成し、異なる時点で異なるハードウェア実装モジュールを構成するように、構成することができる。
【0132】
ハードウェア実装モジュールは、他のハードウェア実装モジュールに情報を提供し、あるいは他のハードウェア実装モジュールから情報を受信することができる。したがって、記載されるハードウェア実装モジュールは、通信上結合されているとみなすことができる。このようなハードウェア実装モジュールの複数が同時に存在する場合、通信は、信号伝送を介して(例えば、ハードウェア実装モジュールを接続する適切な回路及びバスを通じて)達成され得る。複数のハードウェア実装モジュールが異なる時間に構成又はインスタンス化される実施形態において、そのようなハードウェア実装モジュール間の通信は、例えば、複数のハードウェア実装モジュールがアクセスを有するメモリ構造における情報の記憶及び取り出しにより達成され得る。例えば、1つのハードウェア実装モジュールは、動作を実行し、その動作の出力を、それが通信上結合されているメモリデバイスに記憶することができる。次いで、さらなるハードウェアで実装されたモジュールは、後の時間に、このメモリデバイスにアクセスして記憶された出力を取り出し、処理することができる。ハードウェア実装モジュールはまた、入力デバイス又は出力デバイスとの通信を開始することができ、リソース(例えば、情報の集合)に対して動作することができる。
【0133】
本明細書に記載される例示的な方法の様々な動作は、少なくとも部分的に、関連する動作を実行するように一時的に(例えば、ソフトウェアにより)構成されるか又は永続的に構成された1つ以上のプロセッサにより実行されてもよい。一時的に構成されるか永続的に構成されるかにかかわらず、このようなプロセッサは、1つ以上の動作又は機能を実行するように動作するプロセッサ実装モジュールを構成することができる。本明細書で参照されるモジュールは、いくつかの例示的な実施形態において、プロセッサ実装モジュールを含んでもよい。
【0134】
同様に、本明細書に記載される方法は、少なくとも部分的にプロセッサにより実施されてもよい。例えば、方法の動作の少なくとも一部は、1つ以上のプロセッサ又はプロセッサ実装モジュールにより実行されてもよい。特定の動作の実行は、1つ以上のプロセッサ間で分散され、単一のマシン内に存在するだけでなく複数のマシンにわたりデプロイされてもよい。いくつかの例示的な実施形態において、1つ又は複数のプロセッサは、単一の場所に(例えば、ホーム環境、オフィス環境、又はサーバファーム内に)配置されてもよく、一方、他の実施形態において、プロセッサは、複数の場所にわたり分散されてもよい。
【0135】
1つ以上のプロセッサは、「クラウドコンピューティング」環境において、又は「ソフトウェアアズアサービス(software as a service)」(SaaS)として、関連する動作の実行をサポートするように動作することもできる。例えば、動作の少なくともいくつかが(プロセッサを含むマシンの例として)コンピュータのグループにより実行され、これらの動作はネットワーク(例えば、インターネット)を介して、及び1つ以上の適切なインターフェース(例えば、API)を介してアクセス可能でもよい。
【0136】
電子装置及びシステム
例示的な実施形態は、デジタル電子回路において、又はコンピュータハードウェア、ファームウェア、若しくはソフトウェアにおいて、又はこれらの組み合わせにおいて実施され得る。例示的な実施形態は、データ処理装置、例えばプログラマブルプロセッサ、コンピュータ、又は複数のコンピュータによる実行のため又はその動作を制御するための、情報キャリアにおいて、例えばマシン読取可能媒体において実体的に具現化された、コンピュータプログラム製品、例えばコンピュータプログラムを使用して実施することができる。
【0137】
コンピュータプログラムは、コンパイル型又は解釈型言語を含む任意の形式のプログラミング言語で書くことができ、スタンドアロンプログラムとして、又はコンピューティング環境での使用に適したモジュール、サブルーチン、又は他のユニットとしてを含む、任意の形態でデプロイすることができる。コンピュータプログラムは、1つのコンピュータ上で、又は1つのサイトにおける複数のコンピュータ上で実行されるように、あるいは複数のサイトにわたり分散され、通信ネットワークにより相互接続されるようにデプロイすることができる。
【0138】
例示的な実施形態において、動作は、入力データに対して動作して出力を生成することにより機能を実行するようにコンピュータプログラムを実行する1つ以上のプログラマブルプロセッサにより実行することができる。方法の動作は、専用論理回路、例えばFPGA又はASICにより実行することもでき、例示的な実施形態の装置が、専用論理回路、例えばFPGA又はASICとして実装されてもよい。
【0139】
コンピューティングシステムは、クライアント及びサーバを含むことができる。クライアントとサーバは、一般に互いに離れており、通信ネットワークを介して対話する。クライアントとサーバの関係は、それぞれのコンピュータ上で動作し互いにクライアント-サーバ関係を有するコンピュータプログラムによって生じる。プログラマブルコンピューティングシステムをデプロイする実施形態において、ハードウェアアーキテクチャ及びソフトウェアアーキテクチャの双方が考慮に値することが理解されるであろう。具体的には、特定の機能性を永続的に構成されたハードウェア(例えば、ASIC)において実装するか、一時的に構成されたハードウェア(例えば、ソフトウェアとプログラマブルプロセッサとの組み合わせ)において実装するか、又は永続的及び一時的に構成されたハードウェアとの組み合わせにおいて実装するかの選択は、設計選択であり得ることが理解されよう。以下に、様々な例示的な実施形態においてデプロイされ得るハードウェア(例えば、マシン)及びソフトウェアアーキテクチャを提示する。
【0140】
例示的なマシンアーキテクチャ及びマシン読取可能媒体
図11は、マシンに本明細書で論じられる方法のいずれか1つ以上を実行させるための命令1124が実行され得る、コンピュータシステム1100の例示的な形態のマシンのブロック図である。代替的な実施形態において、マシンは、スタンドアロンデバイスとして動作し、あるいは他のマシンに接続され(例えば、ネットワーク化され)てもよい。ネットワーク化されたデプロイでは、マシンは、サーバ-クライアントネットワーク環境においてサーバ又はクライアントマシンのキャパシティで、又はピアツーピア(又は、分散)ネットワーク環境でピアマシンとして動作することができる。マシンは、パーソナルコンピュータ(PC)、タブレットPC、セットトップボックス(STB)、パーソナルデジタルアシスタント(PDA)、セルラー電話、ウェブ機器、ネットワークルータ、スイッチ、又はブリッジ、又はそのマシンによりとられるべきアクションを指定する命令(順次又はその他)を実行することができる任意のマシンでもよい。さらに、単一のマシンのみが示されているが、用語「マシン」は、本明細書で論じられる方法のいずれか1つ以上を実行するための命令のセット(又は、複数のセット)を個々に又は共同で実行するマシンの任意の集合を含むようにも解されるものとする。
【0141】
例示的なコンピュータシステム1100は、プロセッサ1102(例えば、中央処理装置(CPU)、グラフィックス処理ユニット(GPU)、又は双方)、メインメモリ1104、及びスタティックメモリ1106を含み、これらは、バス1108を介して互いに通信する。コンピュータシステム1100は、ビデオディスプレイユニット1110(例えば、液晶ディスプレイ(LCD)又は陰極線管(CRT))をさらに含んでもよい。コンピュータシステム1100は、英数字入力デバイス1112(例えば、キーボード又はタッチ感知式ディスプレイスクリーン)、ユーザインターフェース(UI)ナビゲーション(又は、カーソル制御)デバイス1114(例えば、マウス)、記憶ユニット1116、信号生成デバイス1118(例えば、スピーカ)、及びネットワークインターフェースデバイス1120をさらに含む。
【0142】
マシン読取可能媒体
記憶ユニット1116は、本明細書に記載される方法又は機能のいずれか1つ以上を具現化し又はこれらにより利用されるデータ構造及び命令1124の1つ以上のセット(例えば、ソフトウェア)が記憶されたマシン読取可能媒体1122を含む。命令1124は、さらに、コンピュータシステム1100によるその実行の間、完全に又は少なくとも部分的に、メインメモリ1104内及び/又はプロセッサ1102内に存在し、メインメモリ1104及びプロセッサ1102もまた、マシン読取可能媒体1122を構成し得る。
【0143】
マシン読取可能媒体1122は、例示的な実施形態において単一の媒体であるように示されているが、用語「マシン読取可能媒体」は、1つ以上の命令1124又はデータ構造を記憶する単一の媒体又は複数の媒体(例えば、集中型又は分散型データベース、及び/又は関連づけられたキャッシュ及びサーバ)を含んでもよい。用語「マシン読取可能媒体」は、マシンによる実行のために命令1124を記憶、符号化、又は搬送することができ、かつマシンに本開示の方法のうちのいずれか1つ以上を実行させる、あるいは、そのような命令1124により利用されるか又は関連づけられたデータ構造を記憶、符号化、又は搬送することができる、任意の有形媒体を含むようにも解されるものとする。したがって、用語「マシン読取可能媒体」は、これらに限られないが、ソリッドステートメモリ、並びに光及び磁気媒体を含むように解されるものとする。マシン読取可能媒体1122の具体的な例には、半導体メモリデバイス、例えば、消去可能プログラマブル読取専用メモリ(EPROM)、電気的消去可能プログラマブル読取専用メモリ(EEPROM)、及びフラッシュメモリデバイス;磁気ディスク、例えば、内部ハードディスク及びリムーバブルディスク;磁気光ディスク;及び、コンパクトディスク読取専用メモリ(CD-ROM)及びデジタル多用途ディスク読取専用メモリ(DVD-ROM)ディスクを例として含む、不揮発性メモリが含まれる。マシン読取可能媒体は伝送媒体ではない。
【0144】
伝送媒体
命令1124は、さらに、伝送媒体を使用して通信ネットワーク1126を通じて送信又は受信されてもよい。命令1124は、ネットワークインターフェースデバイス1120と、多数の周知の転送プロトコルのいずれか1つ(例えば、ハイパーテキストトランスポートプロトコル(HTTP))を使用して送信することができる。通信ネットワークの例には、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、インターネット、移動電話ネットワーク、単純従来型電話(plain old telephone)(POTS)ネットワーク、及びワイヤレスデータネットワーク(例えば、WiFi及びWiMaxネットワーク)が含まれる。用語「伝送媒体」は、マシンによる実行のための命令1124を記憶、符号化、又は搬送することができる任意の無形媒体を含むように解されるものとし、そのようなソフトウェアの通信を容易にするためのデジタル若しくはアナログ通信信号又は他の無形媒体を含む。
【0145】
本明細書では、特定の例示的な実施形態について記載しているが、本開示のより広い主旨及び範囲から逸脱することなく、これらの実施形態に様々な修正及び変更がなされ得ることは明らかであろう。したがって、明細書及び図面は、限定的な意味でなく例示的な意味で解釈されるべきである。本明細書の一部を構成する添付の図面は、限定でなく例として、主題実行が実施され得る特定の実施形態を示している。例示された実施形態は、当業者が本明細書で開示された教示を実施できるように十分詳細に記載されている。これらから、他の実施形態を利用及び導出してもよく、それにより、本開示の範囲から逸脱することなく構造的及び論理的な置換及び変更がなされ得る。したがって、この詳細な説明は、限定的な意味で解釈されるべきでなく、様々な実施形態の範囲は、別記の特許請求の範囲と、そのような特許請求の範囲が権利を有する同等物の全範囲とによってのみ定義される。
【0146】
このような発明主題事項の実施形態は、本明細書において、単に便宜のため、及び、複数が実際開示されている場合に本出願の範囲をいずれか1つの発明又は発明概念に自発的に限定することを意図することなく、用語「発明」によって個々に及び/又は集合的に参照されることがある。したがって、特定の実施形態が本明細書において例示及び説明されたが、同じ目的を達成するために計算された任意の配置が、示された特定の実施形態の代替にされてもよいことを理解されたい。本開示は、様々な実施形態のいずれか及び全ての適合又はバリエーションをカバーすることを意図している。上記実施形態の組み合わせ、及び本明細書に具体的に記載されていない他の実施形態が、上記説明を検討した当業者に明らかとなるであろう。
【0147】
本明細書で論じられる主題事項のいくつかの部分は、マシンメモリ(例えば、コンピュータメモリ)内のビット又はバイナリデジタル信号として記憶されたデータに対する動作のアルゴリズム又はシンボル表現の観点から提示され得る。このようなアルゴリズム又はシンボル表現は、データ処理分野の当業者により使用される技術の例であって、それらの作業の実体を他の当業者に伝える。本明細書で用いられるとき、「アルゴリズム」は、所望の結果を導く自己矛盾のない動作シーケンス又は同様の処理である。この文脈において、アルゴリズム及び動作は物理的数量の物理的操作を含む。必ずではないが典型的には、このような数量は、マシンにより記憶、アクセス、転送、結合、比較、又はその他の方法で操作できる電気、磁気、又は光信号の形態をとることができる。主として共通の用法の理由で、このような信号を「データ」、「内容」、「ビット」、「値」、「要素」、「シンボル」、「文字」、「ターム」、「番号」、「数字」などの語を用いて参照することが時に簡便である。しかしながら、これらの語は、単に簡便なラベルであり、適切な物理的数量に関連づけられるべきである。
【0148】
別段具体的に示されない限り、本明細書において「処理」、「計算」、「算出」、「決定」、「提示」、「表示」などの用語を用いる議論は、1つ以上のメモリ(例えば、揮発性メモリ、不揮発性メモリ、又はこれらの任意の適切な組み合わせ)、レジスタ、又は情報を受信、記憶、送信、又は表示する他のマシンコンポーネント内で物理的(例えば、電子的、磁気的、又は光学的)数量として表されるデータを操作又は変換するマシン(例えば、コンピュータ)のアクション又はプロセスを指し得る。さらに、別段具体的に示されない限り、本明細書において、用語「一の」(「a」及び「an」)は、特許文献において一般的であるように、1つ又は複数のインスタンスを含むように用いられる。最後に、本明細書において用いられるとき、接続詞「又は」は、別段具体的に示されない限り、非排他的な「又は」を指す。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
【外国語明細書】