(57)【特許請求の範囲】
【請求項１】
ハイパーバイザに制御されるシステムにおいてゲスト・イベントを処理するための方法であって、
（ｉ）ゲストに、ならびにゲスト・キーによって暗号化されたゲスト・ステートおよびゲスト・メモリに関連付けられた前記ゲスト・イベントが、ファームウェアにおける前記ゲスト・イベントに特有な第１のファームウェア・サービスをトリガするステップと、
（ｉｉ）前記ファームウェアが、前記ゲスト・ステートおよび前記ゲスト・メモリの情報を含み前記ゲスト・イベントに関連付けられた情報を処理し、前記ゲスト・ステートおよび前記ゲスト・メモリの前記情報のサブセットのみを復号された形態でハイパーバイザに提示するステップであって、前記情報の前記サブセットは、前記ハイパーバイザが前記ゲスト・イベントを処理するのに十分であるように選択される、前記提示するステップと、
（ｉｉｉ）前記ファームウェアが、前記ゲスト・ステートおよび前記ゲスト・メモリの前記情報のうち前記ハイパーバイザに送信されていない部分を保持するステップと、
（ｉｖ）前記ハイパーバイザが、前記ゲスト・ステートおよび前記ゲスト・メモリの前記情報の受信した前記サブセットに基づいて、前記ゲスト・イベントを処理し、処理結果を前記ファームウェアに送信し、前記ゲスト・イベントに特有な第２のファームウェア・サービスをトリガするステップと、
（ｖ）前記ファームウェアが、前記ゲスト・ステートおよび前記ゲスト・メモリの前記情報のうち前記ハイパーバイザに送信されなかった前記部分と併せて、受信した前記処理結果を処理し、ステートの変更またはメモリの変更あるいはその両方の変更を生成するステップと、
（ｖｉ）前記ファームウェアが、前記ゲスト・イベントに関連付けられた前記ステートの変更または前記メモリの変更あるいは前記その両方の変更を、暗号化された形態で前記ゲスト・メモリにおいて実行するステップと、
を含む方法。
【請求項２】
（ｉ）ＣＰＵがゲストのコンテキストにおいて動作する場合、前記ＣＰＵが前記ゲスト・メモリを復号または暗号化するステップと、
（ｉｉ）暗号化されていないメモリ範囲を介して前記ゲストが外部と通信することを可能にするステップと、
（ｉｉｉ）前記ゲスト・メモリの暗号化されたページを前記ハイパーバイザがページングするステップと、
をさらに含む、請求項１に記載の方法。
【請求項３】
（ｉ）ＣＰＵのキー・ストアに転送するために、前記ＣＰＵの秘密キーに関連付けられた公開キーによって暗号化された前記ゲスト・キーを前記ゲストに準備するステップと、
（ｉｉ）前記ＣＰＵに格納されており、前記暗号化されたゲスト・キーを復号するのに使用される前記秘密キーを前記ＣＰＵに準備するステップと、
（ｉｉｉ）前記ＣＰＵがゲストのコンテキストにおいてゲストまたはファームウェアのコードを動作させる間に、前記ゲスト・キーが、前記ゲスト・メモリを暗号化および復号するのに使用されるステップと、
をさらに含む、請求項１または２に記載の方法。
【請求項４】
（ｉ）クライアントがブート・イメージを生成するステップと、
（ｉｉ）前記ブート・イメージを前記ゲスト・キーによって暗号化するステップと、
（ｉｉｉ）前記暗号化されたブート・イメージをブート・ディスクに転送するステップと、
（ｉｖ）前記ハイパーバイザがゲストの前記暗号化されたブート・イメージを前記ゲスト・メモリにロードするステップと、
（ｖ）ＣＰＵのレベルで仮想マシンとしてゲストの実行を開始するステップと、
をさらに含む、請求項１ないし３のいずれか一項に記載の方法。
【請求項５】
（ｉ）ＣＰＵがゲストのコンテキストにある間に、前記ゲスト・メモリ上で実行される仮想マシンにおける実行スレッドをクリア・テキストに復号するステップと、
（ｉｉ）前記ＣＰＵがゲストのコンテキストおよび前記ゲスト・ステートにある間に前記ゲスト・メモリを復号するステップであって、前記ゲストのコンテキストおよび前記ゲスト・ステートの両方は、前記ハイパーバイザまたは他のゲストによるアクセスから保護される、前記復号するステップと、
をさらに含む、請求項１ないし４のいずれか一項に記載の方法。
【請求項６】
（ｉ）ＣＰＵの仮想化機能を拡張して、ゲストのコンテキストにおいて前記ゲスト・メモリの暗号化された領域が書き込まれるときに前記ゲスト・メモリを暗号化するステップと、
（ｉｉ）ゲストのコンテキストにおいて前記ゲスト・メモリの前記暗号化された領域が読み取られるときに前記ゲスト・メモリを復号するステップと、
（ｉｉｉ）前記ゲスト・メモリおよびゲスト・レジスタの暗号化された領域を、暗号化された形態においてのみ前記ハイパーバイザからアクセス可能に保持するステップと、
をさらに含む、請求項１ないし５のいずれか一項に記載の方法。
【請求項７】
（ｉ）前記ゲスト・イベントに関連付けられた前記ゲスト・メモリまたはレジスタの暗号化された範囲を、復号された形態において前記ハイパーバイザからアクセス不可に保持するステップと、
（ｉｉ）前記ゲスト・イベントに関連付けられた特有なゲスト・データに対するアクセス・メソッドによって、ＣＰＵの仮想化機能を拡張するステップと、
をさらに含む、請求項１ないし６のいずれか一項に記載の方法。
【請求項８】
（ｉ）前記ゲスト・メモリの暗号化された領域の外部に、前記ゲストのＩ／ＯバッファおよびＩ／Ｏ制御構造のための暗号化されていないメモリ領域を定義するステップと、
（ｉｉ）前記ゲスト・メモリの暗号化されていない領域を使用して、前記ゲストによるＩ／Ｏプロセスを開始するステップと、
（ｉｉｉ）ＣＰＵの仮想化機能がゲスト・イベントを生成するステップと、
（ｉｖ）前記ハイパーバイザが、前記ゲスト・イベントの理由を読み取り、前記Ｉ／Ｏプロセスを実行するステップと、
をさらに含む、請求項１ないし７のいずれか一項に記載の方法。
【請求項９】
（ｉ）前記ハイパーバイザが前記ゲスト・メモリのページをページアウトするステップと、
（ｉｉ）ページアウトしたページへのアクセスの試みがあるとページ・フォールトを提供するステップであって、前記ページ・フォールトは、前記ハイパーバイザのページアウト動作が前記ページ・フォールトを引き起こしたかどうかを前記ハイパーバイザに示す、前記提供するステップと、
（ｉｉｉ）前記ハイパーバイザをトリガして、前記ゲスト・メモリに対するページイン・プロセスを実行するステップと、
をさらに含む、請求項１ないし８のいずれか一項に記載の方法。
【請求項１０】
前記ゲスト・キーを認識するチェック・プロセスによって、ゲストの完全性をチェックするステップをさらに含み、前記チェック・プロセスは、
（ｉ）前記ゲストが、前記ゲスト・メモリからクリア・テキストのメモリ内容を読み取り、前記ゲスト・メモリの任意の範囲をセキュアな通信パスを介して前記チェック・プロセスに転送するステップと、
（ｉｉ）前記ハイパーバイザに前記ゲスト・メモリの同じメモリ範囲を要求し、前記範囲を前記チェック・プロセスに転送するステップと、
（ｉｉｉ）前記ゲストから得られたメモリ内容を、前記ハイパーバイザから得られたメモリ内容を復号した結果と比較するステップと、
（ｉｖ）前記２つのメモリ範囲の前記内容に応じて比較結果を送るステップと、
（ｖ）前記比較結果がゼロに等しい場合は肯定であり、その他の場合は否定である前記チェック・プロセスの結果を返すステップと、
を含む、請求項１ないし９のいずれか一項に記載の方法。
【請求項１１】
データ処理システムにおいて実行するためのデータ処理プログラムであって、
前記データ処理プログラムがコンピュータ上で動作するときに請求項１ないし１０のいずれか一項に記載の方法を実行するための命令セットの実装を含む、データ処理プログラム。
【請求項１２】
コンピュータ可読プログラムであって、前記コンピュータ可読プログラムは、コンピュータ上で実行されると、ハイパーバイザに制御されるシステムにおいてゲスト・イベントを処理するための方法を前記コンピュータに実行させ、前記方法は、
（ｉ）ゲストに、ならびにゲスト・キーによって暗号化されたゲスト・ステートおよびゲスト・メモリに関連付けられた前記ゲスト・イベントが、ファームウェアにおける前記ゲスト・イベントに特有な第１のファームウェア・サービスをトリガするステップと、
（ｉｉ）前記ファームウェアが、前記ゲスト・ステートおよび前記ゲスト・メモリの情報を含み前記ゲスト・イベントに関連付けられた情報を処理し、前記ゲスト・ステートおよび前記ゲスト・メモリの前記情報のサブセットのみを復号された形態でハイパーバイザに提示するステップであって、前記情報の前記サブセットは、前記ハイパーバイザが前記ゲスト・イベントを処理するのに十分であるように選択される、前記提示するステップと、
（ｉｉｉ）前記ファームウェアが、前記ゲスト・ステートおよび前記ゲスト・メモリの前記情報のうち前記ハイパーバイザに送信されていない部分を保持するステップと、
（ｉｖ）前記ハイパーバイザが、前記ゲスト・ステートおよび前記ゲスト・メモリの前記情報の受信した前記サブセットに基づいて、前記ゲスト・イベントを処理し、処理結果を前記ファームウェアに送信し、前記ゲスト・イベントに特有な第２のファームウェア・サービスをトリガするステップと、
（ｖ）前記ファームウェアが、前記ゲスト・ステートおよび前記ゲスト・メモリの前記情報のうち前記ハイパーバイザに送信されなかった前記部分と併せて、受信した前記処理結果を処理し、ステートの変更またはメモリの変更あるいはその両方の変更を生成するステップと、
（ｖｉ）前記ファームウェアが、前記ゲスト・イベントに関連付けられた前記ステートの変更または前記メモリの変更あるいは前記その両方の変更を、暗号化された形態で前記ゲスト・メモリにおいて実行するステップと、
を含む、コンピュータ・プログラム。
【請求項１３】
請求項１ないし１０のいずれか一項に記載の方法を実行するためのソフトウェア・コード部分を含むデータ処理プログラムを実行するためのデータ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にデータ処理システムに関し、詳細には、ハイパーバイザに制御されるシステムにおいてゲスト・イベントを処理するための方法およびシステムに関する。
【背景技術】
【０００２】
顧客によるパブリック・クラウドの採用は、ミッション・クリティカルではないデータに限られている。非常に多くの場合、コア・ビジネス・データは、顧客にとって極めて重要な資産であり、データの秘匿性はビジネスの成功に不可欠である。顧客がクラウド環境を信頼しない限り、こうしたビジネス・センシティブ（business sensitive）な環境におけるクラウドの採用は最小限のままである。顧客の主な懸念の中には、クラウド・プロバイダやクラウドのセキュリティに対する信頼の欠如がある。
【０００３】
クラウド・プロバイダに対する信頼は不可欠であるが、これはプロバイダの管理者が顧客のワークロードやデータを十分に検査する能力を有するためである。スパイ活動に対するこのような潜在的な抜け穴（potential breach）は、多くの顧客が気乗りしない理由となっている。
【０００４】
クラウドのセキュリティに対する信頼は、ハイパーバイザの抜け穴（hypervisorbreach）、すなわち、攻撃者がハイパーバイザにアクセスした場合、顧客のワークロードやデータが、やはり危険にさらされるといった脅威に関連している。
【０００５】
秘匿性やプライバシーを保証する取組みは、現時点では入力／出力（Ｉ／Ｏ）に限られている。ソケット接続を暗号化するには、セキュア・ソケット・レイヤ（ＳＳＬ）のようなネットワーク暗号化を使用することができ、ディスク・デバイス上のデータを暗号化するには、ＬＩＮＵＸ（Ｒ）のｄｍ−ｃｒｙｐｔのようなディスク暗号化ツールを使用することができる。
【０００６】
顧客が自身のワークロードを動作させる時点でブート・チェーンが有効化されることを保証するために、トラステッド・プラットフォーム・モジュール（ＴＰＭ）が開発されたが、これはクラウド環境にはまだ展開されていない。また、ＴＰＭは、せいぜいセットアップの完全性を保証するのみで、プライバシーを保証しない。
【０００７】
こうした技術はすべて、たとえ使用されたとしても、問題、すなわち、ハイパーバイザは常に、そのゲスト（ここで一般に、ゲストは、ハイパーバイザに制御されるシステム上の仮想マシンであり得る）を十分に検査し、ゲスト上で動作するイメージの、潜在的にセンシティブなデータを有するメモリ内容を読み取ることができるといったことには対処しない。こうした技術では、上述した懸念を取り除くことはできない。
【０００８】
米国特許出願公開第２０１１／０３０２４００号は、複数の処理コアを有する中央処理装置（ＣＰＵ）のトラスト・アンカによって仮想マシン（ＶＭ）イメージを受信することを全般的に含む方法を記載している。ＶＭイメージは、受信されると、ＶＭイメージ暗号化キーを使用して暗号化される。また、この方法は、ＶＭイメージ暗号化キーを取得すること、およびＶＭイメージ暗号化キーによって第１の暗号化／復号ブロックを構成することを含む。また、この方法は、メモリ・セッション・キーを生成すること、およびメモリ・セッション・キーによって第２の暗号化／復号ブロックを構成することを含む。また、この方法は、複数の処理コアがアクセス可能なメモリにＶＭイメージの１つまたは複数のページをフェッチすることを含む。フェッチされた各ページは、ＶＭイメージ暗号化キーを使用して第１の暗号化／復号ブロックによって復号され、次いで、メモリ・セッション・キーを使用して第２の暗号化／復号ブロックによって暗号化される。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】米国特許出願公開第２０１１／０３０２４００号
【発明の概要】
【発明が解決しようとする課題】
【００１０】
本発明の一目的は、信頼できないクラウド環境においてゲスト・データをセキュアに処理するための方法を提供することである。
【００１１】
別の目的は、信頼できないクラウド環境においてゲスト・データをセキュアに処理するためのシステムを提供することである。
【課題を解決するための手段】
【００１２】
これらの目的は、独立請求項の特徴によって達成される。他の請求項、図面、および明細書は、本発明の有利な実施形態を開示する。
【００１３】
本発明の第１の態様によれば、ハイパーバイザに制御されるシステムにおいてゲスト・イベントを処理するための方法が提示され、この方法は、（ｉ）ゲストに、ならびにゲスト・キーによって暗号化されたゲスト・ステートおよびゲスト・メモリに関連付けられたゲスト・イベントが、ファームウェアにおけるゲスト・イベントに特有な第１のファームウェア・サービスをトリガするステップと、（ｉｉ）ファームウェアが、ゲスト・ステートおよびゲスト・メモリの情報を含みゲスト・イベントに関連付けられた情報を処理し、ゲスト・ステートおよびゲスト・メモリの情報のサブセットのみを復号された形態でハイパーバイザに提示するステップであって、情報のサブセットは、ハイパーバイザがゲスト・イベントを処理するのに十分であるように選択される、提示するステップと、（ｉｉｉ）ファームウェアが、ゲスト・ステートおよびゲスト・メモリの情報のうちハイパーバイザに送信されていない部分を保持するステップと、（ｉｖ）ハイパーバイザが、ゲスト・ステートおよびゲスト・メモリの情報の受信したサブセットに基づいて、ゲスト・イベントを処理し、処理結果をファームウェアに送信し、ゲスト・イベントに特有な第２のファームウェア・サービスをトリガするステップと、（ｖ）ファームウェアが、ゲスト・ステートおよびゲスト・メモリの情報のうちハイパーバイザに送信されなかった部分と併せて、受信した処理結果を処理し、ステートの変更またはメモリの変更あるいはその両方の変更を生成するステップと、（ｖｉ）ファームウェアが、ゲスト・イベントに関連付けられたステートの変更またはメモリの変更あるいはその両方の変更を暗号化された形態でゲスト・メモリにおいて実行するステップと、を含む。
【００１４】
第１のファームウェア・サービスは、好ましくは、ステップ（ｉｉ）および（ｉｉｉ）、すなわち、（ｉｉ）ファームウェアが、ゲスト・ステートおよびゲスト・メモリの情報を含みゲスト・イベントに関連付けられた情報を処理し、ゲスト・ステートおよびゲスト・メモリの情報のサブセットのみを復号された形態でハイパーバイザに提示するステップであって、情報のサブセットは、ハイパーバイザがゲスト・イベントを処理するのに十分であるように選択される、提示するステップと、（ｉｉｉ）ファームウェアが、ゲスト・ステートおよびゲスト・メモリの情報のうちハイパーバイザに送信されなかった部分を保持するステップと、を含むことができる。
【００１５】
第２のファームウェア・サービスは、好ましくは、ステップ（ｖ）および（ｖｉ）、すなわち、（ｖ）ファームウェアが、ゲスト・ステートおよびゲスト・メモリの情報のうちハイパーバイザに送信されなかった部分と併せて、受信した処理結果を処理し、ステートの変更またはメモリの変更あるいはその両方の変更を生成するステップと、（ｖｉ）ファームウェアが、ゲスト・イベントに関連付けられたステートの変更またはメモリの変更あるいはその両方の変更を暗号化された形態でゲスト・メモリにおいて実行するステップと、を含むことができる。
【００１６】
特に、ハイパーバイザに制御されるシステムにおいてゲスト・イベントを処理するための方法は、ゲストの秘匿性を保護する利点を示しながら記載される。したがって、本発明による方法は、全般的に、暗号化されたメモリおよびコンテンツ・データを含むリソースをそれぞれが有する１つまたは複数の仮想マシンを含むハイパーバイザに対して仮想マシンの内容のプライバシーを維持しながら仮想マシンをセキュアに管理すること、ハイパーバイザが仮想マシン・リソースおよび仮想マシン・ステートを管理すること、ならびにＣＰＵにアシストされる仮想化によって、ハイパーバイザから仮想マシンのステート／メモリ／コンテキストへの制限されたアクセスがファームウェア・サービスを介して実現すること、を記載する。
【００１７】
特に、本発明による方法は、ハイパーバイザに制御されるシステムにおいてゲスト・イベントを処理することであって、ゲスト・データが、ハイパーバイザからアクセス不可であるゲスト・キーによって暗号化され、ＣＰＵおよびファームウェアが、ゲスト・コンテキストで動作する際に信頼できると判断されゲスト・キーにアクセスする、処理することを記載する。この文脈でのファームウェアは、特に、ハードウェア・ベースの環境において実装されるシステム・ソフトウェアを意味する。
【００１８】
上述のように、本発明による方法は、仮想マシン用に暗号化されたメモリから仮想マシンを動作させることを記載する。さらに、この方法は、ハイパーバイザが、そのゲスト、すなわち仮想マシン／イメージを常に十分に検査し、潜在的にセンシティブなデータを有するメモリの内容を読むことができる、ということを防止する。記載される方法が、（顧客）キー・サービスによるトラスト・アンカの認証のようなプロセスを使用せず、暗号化されたイメージをディスクからメモリにロードする際、（第２のキーを使用した）仮想マシン・イメージの再暗号化のような処理も使用しないことが利点である。この方法では、セキュアでない平文のカウンタ（ＣＴＲ）モード暗号化を使用する必要がなく、代わりに、セキュアなｃｉｐｈｅｒｔｅｘｔ  ｓｔｅａｌｉｎｇ（ＸＴＳ）モード暗号化によるＸｏｒ−ｅｎｃｒｙｐｔ−ｘｏｒ（ＸＥＸ）ベースのｔｗｅａｋｅｄ−ｃｏｄｅｂｏｏｋモードのようなＣＴＲモード暗号化のバリアントの使用が推奨される。この方法は、割り込みまたはハイパーバイザのインターセプトに対処することが可能である。この方法は、認証されていないアクセスから暗号化されていないキャッシュ内容を守ることが可能であり、Ｉ／Ｏに対処することが可能である。記載された方法は、ＣＰＵ上にアテステーション・モジュール（例えばＴＰＭ）を必要としない。
【００１９】
有利なことには、特にＣＰＵアーキテクチャの仮想化環境を拡張することに関して、方法は、（ｉ）ＣＰＵがゲスト・コンテキストにおいて動作する場合、ＣＰＵがゲスト・メモリを復号または暗号化するステップと、（ｉｉ）暗号化されていないメモリ範囲を介してゲストが外部と通信することを可能にするステップと、（ｉｉｉ）ゲスト・メモリの暗号化されたページをハイパーバイザがページングするステップと、をさらに含むことができる。ＣＰＵアーキテクチャの仮想化機構を拡張し、その結果、ゲストのメモリが常に暗号化されるようにしてもよい。これはＣＰＵによる処理中に行うことが可能であり、ハイパーバイザが、メモリを読み取ること、またはクリア・テキストの内容を記録することが防止される。効率的な処理のために、キャッシュを暗号化しなくてもよい。しかし、ゲストのデータがＣＰＵを離れるときは、その内容を暗号化してもよい。ゲスト実行中のゲスト・メモリの復号は、ＣＰＵを介して透過的に行ってもよいが、ＣＰＵがゲスト・コンテキストを実行中にしか行わなくてもよい。
【００２０】
さらに、特に仮想マシンのセキュアな展開および実行に関して、有利なことには、方法は、（ｉ）ＣＰＵのキー・ストアに転送するために、ＣＰＵの秘密キーに関連付けられた公開キーによって暗号化されたゲスト・キーをゲストに準備するステップと、（ｉｉ）ＣＰＵに格納されており、暗号化されたゲスト・キーを復号するのに使用される秘密キーをＣＰＵに準備するステップと、（ｉｉｉ）ＣＰＵがゲスト・コンテキストにおいてゲストまたはファームウェアのコードを動作させる間に、ゲスト・キーが、ゲスト・メモリを暗号化および復号するのに使用されるステップと、をさらに含む。したがって、ハイパーバイザに制御されるシステムにおける仮想マシンのセキュアな展開および実行が可能とされ得る。
【００２１】
各ＣＰＵは、キー・ペアを得ることができ、その秘密キーは、ＣＰＵのみに格納することができ、ゲスト・キーを復号するのに使用することができる。ＣＰＵ公開キーは、ＣＰＵに対する秘密ゲスト・キーを暗号化（および転送）するのに使用することができ、ＣＰＵにおいて、ゲスト・キーはセキュアに格納および使用され得る。
【００２２】
ゲストは、キーを生成することもできる。ゲスト・キーは、ＣＰＵに転送される前に、ＣＰＵ公開キーによって暗号化され得る。ＣＰＵは、このゲスト・キーを使用して、ゲストのメモリを暗号化することができる（しかし、ＣＰＵ仮想化機能のコンテキストにおいてゲストを動作させるときのみに限られる）。また、ゲスト・キーは、クラウド環境においてゲストからのイメージを展開するのに使用され得る。
【００２３】
好適なことには、特にブート・イメージの生成および展開に関して、本発明による方法は、（ｉ）クライアントまたは顧客がブート・イメージを生成するステップと、（ｉｉ）ブート・イメージをゲスト・キーによって暗号化するステップと、（ｉｉｉ）暗号化されたブート・イメージをブート・ディスクに転送するステップと、（ｉｖ）ハイパーバイザがゲストの暗号化されたブート・イメージをゲスト・メモリにロードするステップと、（ｖ）ＣＰＵレベルで仮想マシンとしてゲストの実行を開始するステップと、をさらに含むことができる。ここで、ゲストは、暗号化されたメモリの領域、暗号化されていないメモリの領域、および暗号化されたゲスト・キーによって定義される。ゲスト・キーは、それぞれクライアントおよびゲスト、ならびにゲスト・コンテキストのＣＰＵのみに知られてよく、ＣＰＵへの移送のために、ゲスト・キーは、ＣＰＵの秘密キーに関連付けられた公開キーによって暗号化され得る。これは、クラウド・オペレータまたはハイパーバイザに知られる必要はない。ゲスト・キーは、１つまたは複数のシステムまたはＣＰＵのために暗号化され得る。
【００２４】
有利なことには、特にブート・イメージのブート・プロセスに関して、方法は、（ｉ）ＣＰＵがゲスト・コンテキストにあるときに、ブート・イメージ上で実行される仮想マシンにおける実行スレッドをクリア・テキストに復号するステップと、（ｉｉ）ＣＰＵがゲスト・コンテキストおよびゲスト・ステートにある間にゲスト・メモリを復号するステップであって、ゲスト・コンテキストおよびゲスト・ステートの両方は、ハイパーバイザまたは他のゲストによるアクセスから保護される、復号するステップと、をさらに含むことができる。ハイパーバイザは、ブート・イメージの内容を、再配置することなくブート・ディスクからゲスト・メモリに読み取ることができる。ここで、ブート・ディスクの内容は、カーネル、パラメータ、初期ＲＡＭディスクを含むことができる。ブート・イメージをロードすることは、（例えば、通常適用されるＬＩＮＵＸ（Ｒ）の暗号化ツールであるｄｍ−ｃｒｙｐｔを介して）従来通りに暗号化されたルート・ファイル・システムをマウントすることを含んでもよい。さらに、ブート・ディスクの内容は、従来通りに暗号化されたターゲット・ブート・デバイスから新たなカーネルをロードするカーネル実行（ｋｅｘｅｃ）環境を含んでもよい。
【００２５】
好適なことには、特に仮想マシンの実行に関して、方法は、（ｉ）ＣＰＵの仮想化機能を拡張して、ゲスト・コンテキストにおいてゲスト・メモリの暗号化された領域が書き込まれるときにゲスト・メモリを暗号化するステップと、（ｉｉ）ゲスト・コンテキストにおいてゲスト・メモリの暗号化された領域が読み取られるときにゲスト・メモリを復号するステップと、（ｉｉｉ）ゲスト・メモリおよびゲスト・レジスタの暗号化された領域を、暗号化された形態においてのみハイパーバイザからアクセス可能に保持するステップと、をさらに含むことができる。ＣＰＵアーキテクチャを拡張して、ゲスト・ステートにアクセスするための明確な手段を提供してもよく、ここで、アクセス・メソッドが、ハイパーバイザにそのタスク（例えば、トラップのハンドリング）を行うのに必要な情報しか与えなくてもよい。ただし、ゲスト・メモリおよびレジスタ・ファイルには、このアクセス・メソッド以外ではアクセス不可としてよい。したがって、ハイパーバイザがゲスト・ステートもゲスト・データも完全には読み取ることができないため、ゲストの秘匿性を保護することができる。レジスタ・ファイルは、ハイパーバイザから直接アクセスできなくしてもよいが、保管しておき、ハイパーバイザ・サービスを介して復元させてもよい。ハイパーバイザが、暗号化されていないゲスト・メモリを認識しないことも可能であるが、ゲスト自身以外のコンテキストが、暗号化されたメモリ内容を認識のみすることも可能である。ゲスト・メモリのある領域は、ハイパーバイザまたはＩ／Ｏデバイスとデータを交換するために、暗号化されないままでよい。Ｉ／Ｏスクラッチ領域は、暗号化されたメモリ領域の外部にあってよい。
【００２６】
有利な実施形態において、特に仮想マシンとハイパーバイザとの対話に関して、方法は、（ｉ）ゲスト・イベントに関連付けられたゲスト・メモリまたはレジスタの暗号化された範囲を、復号された形態においてハイパーバイザからアクセス不可に保持するステップと、（ｉｉ）アクセス・メソッドによって、ＣＰＵの仮想化機能をゲスト・イベントに関連付けられた特有なゲスト・データに拡張するステップと、をさらに含むことができる。このステップはハイパーバイザの動作にとっては有利となり得るが、ゲストのデータまたはコード（トラップする命令の理由および関連パラメータ以外）を明らかにせずに、ゲスト・イベントの実行を続けることができるようにしてもよい。いくつかのトラップは、ハイパーバイザがゲストにフル・アクセスするときのみ意味がある（例えば、シングル・ステップ）可能性があるため、完全に無効にしてもよい。
【００２７】
有利なことには、特にゲストのＩ／Ｏプロセスに関して、方法は、（ｉ）ゲスト・メモリの暗号化された領域の外部に、ゲストのＩ／ＯバッファおよびＩ／Ｏ制御構造のための暗号化されていないメモリ領域を定義するステップと、（ｉｉ）ゲスト・メモリの暗号化されていない領域を使用して、ゲストによるＩ／Ｏプロセスを開始するステップと、（ｉｉｉ）ＣＰＵの仮想化機能がゲスト・イベントを生成するステップと、（ｉｖ）ハイパーバイザが、ゲスト・イベントの理由を読み取り、Ｉ／Ｏプロセスを実行するステップと、をさらに含むことができる。暗号化されたゲスト・メモリの外部にＩ／Ｏバッファを置くことによって、ハイパーバイザおよびＩ／Ｏデバイスは、Ｉ／Ｏ制御構造およびデータにアクセスすることができる。
【００２８】
好適なことには、特にハイパーバイザによるページング・プロセスに関して、方法は、（ｉ）ハイパーバイザがゲスト・メモリのページをページアウトするステップと、（ｉｉ）ページアウトしたページへのアクセスの試みがあるとページ・フォールトを提供するステップであって、ページ・フォールトは、ハイパーバイザのページアウト動作がページ・フォールトを引き起こしたかどうかをハイパーバイザに示す、提供するステップと、（ｉｉｉ）ハイパーバイザをトリガして、ゲスト・メモリに対するページイン・プロセスを実行するステップと、をさらに含むことができる。ハイパーバイザは、ハイパーバイザが所有するスワップ・デバイス上にページを格納することができ、ここでは依然として、ページ内容が暗号化されていてよい。ＣＰＵの仮想化機能は、トラップすることができ、ここで、ハイパーバイザは、トラップの理由（例えば、「ページ・フォールト」）を読み取ることができ、ゲスト・アドレスを読み取ることもできる。このため、ハイパーバイザは、ページを同じゲスト・アドレスに戻すことができ、これによって、暗号化結果が再配置できないままであるときに、ゲスト・データの完全性が維持される。したがって、ハイパーバイザは、ゲストを再始動させることができる。
【００２９】
有利な実施形態において、特に、記載される方法に対する信頼を確立することに関して、方法は、ゲスト・キーを認識するチェック・プロセスによって、ゲストの完全性をチェックすることをさらに含むことができ、チェック・プロセスは、（ｉ）ゲストが、ゲスト・メモリからクリア・テキストのメモリ内容を読み取り、ゲスト・メモリの任意の範囲をセキュアな通信パスを介してチェック・プロセスに転送するステップと、（ｉｉ）ハイパーバイザにゲスト・メモリの同じメモリ範囲を要求し、その範囲をチェック・プロセスに転送するステップと、（ｉｉｉ）ゲストから得られたメモリ内容を、ハイパーバイザから得られたメモリ内容を復号した結果と比較するステップと、（ｉｖ）２つのメモリ範囲の内容に応じて比較結果を送るステップと、（ｖ）比較結果がゼロに等しい場合は肯定であり、その他の場合は否定であるチェック・プロセスの結果を返すステップと、を含む。ハイパーバイザは、ゲスト・メモリ復号／暗号化のためのキーを備えていないので、コードまたはデータの読み取り／挿入を行うことができないため、これらの方法ステップは、特に有利となり得る。
【００３０】
本発明のさらに有利な態様によれば、データ処理プログラムがコンピュータ上で動作するときに上述した方法を実行するための命令セットの実装を含む、データ処理システムにおいて実行されるデータ処理プログラムが提示される。
【００３１】
さらに、好適なコンピュータ・プログラム製品が提示され、このコンピュータ・プログラム製品は、コンピュータ可読プログラムを含むコンピュータ使用可能な媒体を備え、このコンピュータ可読プログラムは、コンピュータ上で実行されると、ハイパーバイザに制御されるシステムにおいてゲスト・イベントを処理するための方法をコンピュータに実行させ、この方法は、（ｉ）ゲストに、ならびにゲスト・キーによって暗号化されたゲスト・ステートおよびゲスト・メモリに関連付けられたゲスト・イベントが、ファームウェアにおけるゲスト・イベントに特有な第１のファームウェア・サービスをトリガするステップと、（ｉｉ）ファームウェアが、ゲスト・ステートおよびゲスト・メモリの情報を含みゲスト・イベントに関連付けられた情報を処理し、ゲスト・ステートおよびゲスト・メモリの情報のサブセットのみを復号された形態でハイパーバイザに提示するステップであって、情報のサブセットは、ハイパーバイザがゲスト・イベントを処理するのに十分であるように選択される、提示するステップと、（ｉｉｉ）ファームウェアが、ゲスト・ステートおよびゲスト・メモリの情報のうちハイパーバイザに送信されていない部分を保持するステップと、（ｉｖ）ハイパーバイザが、ゲスト・ステートおよびゲスト・メモリの情報の受信したサブセットに基づいて、ゲスト・イベントを処理し、処理結果をファームウェアに送信し、ゲスト・イベントに特有な第２のファームウェア・サービスをトリガするステップと、（ｖ）ファームウェアが、ゲスト・ステートおよびゲスト・メモリの情報のうちハイパーバイザに送信されなかった部分と併せて、受信した処理結果を処理し、ステートの変更またはメモリの変更あるいはその両方の変更を生成するステップと、（ｖｉ）ファームウェアが、ゲスト・イベントに関連付けられたステートの変更またはメモリの変更あるいはその両方の変更を、暗号化された形態でゲスト・メモリにおいて実行するステップと、を含む。
【００３２】
当業者には理解されることであるが、本発明の態様は、システム、方法、またはコンピュータ・プログラム製品として具現化され得る。したがって、本発明の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、または、ソフトウェアの態様とハードウェアの態様を組み合わせた実施形態の形を取ることができ、本明細書では、これらはすべて全体として、「回路」、「モジュール」、または「システム」と呼ばれることがある。
【００３３】
さらに、本発明の態様は、コンピュータ可読プログラム・コードをその上で具現化する１つまたは複数のコンピュータ可読媒体において具現化されるコンピュータ・プログラム製品の形を取ることができる。
【００３４】
１つまたは複数のコンピュータ可読媒体の任意の組合せが利用され得る。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読ストレージ媒体であってよい。コンピュータ可読ストレージ媒体は、例えば、電子、磁気、光、電磁気、赤外線、または半導体のシステム、装置、またはデバイス、あるいはこれらの任意の適切な組合せであってよいが、これらに限定されない。コンピュータ可読ストレージ媒体のより具体的な例（包括的ではないリスト）は、以下のもの、すなわち、１つまたは複数のワイヤを有する電気接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、リード・オンリ・メモリ（ＲＯＭ）、消去可能なプログラマブル・リード・オンリ・メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク・リード・オンリ・メモリ（ＣＤ−ＲＯＭ）、光ストレージ・デバイス、磁気ストレージ・デバイス、またはこれらの任意の適切な組合せを含むことになる。本明細書の文脈において、コンピュータ可読ストレージ媒体は、命令を実行するシステム、装置、もしくはデバイスによって、またはこれらに接続して使用するための、プログラムを含むまたは格納することができる任意の有形媒体であってよい。
【００３５】
コンピュータ可読信号媒体は、コンピュータ可読プログラム・コードがその中で具現化される伝播データ信号を、例えば、ベースバンド中に、または搬送波の一部として含むことができる。このような伝播信号は、電磁気、光、またはこれらの任意の適切な組合せを含むが、これらに限定されない、様々な形のいずれかを取ることができる。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではないが、命令を実行するシステム、装置、もしくはデバイスによって、またはこれらに接続して使用するための、プログラムを通信、伝播、または移送することができる任意のコンピュータ可読媒体であってよい。
【００３６】
コンピュータ可読媒体上で具現化されるプログラム・コードは、無線、有線、光ファイバ・ケーブル、ＲＦなど、またはこれらの任意の適切な組合せを含むが、これらに限定されない、任意の妥当な媒体を使用して伝送され得る。
【００３７】
本発明の態様の動作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様のプログラム言語などの従来の手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組合せで書くことができる。プログラム・コードは、すべてをユーザのコンピュータ上で、一部をユーザのコンピュータ上で、スタンドアロンのソフトウェア・パッケージとして、一部をユーザのコンピュータ上かつ一部をリモート・コンピュータ上で、またはすべてをリモート・コンピュータもしくはサーバ上で実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてよく、あるいは、（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部のコンピュータに接続されてもよい。
【００３８】
本発明の態様は、本発明の実施形態による方法、装置（システム）、およびコンピュータ・プログラム製品のブロック図を参照して、以下に記載される。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方のブロックの組合せは、コンピュータ・プログラム命令によって実装され得ることが理解されよう。これらのコンピュータ・プログラム命令は、コンピュータまたは他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートもしくはブロック図またはその両方の１つまたは複数のブロックに指定される機能／動作を実装するための手段をもたらすように、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに与えられてマシンを作り出すものであってよい。
【００３９】
これらのコンピュータ・プログラム命令は、コンピュータ可読媒体に格納された命令が、ブロック図の１つまたは複数のブロックに指定される機能／動作を実装する命令を含む製品をもたらすように、コンピュータ可読媒体に格納されて、コンピュータ、他のプログラム可能なデータ処理装置、または他のデバイスに特定の方式で機能するように指示するものであってもよい。
【００４０】
コンピュータ・プログラム命令は、コンピュータまたは他のプログラム可能な装置上で実行される命令が、ブロック図の１つまたは複数のブロックに指定される機能／動作を実装するためのプロセスを与えるように、コンピュータに実装されるプロセスを作り出すべく、コンピュータ、他のプログラム可能なデータ処理装置、または他のデバイスにロードされ、コンピュータ、他のプログラム可能な装置、または他のデバイスで一連の動作ステップを実行させるものであってもよい。
【００４１】
本発明のさらなる態様によって、上述した方法を実行するためのソフトウェア・コード部分を含むデータ処理プログラムを実行するためのデータ処理システムが提示される。
【００４２】
本発明は、上述の目的および利点ならびに他の目的および利点と併せて、以下の実施形態の詳細な説明から最も良く理解され得るが、これらの実施形態に限定されない。
【図面の簡単な説明】
【００４３】
【図１】従来技術によるハイパーバイザに制御されるシステムにおける、コンポーネントのスタックを示す図である。
【図２】本発明の一実施形態による、セキュアでない環境におけるゲストのセキュアな実行のための方法の全般的な概略を示す図である。
【図３】本発明の一実施形態による、セキュアでない環境におけるゲストのセキュアな実行のためのハイパーバイザに制御されるシステムのシステム図である。
【図４】本発明の一実施形態による暗号化されたゲストを動作させるための包括的なフローチャートである。
【図５】本発明の一実施形態によって動作する暗号化されたゲストのインターセプション・ハンドリングのための詳細なフローチャートである。
【図６】本発明による方法を実行するためのデータ処理システムの例示的な実施形態を示す図である。
【発明を実施するための形態】
【００４４】
図面中、同様な要素は同一の参照番号によって示される。図面は単なる概略表現であって、本発明の具体的なパラメータを表すことを意図していない。また、図面は、本発明の典型的な実施形態のみを示すことを意図しており、したがって、本発明の範囲を限定するものとみなしてはならない。
【００４５】
図１は、従来技術によるハイパーバイザに制御されるシステムにおける、コンポーネントのスタックを示す。種々のコンポーネントは、１つまたは複数のゲスト２０を含み、ゲスト２０は、仮想サーバ・システムとしてハイパーバイザに制御されるシステム上で動作する仮想マシンとして実現され、仮想サーバ・システムは、ファームウェア７０、例えば１つまたは複数のＣＰＵとしてのハードウェア７２、メモリ、ストレージ・ネットワーキングのためのＩ／Ｏデバイス７４から構成される。ハイパーバイザ３０は、ハードウェア７２およびＩ／Ｏデバイス７４のリソースを管理し、これらのリソースの妥当な部分をゲスト２０に割り振る。クラウド環境において、ゲスト２０はクライアントまたは顧客によって操作され、一方ハイパーバイザ３０は、クライアントから信頼されない可能性のあるクラウド・プロバイダによって操作される。ファームウェア７０およびハードウェア７２は、信頼できると考えられる得るハードウェア・ベンダによって製造される。本発明の一目的は、クラウド・プロバイダが信頼されない可能性があるクラウド環境において、ゲスト２０をセキュアに処理するための方法を提供することである。
【００４６】
要約すると、ハイパーバイザに制御されるシステム１０においてゲスト・イベントを処理するための本発明による方法は、（ｉ）ゲスト２０に、ならびにゲスト・キー２４によって暗号化されたゲスト・ステート５２およびゲスト・メモリ２２に関連付けられたゲスト・イベントが、ファームウェア７０におけるゲスト・イベントに特有な第１のファームウェア・サービスをトリガするステップと、（ｉｉ）ファームウェア７０が、ゲスト・ステート５２およびゲスト・メモリ２２の情報を含みゲスト・イベントに関連付けられた情報を処理し、ゲスト・ステート５２およびゲスト・メモリ２２の情報のサブセットのみを復号された形態でハイパーバイザ３０に提示するステップであって、情報のサブセットは、ハイパーバイザ３０がゲスト・イベントを処理するのに十分であるように選択される、提示するステップと、（ｉｉｉ）ファームウェア７０が、ゲスト・ステート５２およびゲスト・メモリ２２の情報のうちハイパーバイザ３０に送信されないでいる部分を保持するステップと、（ｉｖ）ハイパーバイザ３０が、ゲスト・ステート５２およびゲスト・メモリ２２の情報の受信したサブセットに基づいて、ゲスト・イベントを処理し、処理結果をファームウェア７０に送信し、ゲスト・イベントに特有な第２のファームウェア・サービスをトリガするステップと、（ｖ）ファームウェア７０が、ゲスト・ステートおよびゲスト・メモリの情報のうちハイパーバイザ３０に送信されなかった部分と併せて、受信した処理結果を処理し、ステートの変更またはメモリの変更あるいはその両方の変更を生成するステップと、（ｖｉ）ファームウェア７０が、ゲスト・イベントに関連付けられたステートの変更またはメモリの変更あるいはその両方の変更を、暗号化された形態でゲスト・メモリ２２において実行するステップと、を含む。これらのステップは、以下の図における実施形態の記載において参照される。
【００４７】
１つの実施形態において、第１のファームウェア・サービスは、上述のステップ（ｉｉ）および（ｉｉｉ）の少なくとも１つを好ましくは含むことができ、ステップ（ｉｉ）は、ファームウェア７０が、ゲスト・ステート５２およびゲスト・メモリ２２の情報を含みゲスト・イベントに関連付けられた情報を処理し、ゲスト・ステート５２およびゲスト・メモリ２２の情報のサブセットのみを復号された形態でハイパーバイザ３０に提示することであって、情報のサブセットは、ハイパーバイザ３０がゲスト・イベントを処理するのに十分であるように選択される、提示すること、を含む。ステップ（ｉｉｉ）は、ファームウェア７０が、ゲスト・ステート５２およびゲスト・メモリ２２の情報のうちハイパーバイザ３０に送信されないでいる部分を保持することを含む。
【００４８】
１つの実施形態において、第２のファームウェア・サービスは、上述のステップ（ｖ）および（ｖｉ）の少なくとも１つを好ましくは含むことができ、ステップ（ｖ）は、ファームウェア７０が、ゲスト・ステートおよびゲスト・メモリの情報のうちハイパーバイザ３０に送信されなかった部分と併せて、受信した処理結果を処理し、ステートの変更またはメモリの変更あるいはその両方の変更を生成することを含み、ステップ（ｖｉ）は、ファームウェア７０が、ゲスト・イベントに関連付けられたステートの変更またはメモリの変更あるいはその両方の変更を、暗号化された形態でゲスト・メモリ２２において実行することを含む。
【００４９】
図２は、本発明の一実施形態によるハイパーバイザに制御されるシステム１０のセキュアでない環境における、ゲスト２０のセキュアな実行のための方法の全般的な概略を示す。これは、非セキュアな媒体を介してセキュアな動作（すなわち、メッセージング）も実現されるセキュア・ソケット・レイヤと同様に実現され得る。信頼できないと考えられるハイパーバイザ３０は、セキュアなゲスト２０および非セキュアなゲスト４０を同時に同じシステムにおいて制御することができる。ハイパーバイザ３０およびゲスト２０、４０を動作させるＣＰＵ２１６は、セキュアなゲスト２０それぞれに対して特有なコンテキスト４２を、非セキュアなゲスト４０それぞれに対して特有なコンテキスト４４を、ハイパーバイザ３０に対してコンテキスト４６を、それぞれ維持する。セキュアなゲスト２０の各コンテキスト４２は、適合するセキュアなゲスト２０に関連付けられたゲスト・キー２４を含む。各セキュアなゲスト２０のメモリは、適合するセキュアなゲスト２０のゲスト・キー２４によって暗号化される。こうしたゲスト２０、４０、およびハイパーバイザ３０は、自身のコンテキスト４２、４４、４６においてＣＰＵ２１６上で動作することができる。また、ＣＰＵ２１６上には、自身のコンテキスト４６で動作するハイパーバイザ３０がある。ＣＰＵ２１６は、あるコンテキストにおいて動作するときは、別のコンテキストによって維持される情報にはアクセスできない。ＣＰＵ２１６は、セキュアなゲスト２０のゲスト・コンテキスト４２において動作するときは、このゲスト２０のゲスト・キー２４にアクセスして、このゲスト２０のデータを暗号化および復号する。さらに、ＣＰＵ２１６は、ゲスト２０、４０のコードを処理する場合にのみ、このゲスト２０、４０のコンテキストに入り、あるいはハイパーバイザ３０のコードを処理する場合にのみ、このハイパーバイザ３０のコンテキストに入る。
【００５０】
図３は、本発明の一実施形態によるセキュアでない環境におけるゲスト２０のセキュアな実行のためのハイパーバイザに制御されるシステム１０のシステム図を示す。図３に示されずに以下の記載において参照される番号は、図１および図２の対象を参照している。
【００５１】
まずは、図３における図を使用して、本発明の一実施形態によるセキュアでない環境におけるゲスト２０の暗号化された実行の包括的な機能について説明し、その後、ゲスト・イベントによる割り込みまたはインターセプションをハンドルするためのハイパーバイザに制御されるシステムの挙動について論じる。
【００５２】
図３における図は、ハイパーバイザ３０によって制御されるゲスト１からゲストｎと呼ばれる１つまたは複数のゲスト２０を示し、すべてのコンポーネントは、メモリ２３０に接続されたＣＰＵ２１６上で動作する。ＣＰＵ２１６は、ＣＰＵの仮想化機能３４のゲスト・コンテキストのステートのためのアクセス手段５０を含み、ここで、ＣＰＵ２１６が属しているコンテキストに基づいて、アクセスが制御される。こうしたアクセス手段５０は、ハイパーバイザ３０から隠され得るコンテキスト情報または制御ブロックあるいはその両方を含むゲスト・ステート５２のストアから、ゲスト・ステート５２または仮想ＣＰＵステートあるいはその両方のステートを読み取ることができる。ゲスト・ステート５２のストアは、仮想化機能３４が実行されてからのゲスト・ステート５２を含む。命令実行ユニット５４は、メモリ２３０からキャッシュ５６にコードをフェッチし、そのコードを実行する。その結果、命令実行ユニット５４によって実行されたメモリのフェッチおよび格納がトリガされ得る。こうしたメモリのフェッチおよび格納の要求が、キャッシュ５６によってハンドルされるときは、こうしたフェッチおよび格納の要求に伴うデータは、クリア・テキストで存在する。メモリ２３０における暗号化されたゲスト・メモリ領域２２までメモリ・フェッチが及ぶことを可能にするためには、仮想化機能３４が、対応するゲスト２０のコンテキストにおいてゲスト・キー２４を使用して動作しているときに、暗号化ユニット５８によって、キャッシュ５６への転送の際にデータが復号されることになる。キャッシュ・ラインがメモリ２３０へと押し出されるときは、仮想化機能３４が現在実行しているゲスト２０の対応するゲスト・キー２４を使用して、メモリ２３０までの転送の際に暗号化ユニット５８がキャッシュ・ラインを暗号化することになる。
【００５３】
暗号化ユニット５８は、キャッシュ５６とメモリ２３０に接続するＣＰＵ２１６のメモリ・インターフェース６０との間に配置される。ＣＰＵ２１６がセキュアなゲスト２０のコンテキストにおいて動作する場合、仮想化機能３４は、暗号化ユニット５８を制御６４し、ゲスト・キー・ストア２８からセキュアなゲスト２０の暗号ゲスト・キー２４を暗号化ユニット５８に準備する。ＣＰＵ２１６は、キー・ストア２８に格納されており暗号化ユニット５８に供給される、暗号化されたゲスト・キー２４を復号するための秘密キー２６を有している。ゲスト・キー・ストア２８は、ＣＰＵ２１６に送るための暗号化されたゲスト・キー２４、および命令を実行するための復号されたゲスト・キーを含むことができる。キャッシュ５６は、クリア・テキスト・データを含むことができるが、ゲスト・コンテキストにおいて動作していないプロセスは、このクリア・テキスト・データにアクセスしないことが可能である。したがって、キャッシュ５６は、データを、このデータが属するゲスト２０のコンテキストに関連付けることができる。メモリ２３０は、暗号化されたゲスト・メモリ領域２２と、ゲスト・データをＩ／Ｏを介して外部システムと通信させるためのクリア・テキスト領域と、ハイパーバイザ３０および非セキュアなゲストに属するメモリ領域とを含むことができる。
【００５４】
ゲスト・キー２４によって暗号化された範囲、およびハイパーバイザ３０から認識可能な他の範囲が存在するため、ハイパーバイザ３０は、メモリ２３０におけるデータまたはコードあるいはその両方に対して、制限されたアクセスしかしない。
【００５５】
次に、本発明の一実施形態によるファームウェア７０に実装されるサービスとしてのファームウェア・サービスによる割り込みまたはインターセプションのハンドリングを実現することについて説明する。簡単に記載すれば、ハイパーバイザに制御されるシステム１０におけるゲスト・イベントの処理は、（ｉ）第１のファームウェア・サービスをトリガするステップと、（ｉｉ）ファームウェア７０が、ゲスト・イベントに関連付けられた情報を処理し、情報のサブセットのみを復号された形態でハイパーバイザ３０に提示するステップと、（ｉｉｉ）ファームウェアが、ハイパーバイザ３０に送信されていない情報の部分を保持するステップと、（ｉｖ）ハイパーバイザ３０が、第２のファームウェア・サービスをトリガするステップと、（ｖ）ファームウェアが、ゲスト・ステート５２の変更またはゲスト・メモリ２２の変更あるいはその両方の変更を生成するステップと、（ｖｉ）ファームウェアが、ゲスト・ステート５２の変更またはゲスト・メモリ２２の変更あるいはその両方の変更を実行するステップと、を含む。
【００５６】
この包括的な手法の具体的な特徴を、以下により詳細に記載する。
【００５７】
ゲスト２０に、ならびにゲスト・キー２４によって暗号化されたゲスト・ステート５２およびゲスト・メモリ２２に関連付けられた割り込みまたは命令インターセプションが発生する場合、この割り込みまたは命令インターセプションに関連付けられた第１および第２のファームウェア・サービスが、ゲスト・キー２４によって暗号化されキャッシュ５６において復号されるゲスト・ステート５２およびゲスト・メモリ２２、ならびに（暗号化されていない）ハイパーバイザ・メモリにアクセスすることになる。どちらのサービスも、このメモリ２２をキャッシュ５６に転送させ、これによってメモリ２２をゲスト・キー２４を使用して復号させることで、ゲスト２０のゲスト・メモリ２２を読み取ることが可能である。ファームウェア・サービスは、キャッシュ５６からファームウェア・サービス専用のメモリに、またはハイパーバイザ３０に、暗号化されていないデータを転送することができる。第２のファームウェア・サービスは、その専用メモリまたはハイパーバイザ・メモリから暗号化されたゲスト・メモリ２２に関連付けられたキャッシュ領域に、暗号化されていないデータを転送し、次いでゲスト・キー２４を使用してキャッシュ領域の内容を暗号化しながら、暗号化されたゲスト・メモリ２２にこのキャッシュ領域の内容を転送することが可能である。
【００５８】
ＣＰＵ２１６の仮想化環境は拡張され、ＣＰＵ２１６がゲスト２０のコンテキストにおいて動作する場合、ＣＰＵ２１６がゲスト・メモリ２２を復号または暗号化し、暗号化されていないメモリ範囲を介してゲスト２０が外部と通信することを可能にし、ゲスト・メモリ２２の暗号化されたページをハイパーバイザ３０がページングする。
【００５９】
ゲスト２０のセキュアな展開および実行は、ＣＰＵ２１６のキー・ストア２８に転送するために、ＣＰＵ２１６の秘密キー２６に関連付けられた公開キー３２によって暗号化されたゲスト・キー２４をゲスト２０に準備すること、ＣＰＵ２１６に格納されており、暗号化されたゲスト・キー２４を復号するのに使用される秘密キー２６をＣＰＵ２１６に準備すること、ならびにＣＰＵ２１６がゲスト２０のコンテキストにおいてゲストまたはファームウェアのコードを動作させる間に、ゲスト・キー２４が、ゲスト・メモリ２２を暗号化および復号するのに使用されること、をさらに含む。
【００６０】
ブート・イメージの生成および展開プロセスは、ゲスト２０のためにクライアントまたは顧客がブート・イメージを生成すること、ブート・イメージをゲスト・キー２４によって暗号化すること、暗号化されたブート・イメージをブート・ディスクに転送すること、ハイパーバイザ３０がゲスト２０の暗号化されたブート・イメージをゲスト・メモリ２２にロードすること、およびＣＰＵ２１６のレベルで仮想マシンとしてゲスト２０の実行を開始すること、を含む。
【００６１】
ブート・イメージのブート・プロセスは、ＣＰＵ２１６がゲスト２０のコンテキストにある間に、ゲスト・メモリ２２上で実行される仮想マシンにおける実行スレッドがクリア・テキストに復号されること、ならびにＣＰＵ２１６がゲスト２０のコンテキストおよびゲスト・ステート５２にある間にゲスト・メモリ２２が復号され、ゲスト・メモリ２２およびゲスト・ステート５２の両方は、ハイパーバイザ３０または他のゲストによるアクセスから保護されること、を含む。
【００６２】
ゲスト２０のさらなる実行は、ＣＰＵ２１６の仮想化機能３４を拡張して、ゲスト２０のコンテキストにおいてゲスト・メモリ２２の暗号化された領域が書き込まれるときにゲスト・メモリ２２を暗号化すること、およびゲスト２０のコンテキストにおいてゲスト・メモリ２２の暗号化された領域が読み取られるときにゲスト・メモリ２２を復号すること、を含み、ゲスト・メモリ２２およびゲスト・レジスタの暗号化された領域は、暗号化された形態においてのみハイパーバイザ３０からアクセス可能である。
【００６３】
ゲスト２０とハイパーバイザ３０との対話は、ゲスト・イベントに関連付けられたゲスト・メモリ２２またはレジスタの暗号化された範囲が、復号された形態においてハイパーバイザ３０からアクセス不可とされること、および、アクセス・メソッドによって、ＣＰＵ２１６の仮想化機能３４をゲスト・イベントに関連付けられた特有なゲスト・データに拡張すること、をさらに含む。
【００６４】
ゲスト２０のＩ／Ｏプロセスは、ゲスト・メモリ２２の暗号化された領域の外部に、ゲスト２０のＩ／ＯバッファおよびＩ／Ｏ制御構造のための暗号化されていないメモリ領域を定義すること、ゲスト・メモリ２２の暗号化されていない領域を使用して、ゲスト２０によるＩ／Ｏプロセスを開始すること、ＣＰＵ２１６の仮想化機能３４がゲスト・イベントを生成すること、ならびにハイパーバイザ３０が、ゲスト・イベントの理由を読み取り、Ｉ／Ｏプロセスを実行すること、をさらに含む。
【００６５】
さらに、ページング・プロセスは、ハイパーバイザ３０がゲスト・メモリ２２のページをページアウトすること、ページアウトしたページへのアクセスの試みがあるとページ・フォールトを提供することであって、ページ・フォールトは、ハイパーバイザ３０のページアウト動作がページ・フォールトを引き起こしたかどうかをハイパーバイザ３０に示す、提供すること、およびハイパーバイザ３０をトリガして、ゲスト・メモリ２２に対するページイン・プロセスを実行すること、によって特徴付けられる。
【００６６】
チェック・プロセスによってゲストの完全性をさらにチェックする。このチェック・プロセスは、チェック・プロセスがゲスト・キー２４を認識するステップと、ゲスト２０が、ゲスト・メモリ２２からクリア・テキストのメモリ内容を読み取り、ゲスト・メモリ２２の任意の範囲をセキュアな通信パスを介してチェック・プロセスに転送するステップと、ハイパーバイザ３０にゲスト・メモリ２２の同じメモリ範囲を要求し、範囲をチェック・プロセスに転送するステップと、ゲスト２０から得られたメモリ内容を、ハイパーバイザ３０から得られたメモリ内容を復号した結果と比較するステップと、２つのメモリ範囲の内容に応じて比較結果を送るステップと、を含み、比較プロセスの結果は、比較結果がゼロに等しい場合が肯定であり、その他の場合が否定である。
【００６７】
図４において、ハイパーバイザ３０およびＣＰＵ２１６の観点から、本発明の一実施形態により動作する暗号化されたゲストを実行させるための包括的なフローチャートを示す。図４および図５は、フローチャートにおいて、図２および図３の図に定めた対象を参照しており、そのため、使用される参照番号も図２および図３の対象を参照している。ステップＳ４１０で、暗号化されたゲスト２０の動作を開始し、ここで、ハイパーバイザ３０が、暗号化されたゲスト・キー２４と併せて初期プログラム・ローダ（ＩＰＬ）デバイスから暗号化されたゲスト・イメージを読み取る。次にステップＳ４２０において、ハイパーバイザ３０が、暗号化されたゲスト・イメージをゲスト・メモリ２２に格納する。ステップＳ４３０において、ハイパーバイザ３０が、暗号化されたゲスト・キー２４を含む初期のゲスト・ステート５２を準備する。このように、ステップＳ４１０からＳ４３０は、ハイパーバイザに制御されるシステム１０においてゲスト２０を初期化するために働く。ステップＳ４４０において、セキュアなゲスト２０の仮想マシンが、現在のゲスト・ステート５２に従って始動される。次にステップＳ４５０において、ＣＰＵ２１６が、現在のゲスト・ステート５２に示されるようにセキュアなゲスト・コンテキスト４２においてセキュアなゲスト２０を動作させる。ステップＳ４６０において、割り込みまたは命令インターセプションの形でゲスト・イベントが発生する場合、ゲスト２０は、この割り込みまたはインターセプションにより、更新されたゲスト・ステート５２を有するゲスト・コンテキスト４２を抜ける。ここで、ハイパーバイザ３０は、ステップＳ４７０において、セキュアなゲスト２０からデータを読み取るために第１のファームウェア・サービスを使用して、またはセキュアなゲスト２０にデータを書き込むために第２のファームウェア・サービスを使用して、割り込みまたはインターセプションをハンドルすることが可能である。
【００６８】
概して、第１のファームウェア・サービスがトリガされ、（ｉｉ）ファームウェア７０が、ゲスト・イベントに関連付けられた情報を処理し、ゲスト・ステート５２およびゲスト・メモリ２２の情報のサブセットのみを復号された形態でハイパーバイザ３０に提示していること、ならびに（ｉｉｉ）ファームウェア７０が、ハイパーバイザ３０に送信されていない情報の部分を保持していること、をもたらすことができる。さらに、（ｉｖ）受信した情報のサブセットに基づき、ハイパーバイザ３０は、第２のファームウェア・サービスをトリガし、（ｖ）ゲスト２０のステートの変更またはメモリの変更あるいはその両方の変更を生成し、（ｖｉ）暗号化された形態でゲスト・メモリ２２におけるゲスト・イベントに関連付けられたステートの変更またはメモリの変更あるいはその両方の変更を実行することができる。
【００６９】
セキュアなゲスト２０を終える場合、分岐Ｓ４８０において、全体のプロセスが終了する。セキュアなゲスト２０を終えない場合、ステップＳ４４０へのループが閉じ、ハイパーバイザ３０がセキュアなゲスト２０を再度始動させる。
【００７０】
図５において、本発明の一実施形態により動作する暗号化されたゲストによるインターセプション・ハンドリングのための詳細なフローチャートを示す。ゲスト・イベントによってステップＳ５１０が開始され、ハイパーバイザ３０によるインタープリテーションまたはサポートを要求する命令、例えば、ハイパーバイザ３０によって通常は提供されるシステム環境パラメータを格納するための命令を、セキュアなゲスト２０が発行すること、がもたらされる。次のステップＳ５２０において、仮想化機能３４の実行が、ゲスト・コンテキスト４２を抜け、ＣＰＵ内部仮想化コードにイニシアティブを渡す。次いでステップＳ５３０において、ＣＰＵ内部仮想化コードは、ゲスト２０の終了の理由を検出する。例えば、システム環境パラメータを格納するための命令を識別する。ステップＳ５４０において、ＣＰＵ内部仮想化コードは、ゲスト２０の終了の理由に従って、ハイパーバイザ３０が入出力パラメータにアクセスするためのハンドル(handle)を準備する。例えば、要求された情報のための格納位置をハンドルに関係付ける。次にステップＳ５５０において、ＣＰＵ内部仮想化コードは、インターセプションを処理するのに必要ではない実行ステートの部分をマスクし、ハイパーバイザ３０にイニシアティブを戻し、ゲスト２０の終了、および入出力パラメータ・ハンドルのヒントを示す。例えば、レジスタおよびコンテキストのデータを、例えば暗号化することによってハイパーバイザ３０から隠す。あるいは、ステップＳ５２０からＳ５５０におけるＣＰＵ内部仮想化コードは、第１のファームウェア・サービスとして実装されてもよい。次に、ステップＳ５６０において、ＣＰＵ内部仮想化コードから理由表示を読み取ることによって、ハイパーバイザ３０は、ゲスト２０の終了の理由を検出する。例えば、システム環境パラメータを格納するための仮想サーバの要求を識別するための理由コードを読み取る。ハイパーバイザ３０は、ステップＳ５７０において（必要であれば繰り返し）、ファームウェア・サービス（例えば、第１のファームウェア・サービス）をトリガして、入出力パラメータと共に機能し、ゲスト２０の終了を処理する。これを実行するために、ハイパーバイザ３０は、処理に必要なメモリ２３０およびレジスタの内容を参照するための手段として、事前に設定したハンドルを使用する。例えば、ハイパーバイザ３０は、受信したハンドルを使用して、ファームウェア・サービス（例えば、第２のファームウェア・サービス）を介して仮想サーバのメモリにシステム環境パラメータを格納する。
【００７１】
このように、図５における暗号化されたゲストのインターセプション・ハンドリングのための詳細なフローチャートにおいて、ハイパーバイザに制御されるシステム１０におけるゲスト・イベントを処理するために第１および第２のファームウェア・サービスがどのように使用されるか、（ｉｉ）ファームウェア７０が、ゲスト・イベントに関連付けられた情報をどのように処理し、情報のサブセットのみを復号された形態でハイパーバイザ３０にどのように提示するか、ならびに、（ｉｉｉ）ファームウェア７０が、情報の部分を保持していること、および（ｉｖ）受信した情報のサブセットに基づいて、第２のファームウェア・サービスがトリガされ得ること、が記載される。
【００７２】
次に、ステップＳ５８０において、ハイパーバイザ３０は、適合するＣＰＵ命令を発行することによって仮想化機能３４の実行を再開し、ステップＳ５９０まで、ＣＰＵ内部仮想化コードは、ゲスト２０の過去の終了からハンドルをクリアし、仮想化機能３４が実行するための仮想サーバの内容をマスク解除し、仮想サーバの実行を開始する。
【００７３】
したがって、ゲスト２０のステートの変更またはメモリの変更あるいはその両方の変更は、暗号化された形態でゲスト・メモリ２２において生成および実行され得る。
【００７４】
ここで図６を参照すると、データ処理システム２１０の一例の概略が示される。データ処理システム２１０は、適切なデータ処理システムの単なる１つの例に過ぎず、本明細書に記載される本発明の実施形態の使用または機能の範囲に関して何らかの限定を示唆するようには意図されていない。ともかく、データ処理システム２１０は、実装されることが可能であり、または本明細書において上述した機能のいずれかを実行することが可能であり、あるいはその両方が可能である。
【００７５】
データ処理システム２１０中には、多くの他の汎用または専用コンピューティング・システム環境または構成で動作可能なコンピュータ・システム／サーバ２１２がある。コンピュータ・システム／サーバ２１２と共に使用するのに適切であり得る周知のコンピューティング・システム、環境、または構成、あるいはこれらの組合せの例は、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、セット・トップ・ボックス、プログラム可能な消費者向け電子機器、ネットワークＰＣ、マイクロコンピュータ・システム、メインフレーム・コンピュータ・システム、およびこれらのシステムまたはデバイスのいずれかを含む分散クラウド・コンピューティング環境などを含むが、これらに限定されない。
【００７６】
コンピュータ・システム／サーバ２１２は、コンピュータ・システムによって実行されるプログラム・モジュールなど、命令を実行可能なコンピュータ・システムの全般的な文脈で記載され得る。概して、プログラム・モジュールは、特定のタスクを実行する、または特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造などを含むことができる。コンピュータ・システム／サーバ２１２は、分散クラウド・コンピューティング環境において実行されてよく、ここで、通信ネットワークを介してリンクされるリモートの処理デバイスによってタスクが実行される。分散クラウド・コンピューティング環境において、プログラム・モジュールは、メモリ・ストレージ・デバイスを含むローカルおよびリモート両方のコンピュータ・システム・ストレージ媒体に配置されてよい。
【００７７】
図６に示されるように、データ処理システム２１０におけるコンピュータ・システム／サーバ２１２は、汎用コンピューティング・デバイスの形態で示される。コンピュータ・システム／サーバ２１２のコンポーネントは、１つまたは複数のプロセッサまたはＣＰＵ２１６と、システム・メモリ２２８と、システム・メモリ２２８を含む様々なシステム・コンポーネントをＣＰＵ２１６に接続するバス２１８とを含むことができるが、これらに限定されない。
【００７８】
バス２１８は、メモリ・バスまたはメモリ・コントローラ、周辺機器用バス、アクセラレーテッド・グラフィクス・ポート、および様々なバス・アーキテクチャのいずれかを使用するプロセッサまたはローカル・バスを含むいくつかのタイプのバス・アーキテクチャのいずれかの１つまたは複数を表す。限定ではなく例として、このようなアーキテクチャは、業界標準アーキテクチャ（ＩＳＡ）バス、マイクロ・チャネル・アーキテクチャ（ＭＣＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション（ＶＥＳＡ）ローカル・バス、およびペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）バスを含む。
【００７９】
コンピュータ・システム／サーバ２１２は、典型的には、様々なコンピュータ・システム可読媒体を含む。このような媒体は、コンピュータ・システム／サーバ２１２によってアクセス可能な任意の利用可能な媒体であってよく、揮発性媒体と不揮発性媒体、リムーバブル媒体と非リムーバブル媒体を共に含む。
【００８０】
システム・メモリ２２８は、ランダム・アクセス・メモリ（ＲＡＭ）２３０またはキャッシュ・メモリ２３２あるいはその両方などの揮発性メモリの形態で、コンピュータ・システム可読媒体を含むことができる。コンピュータ・システム／サーバ２１２は、他のリムーバブル／非リムーバブルな、揮発性／非揮発性の、コンピュータ・システム・ストレージ媒体をさらに含むことができる。例のみとして、ストレージ・システム２３４は、非リムーバブル不揮発性磁気媒体（図示せず、典型的には「ハード・ドライブ」と呼ばれる）から読み取り、ここに書き込むために提供され得る。図示されていないが、リムーバブル不揮発性磁気ディスク（例えば「フロッピー（Ｒ）ディスク」）から読み取り、ここに書き込む磁気ディスク・ドライブ、およびＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭなどのリムーバブル不揮発性光ディスクから読み取り、ここに書き込む光ディスク・ドライブ、または他の光媒体が提供され得る。このような例において、それぞれは、１つまたは複数のデータ媒体インターフェースによってバス２１８に接続され得る。以下にさらに示され記載されるように、メモリ２２８は、本発明の実施形態の機能を実行するように構成されたプログラム・モジュールのセット（例えば、少なくとも１つ）を有する少なくとも１つのプログラム製品を含むことができる。
【００８１】
プログラム・モジュール２４２のセット（少なくとも１つ）を有するプログラム／ユーティリティ２４０は、オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データと同様に、限定ではなく一例として、メモリ２２８に格納してよい。オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データ、またはいくつかのこれらの組合せのそれぞれは、ネットワーキング環境の実装を含むことができる。プログラム・モジュール２４２は、概して、本明細書に記載するような本発明の実施形態の機能または方法あるいはその両方を実行する。コンピュータ・システム／サーバ２１２は、キーボード、ポインティング・デバイス、ディスプレイ２４２などの１つまたは複数の外部デバイス２１４、ユーザにコンピュータ・システム／サーバ２１２との対話を可能にさせる１つまたは複数のデバイス、またはコンピュータ・システム／サーバ２１２に１つまたは複数のコンピューティング・デバイスとの対話を可能にさせる任意のデバイス（例えば、ネットワーク・カード、モデムなど）、あるいはこれらの組合せと通信することもできる。このような通信は、入力／出力（Ｉ／Ｏ）インターフェース２２２を介して行うことができる。さらにまた、コンピュータ・システム／サーバ２１２は、ネットワーク・アダプタ２２０を介して、ローカル・エリア・ネットワーク（ＬＡＮ）、通常のワイド・エリア・ネットワーク（ＷＡＮ）、または公衆ネットワーク（例えば、インターネット）、あるいはこれらの組合せなど、１つまたは複数のネットワークと通信することができる。上述のように、ネットワーク・アダプタ２２０は、バス２１８を介して、コンピュータ・システム／サーバ２１２の他のコンポーネントと通信する。図示されていないが、他のハードウェア・コンポーネントまたはソフトウェア・コンポーネントあるいはその両方が、コンピュータ・システム／サーバ２１２と併せて使用され得ることを理解されたい。例には、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、ＲＡＩＤシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが含まれるが、これらに限定されない。
【００８２】
図面におけるブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関して、ブロック図の各ブロックは、指定された論理機能を実装するための１つまたは複数の実行可能な命令を含むモジュール、セグメント、またはコードの部分を表すことができる。いくつかの代替的な実装において、ブロックに示される機能は、図面に示される以外の順序で行うことができることにも留意されたい。例えば、連続して示される２つのブロックは、付随する機能に応じて、実際には、実質的に同時に実行されてよく、またはブロックが逆順で実行されることがあってもよい。ブロック図の各ブロック、ブロック図のブロックの組合せは、指定された機能もしくは動作を行う特定目的のハードウェアに基づくシステム、または特定目的のハードウェアとコンピュータ命令との組合せによって実装され得ることにも留意されたい。
【図１】
0006347831.tif 000002
【図２】
0006347831.tif 000003
【図３】
0006347831.tif 000004
【図４】
0006347831.tif 000005
【図５】
0006347831.tif 000006
【図６】
0006347831.tif 000007