(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0006】
[0011] 本明細書では、仮想マシン用のエントロピー・プールについて論ずる。コンピューティングデバイスにおけるハードウェア・コンポーネントに基づくエントロピー・プールが、そのコンピューティングデバイスのオペレーティング・システムによって発生され、更新される。また、ゲスト・オペレーティング・システムを実行する仮想マシンも、このコンピューティングデバイス上で実行することができる。ゲスト・オペレーティング・システムは、ホスト・オペレーティング・システムのエントロピー・プールに少なくとも部分的に基づいて発生するエントロピー・プールを有し、ゲスト・オペレーティング・システムが仮想マシンにおいて実行していても、ハードウェア・コンポーネントに少なくとも部分的に基づいて、ゲスト・オペレーティング・システムにエントロピー・プールを供給する。
【0007】
[0012] 加えて、シーケンス・カウンター値を、ゲスト・オペレーティング・システムによって維持することができる。ゲスト・オペレーティング・システムのコピーまたはクローンが作られる毎に、ゲスト・オペレーティング・システムの内の1つのシーケンス・カウンター値を増加させる。加えて、ゲスト・オペレーティング・システムのエントロピー・プールに基づく値が得られる毎に、この得られた値と、この値が得られた時点におけるゲスト・オペレーティング・システムの現シーケンス・カウンター値とを格納する。ゲスト・オペレーティング・システムのエントロピー・プールに基づく値を用いるとき、その値について格納されているシーケンス・カウンター値を、ゲスト・オペレーティング・システムの現シーケンス・カウンター値と比較し、2つのカウンター値が同一である場合にのみ、その値を用いる。
【0008】
[0013]
図1は、1つ又は複数の実施形態にしたがって仮想マシン用のエントロピー・プールを実現するコンピューティングデバイスの一例100を示すブロック図である。コンピューティングデバイス100は、種々の異なるタイプのデバイスであることが可能である。例えば、コンピューティングデバイス100は、デスクトップ・コンピューター、移動局、ネットブック、娯楽機器、ディスプレイ・デバイスに通信状態で結合されているセット・トップ・ボックス、テレビジョン、セルラまたはその他のワイヤレス・フォン、ゲーム・コンソール、自動車用コンピューター等とすることができる。このように、コンピューティングデバイス100は、大量のメモリーおよびプロセッサー・リソースを有する完全なリソース・デバイス(例えば、パーソナル・コンピューター、ゲーム・コンソール)から、限られたメモリーおよび/またはプロセッサー・リソースを有する低リソース・デバイス(例えば、従前からのセット・トップ・ボックス、ハンド・ヘルド・ゲーム・コンソール)までの範囲にわたることができる。
【0009】
[0014] コンピューティングデバイス100は、ホスト・オペレーティング・システム02および仮想マシン・マネージャー104を含む。ホスト・オペレーティング・システム102は、1つ又は複数のコンポーネント108によって設けられる機能へのアクセスを管理する。コンポーネント108は、種々の異なる入力/出力(I/O)コンポーネントおよびその他のコンポーネントまたはデバイスとすることができる。例えば、コンポーネント108は、メモリー・コンポーネント、記憶デバイス、通信コンポーネント等の内1つ又は複数を含むことができる。仮想マシン・マネージャー104を含む、コンピューティングデバイス100上で実行する種々のその他のコンポーネントまたはモジュールは、このようなコンポーネントまたはモジュールがコンポーネント108に直接アクセスできなくても、ホスト・オペレーティング・システム102によって管理されるこの機能にアクセスすることができる。
【0010】
[0015] また、ホスト・オペレーティング・システム102は、エントロピー・プール10も含む。一般に、エントロピー・プールとは、コンピューティングデバイス100にランダム性のソース(source of randomness)を提供する1組のデータまたはビットのことである。このエントロピー・プールは、1つ又は複数のエントロピー・ソースから収集されたデータに基づいて発生され、乱数発生器および/またはその他のコンポーネントによって、ランダム性のソースとして引き出される。
【0011】
[0016] 1つ又は複数の仮想マシン(VM)マネージャーをホスト・オペレーティング・システム上で実行することができる。仮想マシン・マネージャーは、1つ又は複数の追加のプログラムがコンピューティングデバイス100上で実行することを可能にする。これらのプログラムは、各々、ゲスト・オペレーティング・システムと呼ばれる、オペレーティング・システムであることができ、あるいは他のプログラムとすることもできる。仮想マシン・マネージャーは、ゲスト・オペレーティング・システムに、ゲスト・オペレーティング・システムが実行する仮想化ハードウェア・システムを提示する。したがって、仮想化ハードウェア・システムにおいて実行するゲスト・オペレーティング・システムも、仮想マシンと呼ばれる。ゲスト・オペレーティング・システムは、多くの場合そのハードウェア・リソースが仮想化されていることを知らずに、この仮想化ハードウェア・コンポーネント上で実行する。仮想マシンは、種々の使用場面をサポートし、I/Oコンポーネントをゲスト・オペレーティング・システムに異なる方法で(例えば、エミュレーション、合成、仮想、パススルー(passthrough)、異なるコンポーネントとして、異なる通信プロトコルを用いて等)提示させることを含む。
【0012】
[0017]
図1において、仮想マシン・マネージャー104は、仮想マシン制御モジュール120、および1つ又は複数の仮想化コンポーネント122を含む。仮想マシン制御モジュール120は、ゲスト・オペレーティング・システム132と通信する、仮想化ハードウェア・システムを管理する。仮想化コンポーネント122は、仮想マシン制御モジュール120によってゲスト・オペレーティング・システム132にハードウェア・コンポーネントとして提示される、仮想化ハードウェア・コンポーネントである。仮想化コンポーネント122は、コンポーネント208と同じタイプのコンポーネントであることができ、または代わりに異なるタイプのコンポーネントとすることもできる。ゲスト・オペレーティング・システム132は、ゲスト・オペレーティング・システム132がコンピューティングデバイス100の実在するハードウェアと通信しているかのように、制御モジュール120および/または仮想化コンポーネント122と通信する。本明細書では、ゲスト・オペレーティング・システム132を参照しながらコンピューティングデバイス100について論じるが、代わりに、オペレーティング・システム以外の他のプログラムを仮想マシンにおいて実行することもできる。
【0013】
[0018] ゲスト・オペレーティング・システム132は、乱数発生器134およびエントロピー・プール136を含む。本明細書では、エントロピー・プール136を、乱数発生器134によって用いられるものとして論ずるが、エントロピー・プール136は、代わりに、ゲスト・オペレーティング・システム132の他のコンポーネントが用いることもできることは認められてしかるべきである。乱数発生器134は、真の乱数発生器を真似るまたは近似するように設計された決定論的システムである。したがって、乱数発生器134は、擬似乱数発生器と呼ぶこともできる。乱数発生器134は、種々の異なる方法の1つ又は複数で乱数を発生することができる。1つ又は複数の実施形態では、乱数発生器134は、エントロピー・プール136から得られるシード値と呼ばれるデータに基づいて乱数を発生する。乱数発生器134は、セキュア・ハッシュ・アルゴリズム(SHA)関数(例えば、SHA−512)、標準的な対称暗号アルゴリズム(例えば、高度暗号規格(AES))等の内の1つというような、種々の異なるアルゴリズムをシード値に適用して、乱数を得ることができる。
【0014】
[0019] エントロピー・プール(例えば、エントロピー・プール136またはエントロピー・プール110)として格納されるデータは、1つ又は複数のエントロピー・ソースからの値に基づいて発生される。エントロピー・ソースとは、ある量のランダム性を有するデータまたは値の発生源である。種々の異なるソースを、エントロピー・プールのエントロピー・プールとして用いることができる。例えば、種々のシステム・クロックまたはタイマー、どれくらいのページ・フォールトが発生したか、どれくらいの空きRAMが利用可能か、占有されているディスク・ドライブ空間、システム・ルックアサイド情報、システム割り込み情報等のようなシステム情報は、各々、エントロピー・ソースとなることができる。受信または送信されたパケット数、ネットワーク・パケット・タイミング、ネットワーク・パケットを受信した元のアドレス等のような、ネットワーク情報も、各々、エントロピー・ソースとなることができる。マウス移動のタイミングまたは内容(content)、キーストローク、音声入力、およびその他の同様のイベントも、各々、エントロピー・ソースとなることができる。
【0015】
[0020] また、コンピューティングシステム上にある既存のハードウェア・ソースも、エントロピー・ソースとして役割を果たすことができる。ソースが差し込まれた(または差し込まれていない)音響入力または映像入力からのデータも、エントロピー・ソースとなることができる。ディスク・ドライブは、無秩序な空気の乱れによって、その回転速度に小さなランダム変動を有することがあり、この空気の乱れを、低レベル・ディスク・シーク時間計器によって測定し、エントロピー・ソースとして用いることができる。ハードウェア・ドライブの連番およびBIOSファームウェア・テーブルを含む、一意の(またはほぼ一意の)ハードウェアIDおよび連番を、エントロピー・ソースとして用いることができる。
【0016】
[0021] デバイス100に含まれる、またはこれに結合されているハードウェア乱数発生器も、エントロピー・ソースとなることができる。ハードアウェア乱数発生器とは、乱数出力を生成する特殊目的ハードアウェア・コンポーネントを指す。例えば、このようなハードウェア乱数発生器は、電子回路が発生し増幅したノイズ、環境騒音、半導体における量子化効果、放射性崩壊のタイミング等に基づくことができる。
【0017】
[0022] エントロピー・ソースからのデータは、種々の異なる方法でエントロピー・プール(例えば、エントロピー・プール110または136)に組み入れることができる。1つ又は複数の実施形態では、エントロピー・ソースからのデータをハッシュしてハッシュ値を発生し、これをエントロピー・プールに組み入れる。または、代わりに、エントロピー・ソースからのデータ自体をエントロピー・プールに組み入れることもできる。このデータのエントロピー・プールへの組み入れは、例えば、データをエントロピー・プールに連結する、データの少なくとも一部をエントロピー・プールの1つ又は複数の一に挿入する等によって、行うことができる。
【0018】
[0023] ホスト・オペレーティング・システム102は、1つ又は複数のエントロピー・ソースからデータを入手し、入手したデータをエントロピー・プール110に組み入れる。ホスト・オペレーティング・システム102は、コンポーネント108に基づいてデータを入手する。したがって、エントロピー・プール110は、ハードウェアのエントロピー・ソースに基づく。
【0019】
[0024] エントロピー・プール136は、ゲスト・オペレーティング・システム132に含まれており、ゲスト・オペレーティング・システム132は仮想マシンにおいて実行している。仮想マシン制御モジュール120は、エントロピー・プール110にアクセスし、エントロピー・プール110からのデータの少なくとも一部を、エントロピー・プール136に利用可能にする。エントロピー・プール110からのデータは、種々の異なる方法で、エントロピー・プール106に利用可能にすることができる。これについては、以下で更に詳しく論ずる。このように、エントロピー・プール136が仮想マシンにおけるゲスト・オペレーティング・システムの一部であっても、エントロピー・プール136はハードウェア・エントロピー・ソースに基づくことに変わりはない。
【0020】
[0025] 1つ又は複数の実施形態では、ホスト・オペレーティング・システム102が、エントロピー・プール110からのデータをゲスト・オペレーティング・システム132に、仮想化コンポーネント122を通じて供給する。ゲスト・オペレーティング・システム132がブートされるとき、または実行し始めるとき、ホスト・オペレーティング・システム102はデータをエントロピー・プール110から入手する。このデータを仮想化コンポーネント122のメモリー空間にマッピングすることによってというようにして、このエントロピー・プール110から入手したデータを仮想化コンポーネント122に格納する。一方、仮想化コンポーネント122は、ゲスト・オペレーティング・システム132によってアクセスされ、エントロピー・プール136として用いられる(または、エントロピー・プール136に追加される)。したがって、ゲスト・オペレーティング・システム132は、ハードウェア・エントロピー・ソースに基づくエントロピー・プール136を有することになる。
【0021】
[0026] エントロピー・プール110からのデータの内、ホスト・オペレーティング・システム102によって供給される量は、可変にすることができる。例えば、エントロピー・プール110からのデータの内、ホスト・オペレーティング・システム102によって供給される量は、所定数のビット、エントロピー・プール110の所定の割合または所定の量、エントロピー・プール110における全てのデータ等とすることができる。
【0022】
[0027] 1つ又は複数の実施形態では、エントロピー・プール110からのデータが格納されている仮想化コンポーネント122は、ゲスト・オペレーティング・システム132によってアクセスされるBIOS(基本入力/出力システム)テーブルである。ホスト・オペレーティング・システム102は、エントロピー・プール110からのデータを、仮想マシン・マネージャー104の特定のメモリー空間にマッピングする。このメモリー空間は、ゲスト・オペレーティング・システム132が用いるBIOSテーブルが格納されているメモリー空間である。したがって、BIOSテーブルに通例含まれるデータに加えて、エントロピー・プール110からのエントロピー・データもBIOSテーブルに含まれる。しかしながら、BIOSテーブルの使用は一例に過ぎないこと、そしてエントロピー・プール110からのデータは、種々の異なる仮想化コンポーネントに格納できることは、認められてしかるべきである。
【0023】
[0028] エントロピー・プール110からのデータを格納する仮想化コンポーネント122のメモリー空間は、通例、仮想化コンポーネント122またはゲスト・オペレーティング・システム132が適正に機能するためにあり、それ以外には用いられないまたは必要とされない、仮想化コンポーネント122の一部である。例えば、ゲスト・オペレーティング・システム132が適正に機能することには無関係なBIOSテーブルの一部は、エントロピー・プール110からのデータを格納するBIOSテーブルの一部として用いることができる。
【0024】
[0029] ホスト・オペレーティング・システム102は、コンポーネント108に基づいてエントロピー・データを収集し続け、このエントロピー・データをエントロピー・プール110に追加する。このホスト・オペレーティング・システム102によるエントロピー・データの収集は、ゲスト・オペレーティング・システム132によるエントロピー・データの収集および/または使用には無関係に継続する。
【0025】
[0030] ゲスト・オペレーティング・システム132がブートされたときにエントロピー・プール110からのデータをゲスト・オペレーティング・システム132に供給することに加えて、あるいはその代わりに、ゲスト・オペレーティング・システム132が実行している間に、エントロピー・プール110からのデータをゲスト・オペレーティング・システム132に供給することもできる。このような状況では、仮想マシン制御モジュール120は、ゲスト・オペレーティング・システム132とホスト・オペレーティング・システム102との間における通信インターフェースをサポートし、エントロピー・プール110からのデータを、エントロピー・プール136に供給することを可能にする。これによって、ゲスト・オペレーティング・システム132がブートされた後に、エントロピー・プール136にあるデータを、ハードウェア・エントロピー・ソースに基づいて更新することが可能になる。
【0026】
[0031] 1つ又は複数の実施形態では、ゲスト・オペレーティング・システム132は、追加のエントロピーを望むときに、それを要求する。ゲスト・オペレーティング・システム132は、規則的な間隔または不規則な間隔で、エントロピー・プール136において利用可能なデータが閾値量未満に落ちたという判断に基づいて等というように、種々の異なる方法で、いつ追加のエントロピーが望まれるか判断することができる。追加のエントロピーが望まれるとき、ゲスト・オペレーティング・システム132は、追加のエントロピーを求める要求をホスト・オペレーティング・システム102に送る(仮想マシン・マネージャー104を通じて)。このような要求に応答して、ホスト・オペレーティング・システム102はエントロピー・プール110から追加のデータを返す。エントロピー・プール110から返されるデータの量は、可変にすることができる。例えば、エントロピー・プール110から戻されるデータの量は、所定数のビット、ゲスト・オペレーティング・システム132によって要求されたビット数、エントロピー・プール110内にある全てのデータ等とすることができる。
【0027】
[0032] 他の実施形態では、ホスト・オペレーティング・システム132が、規則的な間隔または不規則な間隔で、エントロピー・データをゲスト・オペレーティング・システム132に送る(仮想マシン・マネージャー104を通じて)。このホスト・オペレーティング・システム102がエントロピーを送るときのタイミングは、所定の予定毎(例えば、10分毎)、エントロピー・プール110が閾値量のデータを収容したことに応答して等というように、可変とすることができる。ゲスト・オペレーティング・システム132に送られたデータは、エントロピー・プール136に格納され、ゲスト・オペレーティング・システム132が追加のエントロピーを求める要求をホスト・オペレーティング・システム102に送ることなく、望まれるときに、乱数発生器134にデータを利用可能にする。
【0028】
[0033] エントロピー・プール136の中にあるデータは、全体的にエントロピー・プール110から得ることができ、または代わりに他のエントロピー・ソースから得ることもできる。例えば、1つ又は複数の仮想化コンポーネント122を、ゲスト・オペレーティング・システム132がエントロピー・ソースとして用いることができ、このようなエントロピー・ソースから得られたデータを、エントロピー・プール136に組み入れる。
【0029】
[0034]
図2は、1つ又は複数の実施形態にしたがって、仮想マシン用のエントロピーを入手し供給するプロセスの一例200を示すフローチャートである。プロセス200は、ソフトウェア、ファームウェア、ハードウェア、またはその組み合わせで実現することができる。
図2の左側に示すプロセス200の動作は、
図1のホスト・オペレーティング・システム102のような、コンピューティングデバイスのホスト・オペレーティング・システムによって実行する。
図2の右側に示すプロセス200の動作は、
図1のゲスト・オペレーティング・システム132のような、コンピューティングデバイスの仮想マシンによって実行する。プロセス200は、1組の動作として示されているが、種々の動作ステップ(operetion of acts)を実行するために示す順序には限定されない。プロセス200は、仮想マシン用のエントロピーを入手し供給するプロセスの一例であり、本明細書には、これ以外にも、シーケンス・カウンターを用いるゲスト・オペレーティング・システムについて、異なる図面を参照した論述が含まれている。
【0030】
[0035] プロセス200において、ホスト・オペレーティング・システムは、ハードウェア・コンポーネントに基づいてエントロピー・データを収集する(ステップ202)。このエントロピー・データは、先に論じたような、種々の異なるエントロピー・ソースから収集することができる。
【0031】
[0036] ホスト・オペレーティング・システムのエントロピー・プールを、収集したエントロピー・データに基づいて更新する(ステップ204)。収集したエントロピー・データは、先に論じたような種々の異なる方法で、ホスト・オペレーティング・システムのエントロピー・プールに組み入れることができる。
【0032】
[0037] ステップ202および204は、多数回繰り返すことができ、ホスト・オペレーティング・システムは連続的に新たなエントロピー・データを収集し、この新たなエントロピー・データに基づいて、ホスト・オペレーティング・システムのエントロピー・プールを更新する。ステップ202および204におけるこの収集および更新は、ゲスト・オペレーティング・システムがゲスト・オペレーティング・システムのエントロピー・プールにアクセスしていていても、またはこれを用いていても関係なく続けることができる。
【0033】
[0038] ホスト・オペレーティング・システムは、そのホスト・オペレーティング・システムのエントロピー・プールからのデータを、ゲスト・オペレーティング・システムに供給する(ステップ206)。このエントロピー・プールからのデータは、先に論じたように、ゲスト・オペレーティング・システムがブートされるとき、および/またはゲスト・オペレーティング・システムが実行している間の他の時点において、ゲスト・オペレーティング・システムに供給することができる。
【0034】
[0039] ゲスト・オペレーティング・システムは、ホスト・オペレーティング・システムのエントロピー・プールに少なくとも部分的に基づいて、ゲスト・オペレーティング・システムのエントロピー・プールを発生する(ステップ208)。ステップ206においてホスト・オペレーティング・システムのエントロピー・プールからホスト・オペレーティング・システムによって供給されるデータは、ゲスト・オペレーティング・システムのエントロピー・プールとして用いることができ、またはこれに追加することができる。
【0035】
[0040] ゲスト・オペレーティング・システムは、ゲスト・オペレーティング・システムのエントロピー・プールにアクセスする(ステップ210)。これは、ステップ204においてホスト・オペレーティング・システムによって更新されたエントロピー・プールに、少なくとも部分的に基づく。また、任意に、エントロピー・プールは、ゲスト・オペレーティング・システムによって他のエントロピー・ソースから得られたデータを含むこともできる。
【0036】
[0041] ゲスト・オペレーティング・システムは、ゲスト・オペレーティング・システムのエントロピー・プールを、乱数発生のための基準として用いる(ステップ212)。また、ゲスト・オペレーティング・システムは、そのゲスト・オペレーティング・システムのエントロピー・プールを、他の動作(operation)のために用いることができ、および/または乱数発生以外でもエントロピーが望まれる場合に値を得るために用いることができる。
【0037】
[0042] 尚、ステップ206および208は、ゲスト・オペレーティング・システムが動作している間多数回繰り返すことができ、ゲスト・オペレーティング・システムのエントロピー・プールを、新たなエントロピー・データによって繰り返し更新できることは、注記してしかるべきである。
【0038】
[0043]
図1に戻って、仮想マシンのクローンを作ることができる状況が生ずる可能性がある。仮想マシーンのクローン作成(cloning)とは、仮想マシンを複製することを指し、仮想マシン上で実行するあらゆるアプリケーション、および仮想マシンの現在の状態を記述するデータ(例えば、ゲスト・オペレーティング・システムの種々の設定値)を含む。この複製の結果、仮想マシンの全く同一のコピーが2つできる。クローン作成は、仮想マシンが休止中(実行していない)であるときまたは仮想マシンが実行しているときというような、種々の時点で行うことができる。また、クローン作成は、スナップショットと呼ばれる、仮想マシンのコピーをセーブするために用いることもでき、コンピューティングデバイス100を、セーブされた設定に戻すことができる。クローン作成は、ユーザーからの要求、および/またはコンピューティングデバイス100における他のコンポーネントまたはモジュールからの要求に応答して行うことができる。
【0039】
[0044] しかしながら、仮想マシンのクローンを作成することができると、エントロピー・プール136に問題が生ずる虞れがある。クローンを作成した後、2つの仮想マシンが同じエントロピー・プールを有するという状況が発生する可能性があり、乱数発生器が発生する数値が再使用されるために、ランダム性が低下したり、乱数の予測が可能になることが誘発されるという結果になる可能性がある。1つ又は複数の実施形態では、異なる仮想マシンを区別するために、シーケンス・カウンターが用いられる。これについては、以下で更に詳しく論ずる。
【0040】
[0045]
図3は、1つ又は複数の実施形態にしたがって、仮想マシン用のエントロピー・プールを実現するゲスト・オペレーティング・システムの一例300を示すブロック図である。ゲスト・オペレーティング・システム300は、例えば、
図1のゲスト・オペレーティング・システム132とすることができる。ゲスト・オペレーティング・システム300は、
図1のゲスト・オペレーティング・システム132と同様に、仮想化ハードウェア・システムにおいて仮想マシンとして実行する。
【0041】
[0046] ゲスト・オペレーティング・システム300は、乱数発生器302、エントロピー・プール304、シーケンス・カウンター306、シーケンス・マネージャー・モジュール308、および数値タギング・モジュール(value tagging module)310を含む。乱数発生器302は、エントロピー・プール304に基づいて乱数を発生する。これらは、
図1の乱数発生器134およびエントロピー・プール136と同様である。
【0042】
[0047] シーケンス・カウンター306は、ゲスト・オペレーティング・システム300を、ゲスト・オペレーティング・システム300と同じファミリー・ツリー・ブランチにおいてクローン作成によって得られた他のゲスト・オペレーティング・システム(例えば、ゲスト・オペレーティング・システム300、あるいはゲスト・オペレーティング・システム300の親またはその他の先祖の子またはその他の子孫である)から区別するカウンター値である。1つ又は複数の実施形態では、シーケンス・カウンター306は数値を有するが、順序がわかっている他のリストにおける値も用いることができる。
【0043】
[0048] ゲスト・オペレーティング・システムがクローンである場合、ゲスト・オペレーティング・システムの内の1つのシーケンス・カウンター306が増加され、一方他のゲスト・オペレーティング・システムのシーケンス・カウンター306は不変のまま保持される。オペレーティング・システムのコピーの内の1つがクローン作成後に実行し続ける場合、そのオペレーティング・システムが、そのシーケンス・カウンターがその値を保持させるオペレーティング・システムとなり、それ以外の場合、いずれのオペレーティング・システムも、そのシーケンス・カウンターを増加させることができる。例えば、実行中のゲスト・オペレーティング・システムのスナップショットを撮ろうとした場合、この実行中のゲスト・オペレーティング・システムはそのシーケンス・カウンター値を保持し、一方セーブされたスナップショット・コピーは、そのシーケンス・カウンター値を増加させる(例えば、1だけ)。他の例として、休止中のゲスト・オペレーティング・システムのクローンが作られた場合、ゲスト・オペレーティング・システムの2つのコピーの内1つがそのシーケンス・カウンターを増加させ(例えば、1だけ)、一方他方はそのシーケンス・カウンター値を保持する。
【0044】
[0049] ゲスト・オペレーティング・システムの内の1つのシーケンス・カウンター306は、種々の異なる方法で増加させることができる。1つ又は複数の実施形態では、ホスト・オペレーティング・システムまたはゲスト・オペレーティング・システムのクローン作成を管理する他のコンポーネントが、ゲスト・オペレーティング・システムの内1つのシーケンス・カウンター306を増加させる。他の実施形態では、ゲスト・オペレーティング・システムの1つが、それ自体のシーケンス・カウンター306を増加させる。例えば、ホスト・オペレーティング・システムまたはゲスト・オペレーティング・システムのクローン作成を管理する他のコンポーネントは、ゲスト・オペレーティング・システムのクローンが作成されたことを示すフラグまたは他のインディケーターをセットすることができる。このフラグまたは他のインディケーターは、ゲスト・オペレーティング・システムのコピーが次にブートされたときに、それによって検出することができ、ゲスト・オペレーティング・システムにそのシーケンス・カウンター306を更新させることができる。
【0045】
[0050] シーケンス・マネージャー・モジュール308は、シーケンス・カウンター306を用いて、エントロピー・プール304に基づいて発生された値のランダム性が、クローン作成によって損なわれていないことを確認する。数値タギング・モジュール310は、エントロピー・プール304に基づいた値を発生する毎に、シーケンス・カウンター306の現在値を得る。このように発生した値の例には、乱数発生器302が発生した乱数、乱数に基づいて発生した暗号鍵等が含まれる。エントロピー・プール304に基づいた値を発生する毎に、モジュール310はその発生した値と共に、シーケンス・カウンター306の現在値を格納する。したがって、発生した各値と共に、シーケンス・カウンター値が関連付けて格納され、その値が妥当であることを示す。
【0046】
[0051] エントロピー・プール304に基づいて発生した値を用いるとき、シーケンス・マネージャー・モジュール308は、格納されているシーケンス値を読み出して、その発生した値を求める。格納されているシーケンス・カウンター値を、シーケンス・カウンター306の現在の値と比較する。格納されているシーケンス・カウンター値が、シーケンス・カウンター306の現在の値と同じである場合、エントロピー・プール304に基づいて発生した値を用いることができる。しかしながら、格納されているシーケンス・カウンター値が、シーケンス・カウンター306の現在の値とは異なる(例えば、それよりも小さい)場合、エントロピー・プール304に基づいて発生した値は、用いられることはない。
【0047】
[0052] エントロピー・プール304に基づいて発生した値を用いないことにした場合、ゲスト・オペレーティング・システム304によって新たな値を発生する。加えて、エントロピー・プール304をクリアし、発生し直す(例えば、先に論じたように、ホスト・オペレーティング・システムのエントロピー・プールに基づいて)。尚、一選択肢として、エントロピー・プール304は、ゲスト・オペレーティング・システム300に対する特定のシーケンス・カウンター値について1回しかクリアし発生し直せないようにすることができることを注記しておく。例えば、エントロピー・プール304に基づいて発生した第1の値を用いようとしたが、格納されているシーケンス・カウンター値がシーケンス・カウンター306の現在の値よりも小さいために用いない場合、エントロピー・プール304をクリアし発生し直す。エントロピー・プール304に基づいて発生した第2の値を用いようとしたが、格納されているシーケンス・カウンター値がシーケンス・カウンター306の現在の値よりも小さいために用いない場合、エントロピー・プール304は既にクリアされ発生し直されているので、第2の値を用いようとしたときのシーケンス・カウンター306の現在の値が、第1の値を用いようとしたときのシーケンス・カウンター306の現在の値と同じである場合、エントロピー・プール304を再度クリアし発生し直す必要はない。
【0048】
[0053] 例えば、安全な通信チャネルを設けるための暗号鍵として用いるために、ゲスト・オペレーティング・システムによって乱数を発生したと仮定する。更に、この暗号鍵を発生した時点において、ゲスト・オペレーティング・システムのシーケンス・カウンター値が3であると仮定する。この暗号鍵を発生したとき、数値タギング・モジュール310は、この暗号鍵に対して3であるシーケンス・カウンター値のレコードを格納する。
【0049】
[0054] この例を続けると、次いで、ゲスト・オペレーティング・システムのコピーを格納するために、スナップショットを撮ると仮定する。実行中のゲスト・オペレーティング・システムはそのシーケンス・カウンター値である3を維持するが、ゲスト・オペレーティング・システムのスナップショット・コピーのシーケンス・カウンター値は4に増加されている。実行中のゲスト・オペレーティング・システムが安全な通信チャネルを設けるためにこの暗号鍵を用い続けようとした場合、実行中のゲスト・オペレーティング・システムのシーケンス・カウンター値(3である)は、暗号鍵に対して記録されているシーケンス・カウンター値と同じであるので、この暗号鍵は、実行中のゲスト・オペレーティング・システムによって用いることができる。しかしながら、このゲスト・オペレーティング・システムのスナップショット・コピーが、実行し安全な通信チャネルを設けるためにこの暗号鍵を用いようとすると、暗号鍵に対して記録されているシーケンス・カウンター値(3である)は、実行中のゲスト・オペレーティング・システムのスナップショット・コピーのシーケンス・カウンター値(4である)よりも小さいので、暗号鍵は用いられない。
【0050】
[0055] しかしながら、エントロピー・プール304に基づいて発生した値が、暗号化および解読に用いられる鍵である場合、暗号鍵に対して記録されているシーケンス・カウンター値が、実行中のゲスト・オペレーティング・システムのスナップショット・コピーのシーケンス・カウンター値よりも小さくても、発生した値のレコードは維持される。発生した値のレコードを維持することによって、この発生した値に基づいて暗号化されたデータを解読するために、この発生した値を引き続き用いることができる。
【0051】
[0056]
図4は、1つ又は複数の実施形態にしたがって、シーケンス・カウンターを用いるゲスト・オペレーティング・システムのプロセスの一例400を示すフローチャートである。プロセス400は、
図3のゲスト・オペレーティング・システム300のような、ゲスト・オペレーティング・システムによって実行され、ソフトウェア、ファームウェア、ハードウェア、またはその組み合わせで実現することができる。プロセス400は、1組のステップとして示されており、種々の動作ステップ(operations of various acts)を実行するために示す順序には限定されない。プロセス400は、シーケンス・カウンターを用いるゲスト・オペレーティング・システムのプロセスの一例であり、本明細書には、これ以外にも、シーケンス・カウンターを用いるゲスト・オペレーティング・システムについて、異なる図面を参照した論述が含まれている。
【0052】
[0057] プロセス400では、エントロピー・プールに基づいて値を発生する(ステップ402)。ステップ402では、先に論じたように、乱数、暗号鍵等のような、種々の異なる値を発生することができる。
【0053】
[0058] プロセス400を実施するゲスト・オペレーティング・システムの現在のシーケンス・カウンター値を入手し(ステップ404)、発生した値、および現在のシーケンス・カウンター値のレコードを格納する(ステップ406)。
【0054】
[0059] 続いて、発生した値を用いることを求める要求を受ける(ステップ408)。この要求は、プロセス400を実施するゲスト・オペレーティング・システムのコンポーネントまたはモジュールから、他のコンポーネントまたはモジュールから、ユーザー等から受けることができる。この要求に応答して、発生した値と共に格納されているシーケンス・カウンター値を入手する(ステップ410)。プロセス400を実施するゲスト・オペレーティング・システムの現在のシーケンス・カウンター値も入手する(ステップ412)。
【0055】
[0060] 次いで、ゲスト・オペレーティング・システムは、ステップ412において入手した現在のシーケンス・カウンター値が、ステップ410において入手した、格納されているシーケンス・カウンター値と同じであるか否かチェックする(ステップ414)。2つの値が同じである場合、発生した値を用いることができる(ステップ416)。
【0056】
[0061] しかしながら、2つの値が同じでない場合、ゲスト・オペレーティング・システムのエントロピー・プールをクリアし、発生し直す(ステップ418)。要求された値を発生し直し(ステップ420)、この発生し直した値を用いることができる(ステップ422)。
【0057】
[0062]
図5は、1つ又は複数の実施形態にしたがって、仮想マシン用のエントロピー・プールを実装するように構成することができるコンピューティングデバイスの一例500を示す。コンピューティングデバイス500は、例えば、
図1の移動体通信デバイス100とすることができる。
【0058】
[0063] コンピューティングデバイス500は、1つ又は複数のプロセッサーまたは演算装置502、1つ又は複数のメモリーおよび/または記憶コンポーネント506を含むことができる1つ又は複数のコンピューター読み取り可能媒体504、ならびに種々のコンポーネントやデバイスが互いに通信することを可能にするバス510を含む。コンピューター読み取り可能媒体504および/または1つ又は複数のI/Oデバイス508は、コンピューティングデバイス500の一部として含めることができ、あるいは代わりに、コンピューティングデバイス500に結合することもできる。バス510は、メモリー・バスまたはメモリー・コントローラー、周辺バス、加速グラフィクス・ポート、プロセッサーまたはローカル・バス等、種々の異なるバス・アーキテクチャーを用いる、様々なタイプのバス構造の内1つ又は複数を代表する。バス510は、有線バスおよび/またはワイヤレス・バスを含むことができる。
【0059】
[0064] メモリー/記憶コンポーネント506は、1つ又は複数のコンピューター記憶媒体を代表する。コンポーネント506は、揮発性媒体(ランダム・アクセス・メモリー(RAM)のような媒体)および/または不揮発性媒体(リード・オンリー・メモリー(ROM)、フラッシュ・メモリー、光ディスク、磁気ディスク等のような媒体)を含むことができる。コンポーネント506は、固定媒体(例えば、RAM、ROM、固定ハード・ドライブ等)や、リムーバブル媒体(例えば、フラッシュ・メモリー・ドライブ、リムーバブル・ハード・ドライブ、光ディスク等)を含むことができる。
【0060】
[0065] 本明細書において論じた技法は、ソフトウェアで実現することができ、1つ又は複数の演算装置502が命令を実行する。尚、演算装置502の中、演算装置502の種々のキャッシュ・メモリーの中、デバイス500の他のキャッシュ・メモリー(図示せず)の中、他のコンピューター読み取り可能媒体上等のように、コンピューティングデバイス500の異なるコンポーネントに異なる命令を格納できることは認められてしかるべきである。加えて、コンピューティングデバイス500内において命令を格納する位置は、ときと共に変化する可能性があることも認められてしかるべきである。
【0061】
[0066] 1つ又は複数の入力/出力デバイス508は、ユーザーがコマンドおよび情報をコンピューティングデバイス500に入力することを可能にし、更に情報をユーザーおよび/または他のコンポーネントまたはデバイスに提示することも可能にする。入力デバイスの例には、キーボード、カーソル制御デバイス(例えば、マウス)、マイクロフォン、スキャナー等が含まれる。出力デバイスの例には、ディスプレイ・デバイス(例えば、モニターまたはプロジェクタ)、スピーカ、プリンター、ネットワーク・カード等が含まれる。
【0062】
[0067] 本明細書では、種々の技法をソフトウェアまたはプログラム・モジュールという一般的なコンテキストにおいて記載することができる。一般に、ソフトウェアは、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含み、特定のタスクを実行するかまたは特定の抽象データ・タイプを実現する。これらのモジュールおよび技法の実施態様は、何らかの形態のコンピューター読み取り可能媒体を通じて格納または送信することができる。コンピューター読み取り可能媒体は、コンピューティングデバイスがアクセスすることができる入手可能媒体であれば、いずれでも可能である。一例として、そして限定ではなく、コンピューター読み取り可能媒体は「コンピューター記憶媒体」および「通信媒体」を含むことができる。
【0063】
[0068] 「コンピューター記憶媒体」は、揮発性および不揮発性、リムーバブルおよび非リムーバブル媒体を含み、これらは、コンピューター読み取り可能命令、データ構造、プログラム・モジュール、またはその他のデータというような情報の記憶のため方法または技術であれば、いずれによってでも実現できる。コンピューター記憶媒体は、限定ではなく、RAM、ROM、EEPROM、フラッシュ・メモリーまたはその他のメモリー技術、CD−ROM、ディジタル・バーサタイル・ディスク(DVD)またはその他の光ストレージ、磁気カセット、磁気テープ、磁気ディスク・ストレージまたはその他の磁気記憶デバイス、あるいは所望の情報を格納するために用いることができ、しかもコンピューターがアクセスすることができる媒体であれば他のいずれでも含む。
【0064】
[0069] 「通信媒体」は、通例、コンピューター読み取り可能命令、データ構造、プログラム・モジュール、またはその他のデータを、搬送波またはその他の伝送メカニズムのような、変調データ信号において具体化する。また、通信媒体は、いずれの情報配信媒体も含む。「変調データ信号」という用語は、情報を信号内にエンコードするような様式で、その特性1つ又は複数を設定または変化させた信号を意味する。限定ではなく、一例として、通信媒体は、有線ネットワークまたは直接有線接続というような有線媒体、ならびに音響、RF、赤外線、およびその他のワイヤレス媒体というようなワイヤレス媒体を含む。前述のいずれの組み合わせも、コンピューター読み取り可能媒体の範囲に含まれる。
【0065】
[0070] 一般に、本明細書において記載した機能または技法のいずれもが、ソフトウェア、ファームウェア、ハードウェア(例えば、固定論理回路)、手動処理、またはこれらの実施態様の組み合わせを用いて実現することができる。「モジュール」および「コンポーネント」という用語は、本明細書において用いる場合、一般にソフトウェア、ファームウェア、ハードウェア、またはその組み合わせを表す。ソフトウェア実施態様の場合、モジュールまたはコンポーネントは、プロセッサー(例えば、1つまたは複数のCPU)において実行されると、指定されたタスクを実行するプログラム・コードを表す。プログラム・コードは、1つ又は複数のコンピューター読み取り可能メモリー・デバイスに格納することができる。これらの更に詳しい説明は、
図5を参照すれば見つけることができる。本明細書に記載した、仮想マシン用のエントロピー・プール技法の特徴は、プラットフォームに依存しないということであり、種々のプロセッサーを有する種々の商用コンピューティングプラットフォームにおいて、本技術を実現できることを意味する。
【0066】
[0071] 以上、構造的特徴および/または方法論的行為に特定的な文言で主題について説明したが、添付した特許請求の範囲において定められている主題は、以上に記載した特定的な特徴または行為には必ずしも限定されないことは言うまでもない。逆に、以上に記載した特定的な特徴および行為は、特許請求の範囲を実現する形態例として開示したまでである。