(57)【要約】  同一のコンピュータ上で動作する少なくとも２のプロセス間で通信を行う方法が提供されている。この方法は、少なくとも２のプロセスのうちの少なくとも１のプロセスによって、共有アクセスメモリに格納された／共有アクセスメモリから取り出されたデータユニットを暗号化／復号するために使用可能なグループ鍵を生成するステップを備え、その生成に、少なくとも２のプロセスの各々によって提供されるノンスが少なくとも利用され、ノンスが、少なくともプラットフォーム提供の隠蔽機能に従って暗号化された完全性保護データとして提供され、各プロセスが、保護されたコンテナ内で実行され、プロセスが単一の署名機関によって署名され、保護されたコンテナインフラストラクチャが、プラットフォーム提供の隠蔽機能とプラットフォーム提供の公開機能に従って、暗号化された完全性保護データの使用を可能にし、本方法はさらに、少なくとも２のプロセスのうちの少なくとも１のプロセスによって、共有アクセスメモリから読み出されたデータユニットがグループ鍵を使用して正常に復号されていることを検証するステップを備える。【選択図】図２
2021519452.tif 000002
【特許請求の範囲】
【請求項１】
同一のコンピュータ上で動作する少なくとも２のプロセス間で通信を行う方法であって、
少なくとも２のプロセスのうちの少なくとも１のプロセスによって、共有アクセスメモリに格納されるデータユニットを暗号化するために使用可能であり、かつ共有アクセスメモリから取り出したデータユニットを復号するために使用可能なグループ鍵を生成するステップであって、その生成に、少なくとも２のプロセスの各々によって提供されるノンスが少なくとも利用され、ノンスが、少なくともプラットフォーム提供の隠蔽機能により、暗号化された完全性保護データとして提供される、ステップを備え、
各プロセスが、保護されたコンテナインフラストラクチャに含まれる保護されたコンテナ内で実行され、プロセスが単一の署名機関によって署名され、保護されたコンテナインフラストラクチャが、プラットフォーム提供の隠蔽機能とプラットフォーム提供の公開機能により、暗号化された完全性保護データの使用を可能にし、
当該方法がさらに、少なくとも２のプロセスのうちの少なくとも１のプロセスによって、共有アクセスメモリから読み出されたデータユニットがグループ鍵を使用して正常に復号されていることを検証するステップを備えることを特徴とする方法。
【請求項２】
請求項１に記載の方法において、
グループ鍵を生成することが、少なくとも２のプロセスの各々によって実行されることを特徴とする方法。
【請求項３】
請求項２に記載の方法において、
グループ鍵を生成することが、
ノンスを生成するステップと、
ノンスと、プラットフォーム提供の隠蔽機能とに基づいて、暗号化された完全性保護データを作成するステップと、
暗号化された完全性保護データを共有アクセスメモリ内のある場所に格納するステップと、
自プロセスを除く少なくとも２のプロセスの各々によって格納されたノンスを少なくとも取り出すステップであって、ノンスが、共有アクセスメモリ内の場所から読み出されたデータおよびプラットフォーム提供の公開機能に基づいて取り出される、ステップと、
鍵生成関数と、少なくとも取り出されたノンスおよびプロセスによって生成されたノンスとに基づいて、グループ鍵を生成するステップとを含む方法により行われることを特徴とする方法。
【請求項４】
請求項３に記載の方法において、
前記鍵生成関数が、暗号化ハッシュ関数であることを特徴とする方法。
【請求項５】
請求項３に記載の方法において、
前記鍵生成関数が、標本関数であることを特徴とする方法。
【請求項６】
請求項２に記載の方法において、
少なくとも２のプロセスのうちの第１のプロセスが、第２のプロセスによって開始されたグループ鍵のロールオーバーの頻度がグループ鍵のロールオーバー閾値を満たすか否かに従って、第２のプロセスによって格納されたノンスを除外することを特徴とする方法。
【請求項７】
メモリおよびプロセッサを含み、少なくとも２のプロセスを実行するように構成されたコンピュータであって、
当該コンピュータが、少なくとも２のプロセスのうちの少なくとも１のプロセスによって、共有アクセスメモリに格納されるデータユニットを暗号化するために使用可能であり、かつ共有アクセスメモリから取り出したデータユニットを復号するために使用可能なグループ鍵を生成するように構成され、その生成に、少なくとも２のプロセスの各々によって提供されるノンスが少なくとも利用され、ノンスが、少なくともプラットフォーム提供の隠蔽機能により、暗号化された完全性保護データとして提供され、
各プロセスが、保護されたコンテナインフラストラクチャに含まれる保護されたコンテナ内で実行されるように構成され、プロセスが単一の署名機関によって署名されるように構成され、保護されたコンテナインフラストラクチャが、プラットフォーム提供の隠蔽機能とプラットフォーム提供の公開機能により、暗号化された完全性保護データを使用するように構成され、
当該コンピュータがさらに、少なくとも２のプロセスのうちの少なくとも１のプロセスによって、共有アクセスメモリから読み出されたデータユニットがグループ鍵を使用して正常に復号されていることを検証するように構成されていることを特徴とするコンピュータ。
【請求項８】
プログラム命令を含むコンピュータ可読記憶媒体を含むコンピュータプログラム製品であって、当該コンピュータプログラム製品が、プロセッサによって読み取られたときに命令をプログラム化するとともに、同一のコンピュータ上で実行されている少なくとも２のプロセス間で通信する方法をプロセッサに実行させ、
前記方法が、
少なくとも２のプロセスのうちの少なくとも１のプロセスによって、共有アクセスメモリに格納されるデータユニットを暗号化するために使用可能であり、かつ共有アクセスメモリから取り出したデータユニットを復号するために使用可能なグループ鍵を生成するステップであって、その生成に、少なくとも２のプロセスの各々によって提供されるノンスが少なくとも利用され、ノンスが、少なくともプラットフォーム提供の隠蔽機能により、暗号化された完全性保護データとして提供される、ステップを備え、
各プロセスが、保護されたコンテナインフラストラクチャに含まれる保護されたコンテナ内で実行され、プロセスが単一の署名機関によって署名され、保護されたコンテナインフラストラクチャが、プラットフォーム提供の隠蔽機能とプラットフォーム提供の公開機能により、暗号化された完全性保護データの使用を可能にし、
前記方法がさらに、少なくとも２のプロセスのうちの少なくとも１のプロセスによって、共有アクセスメモリから読み出されたデータユニットがグループ鍵を使用して正常に復号されていることを検証するステップを備えることを特徴とするコンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示の主題は、信頼できるコンピューティング環境に関し、より詳細には、信頼できる異なるコンピューティング環境間で安全な通信を確立することに関するものである。
【背景技術】
【０００２】
従来の技術では、マルウェアに対する保護の問題点が認識されており、解決策を提供するために様々な手法が開発されている。
【発明の概要】
【０００３】
本開示の主題の一つの態様によれば、同一のコンピュータ上で動作する少なくとも２のプロセス間で通信を行う方法が提供され、この方法が、
少なくとも２のプロセスのうちの少なくとも１のプロセスによって、共有アクセスメモリに格納されるデータユニットを暗号化するために使用可能であり、かつ共有アクセスメモリから取り出したデータユニットを復号するために使用可能なグループ鍵を生成するステップであって、その生成に、少なくとも２のプロセスの各々によって提供されるノンス（nonce）が少なくとも利用され、ノンスが、少なくともプラットフォーム提供の隠蔽機能（platform-provided hiding function）により、暗号化された完全性保護データ（encrypted integrity-protected data）として提供される、ステップを備え、
各プロセスが、保護されたコンテナインフラストラクチャ（protected container infrastructure）に含まれる保護されたコンテナ（protected container）内で実行され、プロセスが単一の署名機関によって署名され、保護されたコンテナインフラストラクチャが、プラットフォーム提供の隠蔽機能とプラットフォーム提供の公開機能（platform-provided revealing function）により、暗号化された完全性保護データの使用を可能にし、
当該方法がさらに、少なくとも２のプロセスのうちの少なくとも１のプロセスによって、共有アクセスメモリから読み出されたデータユニットがグループ鍵を使用して正常に復号されていることを検証するステップを備える。
【０００４】
上記特徴に加えて、本開示の主題のこの態様に係るシステムは、技術的に可能な任意の所望の組合せまたは順列で、以下に列挙される特徴（ｉ）〜（ｖ）のうちの１以上を含むことができる。
（ｉ）グループ鍵を生成することが、少なくとも２のプロセスの各々によって実行される。
（ｉｉ）グループ鍵を生成することが、
ノンスを生成するステップと、
ノンスとプラットフォーム提供の隠蔽機能とに基づいて、暗号化された完全性保護データを作成するステップと、
暗号化された完全性保護データを共有アクセスメモリ内のある場所に格納するステップと、
自プロセスを除く少なくとも２のプロセスの各々によって格納されたノンスを少なくとも取り出すステップであって、ノンスが、共有アクセスメモリ内の場所から読み出されたデータおよびプラットフォーム提供の公開機能に基づいて取り出される、ステップと、
鍵生成関数と、取り出されたノンスおよびプロセスによって生成されたノンスとに基づいて、グループ鍵を生成するステップと、
を含む方法に従って行われる。
（ｉｉｉ）少なくとも２のプロセスのうちの第１のプロセスが、第２のプロセスによって開始されたグループ鍵のロールオーバーの頻度がグループ鍵のロールオーバー閾値を満たすか否かに従って、第２のプロセスによって格納されたノンスを除外する。
（ｉｖ）鍵生成関数が、暗号化ハッシュ関数である。
（ｖ）鍵生成関数が、標本関数（sampling function）である。
【０００５】
本開示の主題の別の態様によれば、メモリおよびプロセッサを含み、少なくとも２のプロセスを実行するように構成されたコンピュータが提供され、このコンピュータが、
少なくとも２のプロセスのうちの少なくとも１のプロセスによって、共有アクセスメモリに格納されるデータユニットを暗号化するために使用可能であり、かつ共有アクセスメモリから取り出したデータユニットを復号するために使用可能なグループ鍵を生成するように構成され、その生成に、少なくとも２のプロセスの各々によって提供されるノンスが少なくとも利用され、ノンスが、少なくともプラットフォーム提供の隠蔽機能により、暗号化された完全性保護データとして提供され、
各プロセスが、保護されたコンテナインフラストラクチャに含まれる保護されたコンテナ内で実行されるように構成され、プロセスが単一の署名機関によって署名されるように構成され、保護されたコンテナインフラストラクチャが、プラットフォーム提供の隠蔽機能とプラットフォーム提供の公開機能により、暗号化された完全性保護データを使用するように構成され、
当該コンピュータがさらに、少なくとも２のプロセスのうちの少なくとも１のプロセスによって、共有アクセスメモリから読み出されたデータユニットがグループ鍵を使用して正常に復号されていることを検証するように構成されている。
【０００６】
本開示の主題の別の態様によれば、プログラム命令を含むコンピュータ可読記憶媒体を含むコンピュータプログラム製品が提供され、このコンピュータプログラム製品が、プロセッサによって読み取られたときに命令をプログラム化するとともに、同一のコンピュータ上で実行されている少なくとも２のプロセス間で通信する方法をプロセッサに実行させ、前記方法が、
少なくとも２のプロセスのうちの少なくとも１のプロセスによって、共有アクセスメモリに格納されるデータユニットを暗号化するために使用可能であり、かつ共有アクセスメモリから取り出したデータユニットを復号するために使用可能なグループ鍵を生成するステップであって、その生成に、少なくとも２のプロセスの各々によって提供されるノンスが少なくとも利用され、ノンスが、少なくともプラットフォーム提供の隠蔽機能に従って暗号化された完全性保護データとして提供される、ステップを備え、
各プロセスが、保護されたコンテナインフラストラクチャに含まれる保護されたコンテナ内で実行され、プロセスが単一の署名機関によって署名され、保護されたコンテナインフラストラクチャが、プラットフォーム提供の隠蔽機能とプラットフォーム提供の公開機能に従って、暗号化された完全性保護データの使用を可能にし、
前記方法がさらに、少なくとも２のプロセスのうちの少なくとも１のプロセスによって、共有アクセスメモリから読み出されたデータユニットがグループ鍵を使用して正常に復号されていることを検証するステップを備える。
【０００７】
本開示の主題の特定の実施形態の利点は、有害な要素を潜在的に含むシステムにおいて、信頼できるコンピューティング環境間での完全性を保護されたプライベート通信の能力を含み、かつ公開鍵または事前共有鍵操作の必要性が無い。
【図面の簡単な説明】
【０００８】
本発明を理解し、それが実際にどのように実施され得るのかを理解するために、添付の図面を参照しながら、非限定的な例として実施形態を説明する。
【図１】図１は、本開示の主題のいくつかの実施形態に係る、マルチパーティ通信メカニズムを利用することができる例示的なコンピュータシステムの図を示している。
【図２】図２は、本開示の主題のいくつかの実施形態に係る、コンピュータシステムの動作中の例示的なデータフローを示している。
【図３】図３は、本開示の主題のいくつかの実施形態に係る、マルチパーティのセキュア通信サブシステムの確立および使用を説明する一般化されたフロー図を示している。
【図４】図４は、本開示の主題のいくつかの実施形態に係る、合成鍵確立手順を説明する一般化されたフロー図を示している。
【発明を実施するための形態】
【０００９】
以下の詳細な説明では、本発明の完全な理解を提供するために、多くの具体的な詳細が記載されている。しかしながら、当業者であれば、本開示の主題がそれらの具体的な詳細なしに実施され得ることが理解されるであろう。他の例では、本開示の主題が不明瞭とならないように、周知の方法、手順、コンポーネントおよび回路は、詳細には記載されていない。
【００１０】
特に明記されていない限り、以下の説明から明らかなように、本明細書の全体を通して、「処理」、「コンピューティング」、「提示」、「比較」、「生成」、「検証」、「確立」、「更新」などの用語を利用した説明は、データを操作および／または他のデータに変換するコンピュータの１または複数の動作および／または１または複数のプロセスを指し、上記データが電子、量などの物理的なものとして示され、かつ／または上記データが物理オブジェクトを示していることが理解されよう。「コンピュータ」という用語は、非限定的な例として、本出願で開示された処理及びメモリ回路を含む、データ処理能力を有する任意の種類のハードウェアベースの電子デバイスを網羅するように、拡張的に解釈されるべきである。
【００１１】
本明細書で使用される「非一時的なメモリ」および「非一時的な記憶媒体」という用語は、本開示の主題に適した任意の揮発性または不揮発性コンピュータメモリを網羅するように拡張的に解釈されるべきである。
【００１２】
本明細書中の教示に係る動作は、所望の目的のために特別に構成されたコンピュータによって実行されるものであっても、または非一時的なコンピュータ可読記憶媒体に記憶されたコンピュータプログラムによって、所望の目的のために特別に構成された汎用コンピュータによって実行されるものであってもよい。
【００１３】
本開示の主題の実施形態は、特定のプログラミング言語を参照して記載されていない。本明細書に記載のように、本開示の主題の教示を実施するために様々なプログラミング言語を使用できることが理解されよう。
【００１４】
これを念頭に置いて、本開示の主題のいくつかの実施形態に係る、マルチパーティ通信メカニズムを利用することができる例示的なコンピュータシステムを示す図１に注目する。図示のコンピュータシステムは、プロセッサおよびメモリ（処理及びメモリ回路１００内に別個に示されていない）を備える処理及びメモリ回路１００を含む。
【００１５】
図３および図４を参照してさらに詳細に説明するように、処理及びメモリ回路１００は、非一時的なコンピュータ可読記憶媒体上に実装されたコンピュータ可読命令に従って、複数の機能モジュールを実行するように構成することができる。このような機能モジュールを、以降、処理及びメモリ回路１００に含まれるものとして言及する。
【００１６】
処理及びメモリ回路１００は、処理及びメモリ回路１００のコンポーネント間の通信に使用可能なバス１１５を備えることができる。バス１１５は、例えば、ＰＣＩバスや他の任意の適当な伝送メカニズムであってもよい。
【００１７】
処理及びメモリ回路１００は、例えば、１または複数の保護されたコンテナ１６０、１７０、１８０を含むことができる。保護されたコンテナは、例えば、アクセス制御機構（例えば、ハードウェアで強制されたアクセス制御機構）が、コンテナ外の要素（例えば、高特権または低特権で実行されている非コンテナソフトウェア、他のコンテナ内で実行されているソフトウェア、処理及びメモリ回路１００に接続された論理プローブなど）による読み出しまたは変更からソフトウェアコンテナのコード、データおよびスタックを保護するように構成されたソフトウェアコンテナとすることができる。保護されたコンテナは、保護されたコンテナインフラストラクチャ（図示省略）に動作可能に接続することができ、このコンテナインフラストラクチャは、例えば、保護されたコンテナ機能をサポートするための処理及びメモリ回路１００内に含まれるハードウェアおよびソフトウェアであってもよい。
【００１８】
本主題のいくつかの実施形態では、保護されたコンテナを、Ｉｎｔｅｌ（商標）Ｃｏｒｐｏｒａｔｉｏｎによって製造されたいくつかのプロセッサでサポートされるソフトウェア・ガード・エクステンション（ＳＧＸ）技術または同様のメカニズムによって管理されるエンクレイブ（enclave）とすることができる。そのような実施形態では、保護されたコンテナインフラストラクチャを、例えば、Ｉｎｔｅｌ（商標）ＳＧＸ（商標）機能または同様のメカニズムをサポートするハードウェア、ファームウェアおよびソフトウェアとすることができる。
【００１９】
処理及びメモリ回路１００は、共有データメモリ１１０（共有アクセスメモリ）を備えることができる。共有データメモリ１１０は、例えば、専用の物理メモリコンポーネント（チップなど）であってもよく、または、例えばより大きなメモリの論理領域であってもよい。
【００２０】
共有データメモリ１１０は、複数の保護されたコンテナによってアクセスされるように構成することができる。本開示の主題のいくつかの実施形態では、保護されたコンテナのデータが通常、デフォルトでプライベートであり、よって、共有データメモリ１１０は、図３を参照して後述するように、複数の保護されたコンテナによる読み出し／書き込みアクセス用に明示的に構成することができる。
【００２１】
共有データメモリ１１０は、例えば、図２を参照して後述するように、保護されたコンテナを利用するプロセス間の暗号化通信に使用するように構成することができる。
【００２２】
処理及びメモリ回路１００は、鍵確立用の専用共有メモリ１０５を備えることができる。鍵確立用の専用共有メモリ１０５は、例えば、専用の物理メモリコンポーネント（チップなど）であってもよいし、例えば、より大きなメモリの論理領域であってもよい。
【００２３】
鍵確立用の専用共有メモリ１０５は、複数の保護されたコンテナによってアクセスされるように構成することができる。本開示の主題のいくつかの実施形態では、保護されたコンテナのデータが通常、デフォルトでプライベートであり、よって、鍵確立用の専用共有メモリ１０５は、図３を参照して後述するように、複数の保護されたコンテナによる読み出し／書き込みアクセス用に明示的に構成することができる。鍵確立用の専用共有メモリ１０５は、制御ワード１２５を含むことができる。制御ワード１２５は、図４を参照して後述するように、保護されたコンテナを利用してコマンドまたは要求をピアプロセスに送信するプロセスによって使用されるように構成することができる。
【００２４】
本開示の主題のいくつかの実施形態では、保護されたコンテナを利用するソフトウェアプロセスが、図４を参照して後述するように、鍵確立用の専用共有メモリ１０５に（安全で暗号化された形式で）鍵材料を格納し、この鍵材料を取り出しおよび利用して特定のセキュリティ特性を有するグループ通信のための合成鍵（グループ鍵）を導出するように構成することができる。本明細書では、グループのメンバ間の通信のための暗号鍵／復号鍵を「グループ鍵」と称する。
【００２５】
例えば、非限定的な例として、暗号化チャネル入力デバイス１３０、暗号化チャネル出力デバイス１３５および暗号化チャネル出力デバイス１４５を含む、処理及びメモリ回路１００に動作可能に接続された複数の周辺デバイスが存在し得る。
【００２６】
暗号化チャネル入力デバイス１３０は、例えば、ユーザのキーストロークに応答して、暗号化された出力を生成し、この暗号化されたキーストロークデータを処理及びメモリ回路１００に送信するように構成されたコンピュータキーボードとすることができる。そのようなキーボードは、コンピュータ内のキーロギングソフトウェアによる監視、または物理的なキーボードまたはケーブル内の信号を監視するハードウェアキーロガーによる監視に対して耐性を持つことができる。
【００２７】
暗号化チャネル出力デバイス１３５は、例えば、処理及びメモリ回路１００から暗号化された表示データを受信するように構成された表示デバイスとすることができる。そのような表示デバイスは、表示データを検出するために電磁放射モニタリングを実行するデバイスなどのサイドチャネル攻撃に対して耐性を持つことができる。
【００２８】
暗号化チャネル入力／出力デバイス１４５は、例えばインターネットを介して、処理及びメモリ回路１００に含まれるネットワークアダプタ（図示省略）により、例えばセキュアソケットレイヤ（ＳＳＬ）プロトコルのようなメカニズムを使用して、処理及びメモリ回路１００とデータを交換するように構成されたリモート配置のリモートデスクトッププロトコル（ＲＤＰ）サーバとすることができる。
【００２９】
処理及びメモリ回路１００は、例えば、１または複数のマネージャプロセス１６５、１７５、１８５を含むことができる。非限定的な例として、マネージャプロセス１６５は、暗号化チャネル入力デバイス１３０から暗号化されたデータを受信するように構成することができ、マネージャプロセス１７５は、暗号化チャネル出力デバイス１３５に暗号化されたデータを送信するように構成することができ、マネージャプロセス１８５は、暗号化チャネル入力／出力デバイス１４５との間で暗号化されたデータを送受信するように構成することができる。また、マネージャプロセス１６５、１７５、１８５は、例えば、共有データメモリ１１０から暗号化されたデータを読み出し、暗号化されたデータを共有データメモリ１１０に書き込むこともできる。
【００３０】
マネージャプロセス１６５、１７５、１８５は、復号および他の機密処理のために保護されたコンテナ１６０、１７０、１８０を利用するように構成することができる。例えば、保護されたコンテナ１６０は、暗号化チャネル入力デバイス１３０からのデータの復号を実行し、共有データメモリ１１０に格納するためのデータを暗号化するように構成することができ、保護されたコンテナ１７０は、共有データメモリ１１０から読み出されたデータの復号を実行し、暗号化チャネル出力デバイス１３５に送信するためのデータを暗号化するように構成することができ、保護されたコンテナ１７０は、暗号化チャネル入力／出力デバイス１４５からのデータの復号を実行し、共有データメモリ１１０に格納するためのデータを暗号化するように構成することができ、さらに、共有データメモリ１１０から読み出されたデータの復号を実行し、暗号化チャネル入力／出力デバイス１４５に送信するためのデータを暗号化するように構成することができる。これらの場合、共有データメモリ１１０および周辺機器との間でデータを暗号化／復号するための任意の鍵は、例えば、それぞれの保護されたコンテナ内に保持することができる。
【００３１】
本開示の主題のいくつかの実施形態では、マネージャプロセス１６５、１７５、１８５が、保護されたコンテナ１６０、１７０、１８０内で暗号化／復号操作を実行しながら、保護されたコンテナ１６０、１７０、１８０の外部でデバイスＩ／Ｏ操作を実行するように構成することができる。
【００３２】
本開示の主題の教示は、図１を参照して説明したコンピュータシステムに拘束されないことに留意されたい。同等および／または変更された機能は、別の方法で統合または分割することができ、ソフトウェアとファームウェアおよび／またはハードウェアとの任意の適切な組合せで実装することができ、適切なデバイス上で実行することができる。コンピュータシステムは、スタンドアロンのネットワークエンティティであってもよく、あるいは他のネットワークエンティティと完全にまたは部分的に統合されるものであってもよい。当業者であれば、データリポジトリを他の方法で統合または分割することができ、データベースを他のシステムと共有することができ、またはサードパーティの機器を含む他のシステムによって提供することができることを容易に理解するであろう。
【００３３】
図２を参照すると、本開示の主題のいくつかの実施形態に係る、コンピュータシステムの動作中の例示的なデータフローが示されている。
【００３４】
矢印は、システム内の例示的なデータフローを示している。矢印のハッチングパターンは、データフローが特定の暗号鍵／復号鍵に従って暗号化されていることを非限定的な例として示している。このため、共有データメモリ１１０に格納されるデータは、例えば、グループ暗号鍵／復号鍵に従って暗号化された形式である（例えば、図４を参照して後述するメカニズムに従って生成される）。また、マネージャプロセス１６５、１７５、１８５によって共有データメモリ１１０から読み出される／共有データメモリに書き込まれるデータは、例えば、同一鍵に従って暗号化されている。
【００３５】
図２は、マネージャプロセス１６５、１７５、１８５と、暗号化チャネル入力デバイス１３０、暗号化チャネル出力デバイス１３５および暗号化チャネル入力／出力デバイス１４５との間のデータフローが異なる鍵を利用していることを示している。これは、非限定的な例として、安全なマルチパーティ通信メカニズムを使用してシステム内セキュリティを提供し、それによりシステムの信頼できない部分にマルウェアが存在する場合でも、機密データが危険に曝されることがないようにするシステムを例示している。
【００３６】
図３を参照すると、本開示の主題のいくつかの実施形態に係る、マルチパーティのセキュア通信サブシステムの確立および使用を説明する一般化されたフロー図が示されている。
【００３７】
例えば、システムの初期化またはシステムのリフレッシュに続いて、（例えば）処理及びメモリブロック１００内で実行されるマネージャプロセス１６５、１７５、１８５は、処理及びメモリ回路１００内で保護されたコンテナのグループを初期化することができる（３１０）。
【００３８】
保護されたコンテナを初期化する手法は、システムで使用されている保護されたコンテナのタイプに依存することがある。初期化には、例えば、コンテナにメモリを割り当てること、コンテナ内で実行されるソフトウェアを提供すること、並びに、提供されたソフトウェアが真正であることの暗号化保証を提供する証明書または署名を提供することが含まれる。保護されたコンテナ内で実行される特定のソフトウェアの真正性の暗号化保証を提供するエンティティ（ソフトウェア・パブリッシャーなど）は、以降、「署名機関」と称する。
【００３９】
Ｉｎｔｅｌ（商標）ＳＧＸ（商標）のエンクレイブに類似の保護されたコンテナが利用される実施形態では、初期化手順として、メモリを割り当てて、ソフトウェアを（ソフトウェアベンダによって署名された暗号化証明書とともに）エンクレイブにロードするためのプロセッサ命令の呼び出しが含まれる。ランタイムプロセスは、署名および検証されたエンクレイブで実行することができる。エンクレイブは、実行時に、プラットフォーム（例えば、ＳＧＸ）および（例えば）システムベンダによって、署名されたコードとしてテストすることができる。
【００４０】
保護されたコンテナの初期化に続いて（または、いくつかの実施形態では、保護されたコンテナの初期化の一部として）、処理及びメモリ回路１００（例えば、マネージャプロセス１６５、１７５、１８５）は、複数の保護されたコンテナによってアクセスされるメモリ領域（共有アクセスメモリ）を割り当てて初期化することができる（３２０）。これらのメモリ領域は、例えば、共有データメモリ１１０および鍵確立用の専用共有メモリ１０５を含むことができる。共有データメモリ１１０および鍵確立用の専用共有メモリ１０５は、例えば、処理及びメモリ回路１００の汎用メモリ内の領域として割り当てることができる。本主題のいくつかの実施形態では、初期化には、それらのメモリがコンテナに対してプライベートではないにもかかわらず、アクセス保護機能が共有データメモリ１１００および鍵確立用の専用共有メモリ１０５との間で読み出し／書き込みを許可するように、保護されたコンテナ１６０、１７０、１８０を構成することが含まれる。このため、保護されたコンテナを利用するソフトウェアプロセスは、例えば、暗号化されていないデータがそれらメモリに書き込まれることがないようにする必要がある。
【００４１】
保護されたコンテナおよび共有メモリ領域の初期化に続いて、合成鍵確立手順を実行することができる（３３０）。この手順は、図４を参照して後述する。
【００４２】
合成鍵が確立された後、保護されたコンテナを利用するソフトウェアプロセスは、合成鍵を使用して共有データ領域１１０への書き込みおよび共有データ領域からの読み出しを行うことにより、互いに通信することができる。非限定的な例として、データを書き込むプロセスは、合成鍵を使用してデータを暗号化し（３４０）、例えばリングバッファを使用して、共有データ領域１１０にデータを書き込む（３４０）ことができる。そして、データを読み出すプロセスは、リングバッファからデータを読み出し（３４０）、合成鍵を用いてデータを復号する（３４０）ことができる。
【００４３】
暗号化および復号は、例えばＮＩＳＴ  Ｓｐｅｃｉａｌ  Ｐｕｂｌｉｃａｔｉｏｎ  ８００−３８Ｅに記載されているような、例えばＸｏｒ−ｅｎｃｒｙｐｔ−ｘｏｒ  Ｔｗｅａｋａｂｌｅ  Ｂｌｏｃｋ  Ｃｉｐｈｅｒ  ｗｉｔｈ  Ｃｉｐｈｅｒｔｅｘｔ  Ｓｔｅａｌｉｎｇ（ＸＴＳ）を使用して、例えば１２８ビットのブロックサイズおよび１２８ビットの鍵サイズを有する高度暗号化標準（ＡＥＳ）ブロック暗号など、公知の暗号化および完全性保護アルゴリズムを使用して実行することができる。代替的には、別の適切な暗号、モード、ブロックサイズ、または鍵サイズを使用することができる。暗号化／復号は、例えば、データペイロードとともに単調に増加するカウンタを含むようなリプレイ保護メカニズムを使用することができる。
【００４４】
鍵のロールオーバーを必要とするイベントが発生した場合（３５０）、合成鍵確立手順（３３０）を再度実行して、結果として得られる新しい合成鍵を使用することができる。鍵のロールオーバーを必要とするイベントを構成する様々な事がある。非限定的な例として、システムは、合成鍵にエイジリミットを課し、例えば１２時間に１回の更新を要求することができる。代替的には、非限定的な例として、プロセスは、グループ通信への参加を希望することをコーディネータプロセス（後述）に信号で伝えることができる新しい保護されたコンテナを初期化することができ、これにより、鍵のロールオーバーをトリガーすることができる。
【００４５】
いくつかの実施形態では、プロセスの一つが悪意を有し、意図的に不必要なロールオーバーを引き起こす可能性があることに留意されたい。従って：
・悪意のある非コーディネータプロセスから保護するために、コーディネータプロセスは、ロールオーバーのレートを監視し、過剰なロールオーバーを発生させるプロセスを除外することができる。
・悪意のあるコーディネータプロセスから保護するために、非コーディネータプロセスは、コーディネータプロセスによって引き起こされるロールオーバーのレートを監視し、コーディネータプロセスが過剰なロールオーバーを発生させている場合には、そのコーディネータプロセスを（グループとして）除外することができる。より一般的には、プロセスは、（例えば）予め設定されたグループ鍵のロールオーバー頻度の閾値を満たす又は超える頻度で（鍵の再生成を必要とする）グループ鍵のロールオーバーを開始する異なるプロセスによって保存されたノンスを除外することにより、悪意のある不要なロールオーバーから保護することができる。
【００４６】
本開示の主題の教示は、図３に示すフローチャートに拘束されるものではなく、図示の操作は、図示の順序から外れて発生する可能性があることに留意されたい。例えば、連続して示す操作３１０、３２０は、実質的に同時または逆の順序で実行することができる。フローチャートは、図１の要素を参照して説明されているが、これは決して拘束力があるわけではなく、それぞれの操作は、本明細書に記載の要素以外の要素によって実行できることにも留意されたい。
【００４７】
図４を参照すると、本開示の主題のいくつかの実施形態に係る、合成鍵確立手順を説明する一般化されたフロー図が示されている。
【００４８】
フロー図は、「コーディネータプロセス」を参照している。コーディネータプロセスは、（後述するように）例えば、鍵確立手順を他のプロセスとオーケストレートする、保護されたコンテナを利用するプロセスである。本主題のいくつかの実施形態では、システム内のプロセスが、例えば、単一のライタプロセスおよび複数のリーダプロセスを構成することができる。そのような実施形態では、ライタプロセスが、コーディネータプロセスの役割を果たすことができる。
【００４９】
本開示の主題のいくつかの実施形態では、保護されたコンテナインフラストラクチャが、プラットフォーム提供の秘密保持機能（secrecy functions）をプロセスに提供することができる。プラットフォーム提供の秘密保持機能は、例えば、プラットフォーム提供の隠蔽機能およびプラットフォーム提供の公開機能を含むことができる。
【００５０】
プラットフォーム提供の隠蔽機能は、例えば、データ項目を、許可されていないエンティティによる読み出しや変更から安全な形式に変換することができる（すなわち、暗号化され、完全性が保護される）。プラットフォーム提供の公開機能は、例えば、対応するプラットフォーム提供の隠蔽機能によって生成されたデータ項目を受け取り、元のデータ項目を返すことができる。本開示の主題のいくつかの実施形態では、プラットフォーム提供の公開機能が、ａ）それを呼び出すプロセスが、プラットフォーム提供の隠蔽機能を以前に呼び出したプロセスと同じ保護されたプラットフォームインフラストラクチャインスタンスを利用している状況と、ｂ）２つのプロセスが同じ署名機関によって署名されている状況にのみ、元のデータ項目を返し、そうでない場合は失敗を示すこととなる。
【００５１】
Ｉｎｔｅｌ（商標）ＳＧＸ（商標）のエンクレイブと同様の保護されたコンテナが利用される実施形態では、ＭＲＳＩＧＮＥＲオプションを使用する「シール機能（sealing function）」がプラットフォーム提供の隠蔽機能になり、ＭＲＳＩＧＮＥＲオプションを使用する「シール解除機能（unsealing function）」がプラットフォーム提供の公開機能になり得る。「シール機能」および「シール解除機能」については、非限定的な例として、ｈｔｔｐｓ：／／ｄｏｗｎｌｏａｄ．０１．ｏｒｇ／ｉｎｔｅｌ−ｓｇｘ／ｌｉｎｕｘ−１．７／ｄｏｃｓ／Ｉｎｔｅｌ＿ＳＧＸ＿Ｄｅｖｅｌｏｐｅｒ＿Ｇｕｉｄｅ．ｐｄｆに記載されている。
【００５２】
エンクレイブ内のプロセスがこのようにデータを「シール」すると、同じＳＧＸハードウェアプラットフォーム上で実行され且つ同じ署名機関によって署名されたエンクレイブ内のプロセスのみが、データのシールを解除することができ、すなわち、データを回復することができる。
【００５３】
シール／シール解除メカニズムは、プロセスによって、例えば、コンテナで実行するソフトウェアプロセスのアップグレード間で保持することができるハードウェアプラットフォーム上のデータを格納するために使用することができる（同上、２１〜２４頁）。
【００５４】
本主題のいくつかの実施形態では、プラットフォーム提供の秘密保持機能を、単にデータの秘密保持のためだけでなく、プロセス間の信頼とセキュリティを確立するために活用することが可能である。プラットフォーム提供の隠蔽機能（例えば「シール」）の結果として得られたデータを他のプロセスに送信し、プラットフォーム提供の公開機能（例えば「シール解除」）の結果を利用して（後述するように）合成鍵を生成することにより、（合成鍵の使用に成功した場合に）すべてのプロセスが公開機能を正常に実行し、すべてのプロセスがハードウェアプラットフォームによって真正で安全で変更されていないことが確認されたことを、後で推論することができる。
【００５５】
合成鍵確立手順は、例えば、コーディネータプロセスが他のプロセスに信号を送信して（４１０）収集フェーズを始めるときに開始することができる。「収集フェーズ」という用語は、プロセスが新しい合成鍵を生成するために必要なデータを収集することができるシステム操作のインターバルを指している。コーディネータプロセスは、例えば、プラットフォーム提供の隠蔽機能への入力として特定の値を提供し、得られた値を、鍵確立用の専用共有メモリ１０５内の特定の場所（例えば、制御ワード）に書き込むことによって、収集フェーズの開始を通知することができる。他の（すなわち、非コーディネータ）プロセスは、フェーズ間を正しく移行できるように、制御ワードを継続的に監視することができる。
【００５６】
本開示の主題のいくつかの実施形態では、コーディネータプロセスが、収集フェーズの間、新たな暗号化データの書き込みを控えることができる。
【００５７】
本開示の主題のいくつかの実施形態では、コーディネータからの信号を検出した後（例えば、制御ワードを読み出し、プラットフォーム提供の隠蔽機能を使用してコーディネータにより書き込まれた値を取り出すことによって）、プロセスが、例えば、現在の合成鍵を使用して共有データメモリ１１０に書き込まれた未処理のデータを読み出し（４２０）、復号することができる。
【００５８】
次いで、各プロセスは、例えば、ノンスを生成し（４３０）、そのノンスをプラットフォーム提供の隠蔽機能への入力として提供し（４３０）、得られた値を鍵確立用の専用共有メモリ１０５に書き込む（４３０）ことができる。プロセスは、例えば、その実行環境で利用可能なハードウェアまたはソフトウェアの乱数発生器からノンスを生成することができる。
【００５９】
プロセスによって利用されるノンスは、例えば、鍵生成において一回使用のために疑似ランダムに（またはランダムに）生成された値（例えば、ハードウェアまたはソフトウェアの疑似乱数発生器を使用して生成された値）であってもよい。代替的には、ノンスは、暗号鍵の導出において使用するのに適した別の値（例えば、既存の値など）であってもよい。
【００６０】
プロセスは、プラットフォーム提供の隠蔽機能から得られた値を、例えば、特定のプロセスからのノンスの寄与を読み出し／書き込みするために排他的に使用される、鍵確立用の専用共有メモリ１０５内の場所に書き込むことができる。
【００６１】
コーディネータが、プロセスが新しい鍵をいつ使用することができるのかを決定するために使用することができる様々なメカニズムが存在する。コーディネータプロセスは、例えば、タイムアウト（例えば、収集フェーズの信号通知後、１００ｍｓ）を利用することができる。代替的には、例えば、コーディネータプロセスは、鍵確立用の専用共有メモリ１０５内の変化を監視し、各プロセスがそれぞれのノンスを書き込むまで待機することができる。
【００６２】
次いで、コーディネータは、例えば、プラットフォーム提供の隠蔽機能への入力として制御ワードの特定の値を提供し、それを鍵確立用の専用共有メモリ１０５内の制御ワード１２５に書き込むことによって、「作業フェーズ」の開始を通知する（４４０）ことができる。作業フェーズは、収集フェーズ中に書き込まれたノンスから生成された合成鍵を使用して共有アクセスメモリ１１０からのデータを暗号化／書き込みおよび読み出し／復号することにより、プロセスが相互に通信するシステム操作のインターバルを示す。
【００６３】
各プロセスは、このとき、他のプロセスによって保存されたノンスの各々を取り出す（４５０）ことができる。各プロセスは、例えば、鍵確立用の専用共有メモリ１０５内のデータが書き込まれた場所からデータを読み出し、プラットフォーム提供の公開機能を用いてノンスを取り出すことによって、これを行うことができる。
【００６４】
ピアプロセスからすべてのノンスを受信すると、各プロセスは、各ノンスを鍵導出関数の入力に利用して、新たな合成鍵を生成する（４６０）ことができるようになる。各ノンスを利用することで、得られる合成鍵は、それらのすべてに依存する（本質的にそれらを結合／固定する）ことが保証される。
【００６５】
鍵導出関数は、例えば、任意の数の入力を取り入れて、固定長の出力を生成する関数であってもよい。本開示の主題のいくつかの実施形態では、鍵導出関数が、Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ−Ｃｉｐｈｅｒ−ｂａｓｅｄ  Ｍｅｓｓａｇｅ  Ａｕｔｈｅｎｔｉｃａｔｉｏｎ  Ｃｏｄｅ（ＡＥＳ−ＣＭＡＣ）などの暗号化ハッシュ関数であり得る。
【００６６】
代替的には、例えば、鍵導出関数がサンプリングを利用することができる。この場合、鍵導出関数は、複数回の反復を実行し、各反復において、出力値が各ノンスからいくつかのビットを含むように、ノンスの各々から特定のビットを選択する。より具体的な例として、３つのノンスで動作する鍵導出関数は、（ｎ／３）番目のノンスの対応するビットに応じて、出力のｎ番目のビットを決定することができ、その結果、合成鍵は、最初のノンスから取得した３番目のビットをすべて持ち、出力鍵は、提供されたすべてのノンスからのいくつかのビットを含むこととなる。
【００６７】
本開示の主題のいくつかの実施形態では、異なる鍵導出関数を異なる時に使用することができる。
【００６８】
合成鍵の生成後、各プロセスは、合成鍵を使用できるようになる。具体的には、共有データメモリ１１０に書き込むプロセスは、書き込む前に新しい合成鍵を用いて暗号化し（４７０）、共有データメモリ１１０からデータを読み出すプロセスは、読み出されたデータを復号（４７０）するために新しい合成鍵を用いることができる。
【００６９】
共有データメモリ１１０からデータを読み出すプロセスは、読み出されたデータが完全性を維持し（すなわち、破損しておらず、または悪意を持って変更されておらず）、正常に復号されたことを検証することができる（４８０）。非限定的な例として、ＸＴＳ−ＡＥＳなどの暗号化スキームを復号するプロセスは、復号が正しい復号データを生成するのに失敗したか否か（例えば、復号鍵が正しくない場合）、またはデータの完全性が失われたか（例えば、悪意のある改変によるデータ破損に起因する）を検出することができる。検証が成功した場合、プロセスは、次の鍵ロールオーバーまで合成鍵を使用し続けることができる（４９０）。
【００７０】
検証が失敗した場合、プロセスは、鍵のロールオーバーを開始して収集フェーズを再開するよう、コーディネータに要求することができる（４９５）。検証が失敗した場合（すなわち、データが正しく復号されなかった場合）、それは良性のエラーの結果であるか、悪意のあるエンティティによる中断の結果である可能性がある。悪意のあるエンティティ（例えば、コンテナ外のモジュール内で実行されているマルウェアなど）は、例えば、鍵確立用の専用共有メモリ１０５に不正な情報を書き込もうとする可能性がある。より具体的には、悪意のあるエンティティが、誤った鍵データの生成を引き起こす試みとして、古いデータをメモリに書き込もうとしている（「リプレイ攻撃」の）可能性がある。開示の方法は、例えば、そのような攻撃を検出して、合成鍵生成を再度実行するように要求することができる。
セキュリティを強化し、サイドチャネル攻撃や他の攻撃から保護するために、コーディネータは、それらの鍵ロールオーバー要求を制限、変更、開始または変更することができる。
【００７１】
検証が成功した場合、各プロセスは、ノンスに寄与したすべてのプロセス間で（共有データメモリ１１０を介して）通信するための対称暗号鍵／復号鍵として使用するのに適した、新たに生成された合成鍵を保有するようになることに留意されたい。各プロセスがそれ自体のノンスに寄与しているため、各プロセスは、その鍵が実際には新しく、かつ危険に曝されていないことが保証されている。さらに、合成鍵を確立するために（すべてのプロセスによって）必要とされるプラットフォーム提供の秘密保持機能は、（例えば、ハードウェア設計によって）同じ署名機関によって署名された同じプラットフォーム上のプロセスのみが利用可能であるため、各プロセスは、その通信ピアが真正であり、信頼でき、かつ改ざんされていないことが保証される。
【００７２】
さらに、本明細書に記載のセキュア通信メカニズムの確立により、システムの信頼されていない部分によるアクセスから遮蔽された論理的に分離されたサブシステムが効果的に可能になり、そのような遮蔽されたサブシステムは、例えば、キーロガー、サイドチャネル攻撃などに対して耐性のある方法でリモートシステムのアクセスにより周辺機器を使用することを可能にするコンピュータシステムを提供するために使用できることに留意されたい。
【００７３】
本主題のいくつかの実施形態では、本明細書に記載の合成鍵を確立するための方法が、公開鍵暗号の使用や、通信当事者間での共有秘密鍵の事前共有を必要としないことに留意されたい。
【００７４】
図４は、各プロセスが独立してノンスを読み出し、合成鍵を計算する合成鍵確立方法を示している。この方法は、当該方法の基本的な動作に影響を与えないバリエーションを含むことができることは、当業者には明らかであろう。例えば、単一のプロセスにより、ノンスから合成鍵を計算した後、プラットフォームによる秘密保持機能を使用して、合成鍵をプロセスに配布することができる。
【００７５】
代替的には、例えば、各プロセスは、合成鍵の一部を計算し、受け取った部分的な値をそれ自体のノンスと結合し、その結合した値を、すべてのプロセスが計算に参加するまで、（プラットフォームによる秘密保持関数を使用して）次のプロセスに渡すこともできる。このようにして、各プロセスは、それぞれのノンスを公開することなく、それぞれのノンスを合成鍵に寄与させることができる。
【００７６】
本開示の主題の教示は、図４に示すフローチャートに拘束されるものではなく、図示の操作は、図示の順序から外れて発生する可能性があることに留意されたい。例えば、連続して示す操作４５０、４６０は、実質的に同時に、または逆の順序で実行することができる。また、フローチャートは、図１の要素を参照して記載されているが、これは決して拘束力を持つものではなく、それら操作は、本明細書に記載の要素以外の要素によって実行できることにも留意されたい。
【００７７】
本発明は、その用途において、本明細書に含まれるか又は図面に示される記載に述べられた詳細に限定されないことを理解されたい。本発明は、他の実施形態が可能であり、様々な方法で実施および実行することができる。このため、本明細書で用いられている表現および用語は、説明を目的とするものであり、限定的なものと見なされるべきではないことを理解されたい。よって、当業者であれば、本開示の基礎となる概念が、本開示の主題のいくつかの目的を遂行するための他の構造、方法およびシステムを設計するための基礎として容易に利用できることを理解するであろう。
【００７８】
また、本発明に係るシステムは、少なくとも部分的には、適切にプログラムされたコンピュータ上に実装されてもよいことが理解されるであろう。同様に、本発明は、本発明の方法を実行するためにコンピュータによって読み取り可能なコンピュータプログラムを企図している。さらに、本発明は、本発明の方法を実行するためにコンピュータによって実行可能な命令のプログラムを有形に具現化する非一時的なコンピュータ可読メモリも企図している。
【００７９】
当業者であれば、添付の特許請求の範囲で規定された本発明の範囲から逸脱することなく、上述した本発明の実施形態に様々な修正および変更を適用できることを容易に理解するであろう。
【図１】
2021519452.tif 000003
【図２】
2021519452.tif 000004
【図３】
2021519452.tif 000005
【図４】
2021519452.tif 000006
【国際調査報告】
2021519452.tif 000007
2021519452.tif 000008