(57)【特許請求の範囲】
【請求項１】
コンピュータによりソフトウェア・モジュールを実行するための方法であって、
前記コンピュータのメイン・メモリにおいて少なくとも部分的にブートローダを実行するステップと、
前記ブートローダが実行されることに応じて、
ソフトウェア・モジュールの最初の組に関する要件、および
前記コンピュータのハードウェアの仕様
にアクセスするステップと、
前記最初の組の中で、前記ハードウェアの仕様に適合し、ＲＡＭディスクとして記憶され得るソフトウェア・モジュールの１つまたは複数の候補の組を決定するステップと、
最終的な組の前記ソフトウェア・モジュールをＲＡＭディスクに記憶することであって、前記最終的な組が、前記１つまたは複数の候補の組のうちの１つである、前記記憶することと、前記ＲＡＭディスクに記憶された前記ソフトウェア・モジュールを実行するように命令することとを行うステップと、
前記ＲＡＭディスクで実行されるソフトウェア・モジュールの前記最終的な組に入っていないソフトウェア・モジュールの追加の組を決定するステップと、
暗号化された前記追加の組のソフトウェア・モジュールを、その後実行するために前記コンピュータの物理的なストレージ媒体に記憶するステップとを含み、
ソフトウェア・モジュールの前記最初の組および前記最終的な組のそれぞれが、アプリケーション・コンポーネントおよびオペレーティング・システム・イメージ・コンポーネントを含む、方法。
【請求項２】
前記ソフトウェア・モジュールの前記最初の組および前記最終的な組のそれぞれが、ハードウェア・コンポーネントのドライバを更に含む、請求項１に記載の方法。
【請求項３】
前記ブートローダが、予め、前記コンピュータに接続可能なユーザ信頼デバイスに記憶され、前記方法が、前記ブートローダを実行するステップの前に、
前記ユーザ信頼デバイスを前記コンピュータに接続すると、前記ブートローダの少なくとも一部が、転送された部分をその後実行するために、前記コンピュータの前記メイン・メモリに転送されるようにするステップをさらに含む、請求項１または２に記載の方法。
【請求項４】
前記ソフトウェア・モジュールが、予め、ユーザ信頼デバイスに記憶され、前記ユーザ信頼デバイスが、前記コンピュータに接続可能であり、前記方法が、前記ソフトウェア・モジュールを前記ＲＡＭディスクに記憶する前に、
転送されたソフトウェア・モジュールをＲＡＭディスクとしてその後記憶し、実行するために、前記ユーザ信頼デバイスから前記コンピュータの前記メイン・メモリに前記最終的な組のソフトウェア・モジュールを転送するステップをさらに含む、請求項１ないし３のいずれか一項に記載の方法。
【請求項５】
前記ソフトウェア・モジュールをＲＡＭディスクに記憶することと、ＲＡＭディスクに記憶された前記ソフトウェア・モジュールを実行するように命令することとを行うステップの前に、
前記ユーザ信頼デバイスから受信された入力に従って、ソフトウェア・モジュールのいくつかの候補の組からソフトウェア・モジュールの１つの最終的な組を特定するステップをさらに含む、請求項３または４に記載の方法。
【請求項６】
前記コンピュータで実行される前記ブートローダのある部分とインタラクティブに前記ユーザ信頼デバイスで実行される前記ブートローダの他の部分とにより、ソフトウェア・モジュールの１つの最終的な組を特定する、請求項５に記載の方法。
【請求項７】
ＲＡＭディスクとして記憶され得るソフトウェア・モジュールの１つまたは複数の候補の組を決定するステップが、ソフトウェア・モジュールを優先順位付けするステップを含む、請求項１ないし６のいずれか一項に記載の方法。
【請求項８】
前記ソフトウェア・モジュールを優先順位付けするステップが、所与のセキュリティの基準に従ってソフトウェア・モジュールを優先順位付けする、請求項７に記載の方法。
【請求項９】
前記コンピュータのハードウェアの仕様にアクセスするステップが、
−  前記コンピュータの前記メイン・メモリの容量と、
−  前記コンピュータのプロセッサ・アーキテクチャと、
−  前記コンピュータのストレージ媒体の容量と、
−  仮想化がサポートされるかどうかと
のうちの１つまたは複数に関してテストを実行するステップを含み、
前記テストの少なくとも一部が、前記最初の組のソフトウェア・モジュールに論理的にリンクされ、
ＲＡＭディスクとして記憶され得るソフトウェア・モジュールの１つまたは複数の候補の組を決定するステップが、実行された前記テストの結果に従ってソフトウェア・モジュールを優先順位付けするステップを含む、請求項１ないし８のいずれか一項に記載の方法。
【請求項１０】
ＲＡＭディスクとして記憶され得るソフトウェア・モジュールの前記１つまたは複数の候補の組を決定するステップの前に前記ＲＡＭディスクのためのメモリを割り当てるステップをさらに含み、
前記ソフトウェア・モジュールを記憶する前記ステップが、
前記最終的な組の前記ソフトウェア・モジュールに応じて前記ＲＡＭディスクのためのファイル・システムのメタデータを計算するステップであって、前記メタデータが、前記ソフトウェア・モジュールを構成するどのファイルが記憶されるべきであるか、および前記ソフトウェア・モジュールが前記ファイル・システムのどこに記憶されるべきであるかを指定する、前記計算するステップと、
前記メタデータを、前記ＲＡＭディスクの個々のメモリ・セクション、例えば、メモリ・ブロックに書き込むステップと、
前記最終的な組のソフトウェア・モジュールのファイルを、前記ファイル・システムで１つずつ前記メモリ・セクションに前記メタデータに従ってコピーするステップとを含む、請求項１ないし７のいずれか一項に記載の方法。
【請求項１１】
ブートローダであって、コンピュータのメイン・メモリにおいて少なくとも部分的に実行可能であり、前記コンピュータにより実行されることにより、
ソフトウェア・モジュールの最初の組に関する要件、および
前記コンピュータのハードウェアの仕様
にアクセスすることと、
前記最初の組の中で、前記ハードウェアの仕様に適合し、ＲＡＭディスクとして記憶され得るソフトウェア・モジュールの１つまたは複数の候補の組を決定することと、
最終的な組の前記ソフトウェア・モジュールをＲＡＭディスクに記憶することであって、前記最終的な組が、前記１つまたは複数の候補の組のうちの１つである、前記記憶することと、
前記ＲＡＭディスクに記憶された前記ソフトウェア・モジュールを実行するように命令することと、
前記ＲＡＭディスクで実行されるソフトウェア・モジュールの前記最終的な組に入っていないソフトウェア・モジュールの追加の組を決定することと、
暗号化された前記追加の組のソフトウェア・モジュールを、その後実行するために前記コンピュータの物理的なストレージ媒体に記憶することと
を引き起こすように構成され、
ソフトウェア・モジュールの前記最初の組および前記最終的な組のそれぞれが、アプリケーション・コンポーネントおよびオペレーティング・システム・イメージ・コンポーネントを含む、ブートローダ。
【請求項１２】
ユーザ信頼デバイスであって、
コンピュータとの接続を可能にする接続インターフェースと、
請求項１１に記載のブートローダ、ならびに
アプリケーション・コンポーネント、およびオペレーティング・システム・イメージ・コンポーネントを含むソフトウェア・モジュール
を記憶する永続的なメモリとを含む、ユーザ信頼デバイス。
【請求項１３】
前記永続的なメモリが、
アプリケーション・コンポーネント、およびオペレーティング・システム・イメージ・コンポーネントを含むソフトウェア・モジュールと、
前記ソフトウェア・モジュールが前記ハードウェアの仕様に適合し、ＲＡＭディスクとして記憶され得るかどうかを決定するためのソフトウェア・モジュールのテストとをさらに記憶し、
前記ソフトウェア・モジュールのテストが、前記ソフトウェア・モジュールに論理的にリンクされる、請求項１２に記載のユーザ信頼デバイス。
【請求項１４】
前記永続的なメモリが、
前記ブートローダの第１の部分が記憶される第１のメモリと、
前記ブートローダの前記第１の部分とは異なる第２の部分が記憶され、前記第１のメモリに比べて安全性が劣る第２のメモリとを含み、
前記第２のメモリに暗号化された前記ブートローダの前記第２の部分が存在し、対応する暗号化鍵または復号鍵が前記第１のメモリに記憶される、請求項１２または１３に記載のユーザ信頼デバイス。
【請求項１５】
前記ブートローダが、前記ソフトウェア・モジュールが前記ハードウェアの仕様に適合し、ＲＡＭディスクとして記憶され得るかどうかを決定するためのソフトウェア・モジュールのテストの一部として、
仮想化に反応するコードを実行し、実行が完了すると完了データを発するように前記コンピュータのプロセッサに命令することと、
そのような完了データに基づいて、前記実行が仮想化された環境で行われたかどうかを決定することと、
前記仮想化に反応するコードの前記実行が仮想化された環境で行われたかどうかにも応じてソフトウェア・モジュールの前記１つまたは複数の候補の組を決定することとを引き起こすようにさらに構成される、請求項１２ないし１４のいずれかに記載のユーザ信頼デバイス。
【請求項１６】
前記ブートローダが、前記ソフトウェア・モジュールが前記ハードウェアの仕様に適合し、ＲＡＭディスクとして記憶され得るかどうかを決定するためのソフトウェア・モジュールのテストの一部として、
ファームウェア・データをコードにマッピングすることであって、前記ファームウェア・データが、前記コンピュータの初期化ファームウェアのプログラム・コードまたは前記初期化ファームウェアによってアクセスされ得るデータあるいはその両方を含む、前記マッピングすることと、
前記コードの信用性を証明することと、
前記コードが証明されたかどうかにも従ってソフトウェア・モジュールの前記１つまたは複数の候補の組を決定することと
を引き起こすようにさらに構成される、請求項１２ないし１５のいずれか一項に記載のユーザ信頼デバイス。
【請求項１７】
システムであって、
請求項１２ないし１６のいずれか一項に記載のユーザ信頼デバイスと、
前記ユーザ信頼デバイスが接続可能なコンピュータとを含む、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピュータ上のアプリケーション・コンポーネントおよびオペレーティング・システム・イメージ・コンポーネントを含むソフトウェア・モジュールの安全な実行のための、コンピュータを安全にブートするための方法の分野に関する。
【背景技術】
【０００２】
セキュリティの観点から見ると、コンピュータ、例えば、パーソナル・コンピュータ（ＰＣ）で汎用オペレーティング・システム（general-purpose operating system）（またはＧＰＯＳ）を実行することは、このＧＰＯＳの（またはＧＰＯＳ上で実行されるアプリケーションの）欠陥がその欠陥を利用する悪意のあるソフトウェアがパスワードを盗むこと（キーロギング）または会社の情報のようなその他の情報を盗むこと（スクリーン・スクレイピング）などのような望ましくない動作を実行することを引き起こす可能性があるのでリスクと考えられ得る。
【０００３】
この問題に対処するために使用される標準的な方法は、いわゆる「セキュリティ・ソフトウェア」、サーバ側の仮想化ソリューション、クライアント側の仮想化ソリューション、およびソフトウェアのトラスト・チェーン（software-trust chain）または安全にロードされる（ブートされる）オペレーティング・システム・カーネルを含む。これらの方法は、主としてＧＰＯＳのあり得る欠陥から生じるさまざまな欠点を有する。
【０００４】
上記の問題に対処するための別の方法は、認定された欠陥のないＧＰＯＳの概念に依拠する。しかし、ＧＰＯＳに関して市場により要求されるすべての機能を備えたそのようなシステムの信頼できる実装は、本発明者らの知る限り存在しない。オペレーティング・システムの特定のコンポーネントは、（特定のセキュリティの特性に適合すると）認証され、例えば、スマート・カードのための専用の安全なオペレーティング・システム（special-purpose, secure operating system）（またはＳＰＯＳ）の概念をもたらし得る。（数億行のＧＰＯＳのコードを認定することの非現実性以上の）この手法の最も重大な欠点は、ＧＰＯＳの基本概念（つまり、ＧＰＯＳが汎用的であり、容易に拡張され得ること）が、安全なＯＳの機能特性を提供し、閉じ込めるという目的と何らかの形で矛盾することである。
【０００５】
この文脈で、本発明者らは、オペレーティング・システム上で実行されるアプリケーション・ソフトウェアが管理する資産（例えば、極秘の会社のデータ）を含め、このアプリケーション・ソフトウェアの完全性を確認するための安全なソリューションを設計した。
【０００６】
そのようなソリューションは、「個人所有物の業務利用」（ＢＹＯ：bring yourown）コンピューティング作業環境から大きな恩恵を受けるはずである。概して、ＢＹＯは、「個人所有デバイスの業務利用」（ＢＹＯＤ：bring your own device）、「個人所有技術の業務利用」（ＢＹＯＴ：bringyour own technology）、または密接に関連する「個人の行動の業務利用」（ＢＹＯＢ：bringyour own behavior）に関連する。ＢＹＯＤまたはＢＹＯＴは、従業員が、職場以外で、自宅で個人のモバイル・デバイスを使用し、それによって個人のアプリケーション／データがそのようなデバイスを通じてアクセスされる一方、どのようにして同じデバイスを職場に持ち込み、使用し、雇い主の電子メール、データベース、およびファイルにアクセスすることができるかの会社／企業のポリシーに関係する。ハードウェアだけでなく、ＢＹＯＢは、デバイスで使用されるソフトウェアにまでこれを拡張する。
【０００７】
その上、コンピュータで実行されるいずれかのソフトウェアがＰＣのオペレーティング・システム上に存在するいくつかのウィルスおよび悪意のあるソフトウェア（またはマルウェア）による攻撃に晒されている可能性があるとき、知られているソリューションは、例えば、ユーザ信頼デバイス（user-trusted device）、概して、安全なデバイスに記憶された外部ブート媒体からＰＣを再起動し、外部メディアから新しい−−セキュリティの観点から見て−−きれいなオペレーティング・システム（ＯＳ）を起動することである。しかし、この手法は、さらなる問題を引き起こし、本発明の実施形態は、それらの問題を解決することも目的とする。
【０００８】
最後に、多くの場合、外部ブート媒体が（安全な耐タンパー性のデバイスを含む）信頼されたデバイスに提供され、その種のデバイスは広く知られている。例えば、オンライン・トランザクションに関して、開発されたソリューションは、いわゆるゾーン・トラステッド情報チャネル（Zone Trusted Information Channel）（または略してＺＴＩＣ）であり、例えば、"The Zurich Trusted Information Channel - An Efficient Defenceagainst Man-in-the-Middle and Malicious Software Attacks", by ThomasWeigold, Thorsten Kramp, Reto Hermann, Frank Horing, Peter Buhler, MichaelBaentsch. In P. Lipp, A.-R. Sadeghi, and K.-M. Koch (Eds.): TRUST 2008, LNCS4968, pp. 75-91, 2008. Springer-Verlag Berlin Heidelberg 2008を参照されたい。
【先行技術文献】
【非特許文献】
【０００９】
【非特許文献１】"The Zurich TrustedInformation Channel - An Efficient Defence against Man-in-the-Middle andMalicious Software Attacks", by Thomas Weigold, Thorsten Kramp, RetoHermann, Frank Horing, Peter Buhler, Michael Baentsch. In P. Lipp, A.-R.Sadeghi, and K.-M. Koch (Eds.): TRUST 2008, LNCS 4968, pp. 75-91, 2008.Springer-Verlag Berlin Heidelberg 2008
【発明の概要】
【発明が解決しようとする課題】
【００１０】
本発明の目的は、上述した問題を解決することである。
【課題を解決するための手段】
【００１１】
第１の態様によれば、本発明は、コンピュータでソフトウェア・モジュールを実行するための方法であって、
コンピュータ、好ましくはそのコンピュータのメイン・メモリで少なくとも部分的にブートローダを実行するステップと、
ブートローダが実行されると、
ソフトウェア・モジュールの最初の組に関する要件、および
コンピュータのハードウェアの仕様
にアクセスするステップと、
前記最初の組の中で、前記ハードウェアの仕様に適合し、ＲＡＭディスクとして記憶され得るソフトウェア・モジュールの１つまたは複数の候補の組を決定するステップと、
最終的な組のソフトウェア・モジュールをＲＡＭディスクに記憶することであって、最終的な組が、１つまたは複数の候補の組のうちの１つである、前記記憶すること、およびＲＡＭディスクに記憶されたソフトウェア・モジュールを実行するように命令することを行うステップとを含み、
ソフトウェア・モジュールの最初の組および最終的な組のそれぞれが、アプリケーション・コンポーネントおよびオペレーティング・システム・イメージ・コンポーネントを含み、好ましくはハードウェア・コンポーネントのドライバをさらに含む、方法として具現化される。
【００１２】
実施形態において、ブートローダは、最初、コンピュータに接続可能なユーザ信頼デバイスに記憶され、方法は、ブートローダを実行するステップの前に、
ユーザ信頼デバイスをコンピュータに接続すると、ブートローダの少なくとも一部が、転送された部分をその後実行するために、コンピュータに、好ましくはコンピュータのメイン・メモリに転送されるようにするステップをさらに含む。
【００１３】
好ましくは、ソフトウェア・モジュールは、最初、ユーザ信頼デバイスに記憶され、ユーザ信頼デバイスは、コンピュータに接続可能であり、方法は、ソフトウェア・モジュールをＲＡＭディスクに記憶する前に、
転送されたソフトウェア・モジュールをＲＡＭディスクとしてその後記憶し、実行するために、ユーザ信頼デバイスからコンピュータのメイン・メモリに最終的な組のソフトウェア・モジュールを転送するステップをさらに含む。
【００１４】
好ましい実施形態において、方法は、ソフトウェア・モジュールをＲＡＭディスクに記憶すること、およびＲＡＭディスクに記憶された前記ソフトウェア・モジュールを実行するように命令することを行うステップの前に、
好ましくは、コンピュータ、好ましくはコンピュータのメイン・メモリで実行されるブートローダの別の部分とインタラクティブにユーザ信頼デバイスで実行されるブートローダの部分により、ユーザ信頼デバイスから受信された入力に従って、ソフトウェア・モジュールのいくつかの候補の組からソフトウェア・モジュールの１つの最終的な組を特定するステップをさらに含む。概して、これは、ユーザ信頼デバイスに組み込まれた表示およびＩ／Ｏ能力を介して部分的にユーザのインタラクションにより行われる。
【００１５】
好ましくは、ＲＡＭディスクとして記憶され得るソフトウェア・モジュールの１つまたは複数の候補の組を決定するステップは、ソフトウェア・モジュールを優先順位付けするステップ、好ましくは、所与のセキュリティの基準に従って、最もセキュリティ上の機密性が高いソフトウェア・モジュールを優先順位付けするステップを含む。
【００１６】
一部の実施形態では、方法は、
ＲＡＭディスクで実行されるソフトウェア・モジュールの最終的な組に入っていないソフトウェア・モジュールの追加の組を決定するステップと、
好ましくは暗号化されたこの追加の組のソフトウェア・モジュールを、その後実行するためにコンピュータの物理的なストレージ媒体に記憶するステップとをさらに含む。
【００１７】
好ましくは、コンピュータのハードウェアの仕様にアクセスするステップは、
−  コンピュータのメイン・メモリの容量と、
−  コンピュータのプロセッサ・アーキテクチャと、
−  コンピュータのストレージ媒体の容量と、
−  仮想化がサポートされるかどうかと
のうちの１つまたは複数に関してテストを実行するステップを含み、
好ましくは、前記テストの少なくとも一部は、最初の組のソフトウェア・モジュールに論理的にリンクされ、より好ましくは、ＲＡＭディスクとして記憶され得るソフトウェア・モジュールの１つまたは複数の候補の組を決定するステップは、実行されたテストの結果に従ってソフトウェア・モジュールを優先順位付けするステップを含む。
【００１８】
好ましい実施形態では、方法は、
好ましくは、ＲＡＭディスクとして記憶され得るソフトウェア・モジュールの前記１つまたは複数の候補の組を決定するステップの前にＲＡＭディスクのためのメモリを割り当てるステップをさらに含み、
ソフトウェア・モジュールを記憶するステップは、
最終的な組のソフトウェア・モジュールに応じてＲＡＭディスクのためのファイル・システムのメタデータを計算するステップであって、前記メタデータが、これらのソフトウェア・モジュールを構成するどのファイルが記憶されるべきであるか、およびこれらのソフトウェア・モジュールがファイル・システムのどこに記憶されるべきであるかを指定する、計算する前記ステップと、
メタデータを、ＲＡＭディスクの個々のメモリ・セクション、例えば、メモリ・ブロックに書き込むステップと、
最終的な組のソフトウェア・モジュールのファイルを、ファイル・システムで１つずつメモリ・セクションにメタデータに従ってコピーするステップとを含む。
【００１９】
本発明の別の態様によれば、ブートローダであって、コンピュータ、好ましくはコンピュータのメイン・メモリで少なくとも部分的に実行可能であり、ブートローダの実行が、ソフトウェア・モジュールの最初の組に関する要件、およびコンピュータのハードウェアの仕様にアクセスすることと、
前記最初の組の中で、前記ハードウェアの仕様に適合し、ＲＡＭディスクとして記憶され得るソフトウェア・モジュールの１つまたは複数の候補の組を決定することと、
最終的な組のソフトウェア・モジュールをＲＡＭディスクに記憶することであって、最終的な組が、１つまたは複数の候補の組のうちの１つである、前記記憶すること、およびＲＡＭディスクに記憶されたソフトウェア・モジュールを実行するように命令することと
を引き起こすように構成され、
ソフトウェア・モジュールの最初の組および最終的な組のそれぞれが、アプリケーション・コンポーネントおよびオペレーティング・システム・イメージ・コンポーネントを含み、好ましくはハードウェア・コンポーネントのドライバをさらに含む、ブートローダとして具現化され得る。
【００２０】
さらに別の態様によれば、本発明は、ユーザ信頼デバイスであって、
コンピュータとの接続を可能にする接続インターフェースと、
本発明によるブートローダ、および
好ましくは、アプリケーション・コンポーネント、オペレーティング・システム・イメージ・コンポーネント、および好ましくはハードウェア・コンポーネントのドライバを含むソフトウェア・モジュール
を記憶する永続的なメモリとを含む、ユーザ信頼デバイスとして具現化され得る。
【００２１】
好ましくは、前記永続的なメモリは、
ブートローダの第１の部分が記憶される安全なメモリと、
ブートローダの第２の部分が記憶される安全でないメモリとを含む。
【００２２】
好ましい実施形態においては、安全でないメモリに暗号化されたブートローダの第２の部分が存在し、対応する暗号化鍵または復号鍵が安全なメモリに記憶される。
【００２３】
加えて、永続的なメモリは、例えば、前記ソフトウェア・モジュールが前記ハードウェアの仕様に適合し、ＲＡＭディスクとして記憶され得るかどうかを決定するためのソフトウェア・モジュールのテストを記憶する可能性があり、好ましくは、ソフトウェア・モジュールのテストは、前記ソフトウェア・モジュールに論理的にリンクされる。
【００２４】
好ましくは、ブートローダは、前記ソフトウェア・モジュールが前記ハードウェアの仕様に適合し、ＲＡＭディスクとして記憶され得るかどうかを決定するためのソフトウェア・モジュールのテストの一部として、
仮想化に反応するコード（virtualization sensitive code）を実行し、実行が完了すると完了データを発するようにコンピュータのプロセッサに命令することと、
そのような完了データに基づいて、実行が仮想化された環境で行われたかどうかを決定することと、
仮想化に反応するコードの実行が仮想化された環境で行われたかどうかにも応じてソフトウェア・モジュールの前記１つまたは複数の候補の組を決定することとを引き起こすようにさらに構成される。
【００２５】
実施形態において、ブートローダは、前記ソフトウェア・モジュールが前記ハードウェアの仕様に適合し、ＲＡＭディスクとして記憶され得るかどうかを決定するためのソフトウェア・モジュールのテストの一部として、
ファームウェア・データをコードにマッピングすることであって、ファームウェア・データが、コンピュータの初期化ファームウェアのプログラム・コードまたは初期化ファームウェアによってアクセスされ得るデータあるいはその両方を含む、前記マッピングすることと、
コードの信用性を証明することと、
コードが証明されたかどうかにも従ってソフトウェア・モジュールの前記１つまたは複数の候補の組を決定することとを引き起こすようにさらに構成される。
【００２６】
別の態様によれば、本発明は、本発明によるユーザ信頼デバイスと、ユーザ信頼デバイスが接続可能なコンピュータとを含むシステムとして具現化される。
【００２７】
本発明を具現化するデバイス、装置、システム、および方法が、非限定的な例として、添付の図面を参照して以降で説明される。
【図面の簡単な説明】
【００２８】
【図１】本発明の実施形態に含まれる１つまたは複数の方法のステップを実施するのに好適な汎用のコンピュータ化されたシステムを概略的に示す図である。
【図２】実施形態に含まれるユーザ信頼デバイスの選択されたコンポーネントを概略的に示す図である。
【図３】実施形態による、コンピュータがユーザ信頼デバイスからブートすることを可能にするための方法の高レベルのステップを示す流れ図であり、頭字語ＢＬ、ＨＷ、およびＳＭは、それぞれ、ブートローダ、ハードウェア、およびソフトウェア・モジュールを表す。
【図４】図３のステップＳ５ｉｉを実施するためのあり得る一連のステップを示す図であり、頭字語ＨＷおよびＳＭは、それぞれ、ハードウェアおよびソフトウェア・モジュールを表す。
【図５】実施形態に含まれる、ソフトウェア・モジュールの候補の組を決定し、機密のソフトウェア・モジュールをＲＡＭディスクに記憶するためのプロセスを概略的に示す図である。
【図６】実施形態による、ＲＡＭディスクのファイル・システムの所与のメモリ・セクションの抽象的な表現と、ソフトウェア・モジュールのファイルがそのようなメモリ・セクションにどのように記憶されるかとを概略的に示す図である。
【発明を実施するための形態】
【００２９】
以下の説明は、次のように構築される。始めに、本発明の実施形態の全般的な態様が、説明される（第１節）。その後の節は、それぞれ、いくつかの特定の実施形態の好ましいシナリオおよび技術的な実装の詳細を述べる（第２章および第３章）。
【００３０】
１．本発明の実施形態の全般的な態様
１．１  本発明の実施形態を実装するのに好適なコンピュータ化されたシステムおよびデバイスの全般的な態様
図１は、本発明の実施形態に含まれる方法のステップを実施するのに好適な通常のコンピュータ化されたシステムを示す。
【００３１】
本明細書において説明される方法は、おおむね非インタラクティブであり、サーバまたは組み込みシステムなどのコンピュータ化されたシステムによって自動化されることが理解されるであろう。例示的な実施形態において、本明細書において説明される方法は、（部分的に）インタラクティブまたは非インタラクティブなシステムで実施される可能性がある。さらに、これらの方法は、少なくとも部分的に、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組合せで実施される可能性がある。例示的な実施形態において、本明細書において説明される方法は、少なくとも部分的に、（例えば、ブートローダの一部である）実行可能なプログラムとして実装され、少なくとも部分的に、パーソナル・コンピュータ、ワークステーション、ミニコンピュータ、またはメインフレーム・コンピュータなどの専用または汎用デジタル・コンピュータによって実行される。したがって、最も全般的なシステム１００は、汎用コンピュータ１０１を含む。
【００３２】
例示的な実施形態においては、ハードウェア・アーキテクチャの点で、図１に示されるように、コンピュータ１０１は、プロセッサ１０５、メモリ・コントローラ１１５に結合されたメモリ１１０、ならびにローカル入力／出力コントローラ１３５によって通信可能なように結合される１つまたは複数の入力または出力あるいはその両方の（Ｉ／Ｏ）デバイス（もしくは周辺機器）１０、１４５を含む。入力／出力コントローラ１３５は、当技術分野で知られているように、１つまたは複数のバスまたはその他の有線もしくは無線接続である可能性があるが、これらに限定されない。入力／出力コントローラ１３５は、簡単にするために省略されている、通信を可能にするためのコントローラ、バッファ（キャッシュ）、ドライバ、中継器、および受信機などのさらなる要素を有する可能性がある。さらに、ローカル・インターフェースは、上述のコンポーネント間の適切な通信を可能にするためのアドレス、制御、またはデータ接続、あるいはそれらすべてを含む可能性がある。本明細書において説明されるように、Ｉ／Ｏデバイス１０、１４５は、概して、当技術分野で知られている任意の汎用の暗号カード（cryptographic card）またはスマート・カードを含み得る。これらのデバイスのうちの１つは、以下で詳細に検討されるユーザ信頼デバイス１０である。
【００３３】
プロセッサ１０５は、ソフトウェア、特に、メモリ１１０に記憶されるソフトウェアを実行するためのハードウェア・デバイスである。プロセッサ１０５は、任意の特別に作られたもしくは市販のプロセッサ、中央演算処理装置（ＣＰＵ）、コンピュータ１０１に関連するいくつかのプロセッサの中の補助プロセッサ、（マイクロチップもしくはチップ・セットの形態の）半導体に基づくマイクロプロセッサ、マクロプロセッサ、またはソフトウェア命令を実行する概して任意のデバイスである可能性がある。
【００３４】
メイン・メモリ１１０は、揮発性メモリ要素（例えば、ランダム・アクセス・メモリ（ＤＲＡＭ、ＳＲＡＭ、ＳＤＲＡＭなどのＲＡＭ））およびあり得る不揮発性（永続的）メモリ要素（例えば、ＲＯＭ、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブル読み出し専用メモリ（ＥＥＰＲＯＭ）、プログラマブル読み出し専用メモリ（ＰＲＯＭ）、テープ、コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、ディスク、ディスケット、カートリッジ、カセットまたは同様のものなど）を含む。さらに、メモリ１１０は、電子的、磁気的、光学的、またはその他の種類のストレージ媒体、あるいはそれらすべてを組み込むか、またはそのようなストレージ媒体にリンクする可能性がある。メモリ１１０は、さまざまなコンポーネントが互いに離れて置かれるが、プロセッサ１０５によってアクセスされ得る分散型アーキテクチャを有する可能性があることに留意されたい。特に、メモリ１１０は、ＲＡＭディスク１２１がそのメモリ１１０にマウントされ得るように設計される。同様に、その他のメモリの部分が、特定の目的に、例えば、その後実行するためにメイン・モジュール１６、検証モジュール／プロセッサ命令モジュール（processor instruction module）（またはＰＩＭ）１７などのブートローダのコンポーネント１６、１７を受け取るために割り当てられる可能性がある。
【００３５】
動作中、本発明の実施形態に含まれるソフトウェア／プログラム・コード、例えば、メモリ１１０に転送されるソフトウェア／プログラム・コードは、１つまたは複数の別々のプログラムを含む可能性があり、それらのプログラムのそれぞれは、論理的な機能を実装するための実行可能な命令のリストを含む。図１の例において、メモリ１１０には、ユーザ信頼デバイス１０からコンピュータ１０１がブートを開始し、完了することを可能にするための命令がロードされ得る。
【００３６】
ＲＡＭディスクに記憶されるソフトウェア・モジュールは、アプリケーション・コンポーネントおよびオペレーティング・システム・イメージ・コンポーネントを含み、好ましくは、ハードウェア・コンポーネントのドライバも含む可能性がある。したがって、メモリ１１０は、好適なオペレーティング・システム（ＯＳ）１１１（好ましくは、専用のＯＳ、またはＳＰＯＳ）を実行するのに適した状態に設定され得る。それにもかかわらず、本明細書において検討される新規性のある方法は、少なくとも部分的に、コンピュータ１０１でいかなるＯＳコンポーネントが完全にロードされるよりも「前に」動作する。ステップの少なくとも一部は、ハードウェアにより近い別のレベルで動作し、それによって、コンピュータ１０１の通常の挙動が影響を与えられる。実行されると（および実行される場合）、ＯＳ１１１は、基本的に、アプリケーション・プログラムの実行を制御し、スケジューリング、入出力制御、ファイルおよびデータ管理、メモリ管理、ならびに通信制御および関連するサービスを提供する。
【００３７】
本明細書において説明される方法の少なくとも一部は、ソース・プログラム、実行可能なプログラム（オブジェクト・コード）、スクリプト、または実行される１組の命令を含む任意のその他のエンティティの形態である可能性がある。ソース・プログラムである場合、プログラムは、デバイス１０またはコンピュータ１０１あるいはその両方の（１つまたは複数の）メモリ内に含まれる可能性があり、または含まれない可能性があるコンパイラ、アセンブラ、インタープリタなどによって変換される必要がある。さらに、方法は、データおよびメソッドのクラスを有するオブジェクト指向プログラミング言語、あるいはルーチン、サブルーチン、もしくは関数、またはそれらすべてを有する手続き型プログラミング言語として記述され得る。いかなる場合も、本明細書において検討される新規性のある方法は、必要な場合はファームウェア１２２に関連して、および必要に応じてデバイスのＣＰＵ１１に関連して適切に動作するように設計される。
【００３８】
例示的な実施形態において、通常のキーボード１５０およびマウス１５５が、入力／出力コントローラ１３５に結合される可能性がある。その他のＩ／Ｏデバイス１４５は、例えば、プリンタ、スキャナ、マイクロホンなどを含み得る。最後に、Ｉ／Ｏデバイス１０、１４５は、入力および出力を伝達するデバイス、例えば、これらに限定されないが、（その他のファイル、デバイス、システム、またはネットワークにアクセスするための）ネットワーク・インターフェース・カード（ＮＩＣ）または変調器／復調器、無線周波数（ＲＦ）またはその他のトランシーバ、電話インターフェース、ブリッジ、ルータなどをさらに含み得る。本明細書において説明されるように、Ｉ／Ｏデバイス１０、１４５は、当技術分野で知られている任意の汎用の暗号カードまたはスマート・カードである可能性がある。システム１００は、ディスプレイ１３０に結合されたディスプレイ・コントローラ１２５をさらに含み得る。例示的な実施形態において、システム１００は、ネットワーク１６５に結合するためのネットワーク・インターフェース１６０をさらに含み得る。ネットワーク１６５は、ブロードバンド接続によるコンピュータ１０１と任意の外部サーバ、クライアントなどとの間の通信のためのＩＰに基づくネットワークである可能性がある。ネットワーク１６５は、コンピュータ１０１と外部システム、例えば、サーバ３０との間でデータを送信および受信する。例示的な実施形態において、ネットワーク１６５は、サービス・プロバイダによって管理されたマネージドＩＰネットワークである可能性がある。ネットワーク１６５は、例えば、ＷｉＦｉ、ＷｉＭａｘなどの無線プロトコルおよび技術を用いて無線で実装される可能性がある。ネットワーク１６５は、ローカル・エリア・ネットワーク、広域ネットワーク、メトロポリタン・エリア・ネットワーク、インターネット・ネットワーク、またはその他の同様の種類のネットワーク環境などのパケット交換ネットワークである可能性もある。ネットワーク１６５は、固定の無線ネットワーク、無線ローカル・エリア・ネットワーク（ＬＡＮ）、無線広域ネットワーク（ＷＡＮ）、パーソナル・エリア・ネットワーク（ＰＡＮ）、仮想プライベート・ネットワーク（ＶＰＮ）、イントラネット、またはその他の好適なネットワーク・システムである可能性があり、信号を受信および送信するための機器を含む。
【００３９】
コンピュータ１０１がＰＣ、ワークステーション、インテリジェントなデバイスなどである場合、メモリ１１０のソフトウェアは、基本入出力システム（ＢＩＯＳ）または任意の同様のファームウェア１２２をさらに含み得る。ＢＩＯＳは、スタートアップ時にハードウェアを初期化し、試験する１組の基本的なソフトウェア・ルーチンである。その他の点では、ＢＩＯＳは、概して、ＯＳを起動し、ハードウェア・デバイスの間のデータの転送を支援することができる。通常、ＢＩＯＳは、コンピュータ１０１がアクティブ化されるときに実行され得るようにＲＯＭに記憶される。
【００４０】
本明細書において説明されるように方法を実施する目的で、ファームウェア１２２は、とりわけ、ブート・プロセスを開始し、完了するため、およびおそらくはネットワークを介した通信を開始するために使用され（インタラクションされ）得る。しかし、より広く、任意の好適なファームウェア１２２またはファームウェアとのインターフェース（つまり、永続的なメモリと、ソフトウェア・スタックで任意のＯＳ１１１の「下で」動作するそのメモリに記憶されたプログラム・コードおよびデータとの組合せ）が、その目的で使用され得る。典型的には、これは、ＢＩＯＳである。しかし、好適なファームウェア１２２またはファームウェア１２２とのインターフェースの例は、ブート前実行環境（ＰＸＥ：Preboot eXecution Environment）ＢＩＯＳ、いわゆる拡張可能ファームウェア・インターフェース（ＥＦＩ：Extensible Firmware Interface）ＢＩＯＳ、またはさらに統合拡張可能ファームウェア・インターフェース（ＵＥＦＩ：Unified Extensible Firmware Interface）を含む。最後のものは、オペレーティング・システムとプラットフォームのファームウェアとの間のソフトウェア・インターフェースを定義する仕様である。ＵＥＦＩは、今日、すべてのＩＢＭ  ＰＣ互換コンピュータに存在するＢＩＯＳファームウェア・インターフェースを置き換えることを意図している。実際、ＵＥＦＩは、これまでのＰＣ  ＢＩＯＳと同じ機能を提供し、さらにはそれよりも多くの機能を提供し、やはり使用され得る。より広く、ソフトウェア・スタックでオペレーティング・システムの下で動作する任意の初期化ファームウェアは、潜在的に、本発明を実装する目的で呼び出され得る。
【００４１】
コンピュータ１０１が動作しているとき、プロセッサ１０５は、メモリ１１０にデータを伝達し、メモリ１１０からデータを伝達するため、および概してソフトウェアに従ってコンピュータ１０１の動作を制御するために、メモリ１１０内に記憶されたソフトウェアを実行するように構成される。本明細書において説明される方法は、全体的にまたは部分的に、ただし、典型的には後者で、プロセッサ１０５によって読み取られ、場合によってはプロセッサ１０５内にバッファリングされ、そして実行される。
【００４２】
ソフトウェアで実装される可能性がある本明細書において説明される方法の一部は、任意のコンピュータに関連するシステムまたは方法による使用のために、または任意のコンピュータに関連するシステムまたは方法に関連して任意のコンピュータ可読媒体に記憶される可能性がある。
【００４３】
当業者に理解されるであろうように、本発明の態様は、システム、方法、またはコンピュータ・プログラム製品として具現化され得る。したがって、本発明の態様は、すべてハードウェアの実施形態、すべてファームウェアもしくはソフトウェアまたはその両方の実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなど）、あるいはすべてが概して本明細書において「モジュール」、「コンピュータ化された方法」、「プロセス」、もしくは「枠組み」などと呼ばれることがあるファームウェア／ソフトウェアの態様とハードウェアの態様とを組み合わせる実施形態の形態をとる可能性がある。さらに、本発明の態様は、コンピュータ可読プログラム・コードを具現化する１つまたは複数のコンピュータ可読媒体で具現化されたコンピュータ・プログラム製品の形態をとる可能性がある。
【００４４】
１つまたは複数のコンピュータ可読媒体の任意の組合せが、利用される可能性がある。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読ストレージ媒体である可能性がある。コンピュータ可読ストレージ媒体は、例えば、電子、磁気、光、電磁、赤外線、または半導体システム、装置、もしくはデバイス、またはこれらの任意の好適な組合せである可能性があるがこれらに限定されない。コンピュータ可読ストレージ媒体のより詳細な例（非網羅的なリスト）は、以下、すなわち、１つもしくは複数の配線を有する電気的な接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭもしくはフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、光ストレージ・デバイス、磁気ストレージ・デバイス、またはこれらの任意の好適な組合せを含む。本明細書の文脈において、コンピュータ可読ストレージ媒体は、命令実行システム、装置、もしくはデバイスによって、または命令実行システム、装置、もしくはデバイスに関連して使用するためのプログラムを含むまたは記憶することができる任意の有形の媒体である可能性がある。
【００４５】
コンピュータ可読信号媒体は、例えば、ベースバンドで、または搬送波の一部としてコンピュータ可読プログラム・コードを具現化する伝播されるデータ信号を含み得る。そのような伝播される信号は、電磁的、光学的、またはこれらの任意の好適な組合せを含むがこれらに限定されないさまざまな形態のうちの任意の形態をとり得る。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではなく、命令実行システム、装置、もしくはデバイスによって、または命令実行システム、装置、もしくはデバイスに関連して使用するためのプログラムを伝達、伝播、または搬送することができる任意のコンピュータ可読媒体である可能性がある。
【００４６】
コンピュータ可読媒体上に具現化されるプログラム・コードは、無線、有線、光ファイバ・ケーブル、ＲＦなど、またはこれらの任意の好適な組合せを含むがこれらに限定されない任意の適切な媒体を用いて送信される可能性がある。
【００４７】
本発明の態様の動作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語と、「Ｃ」プログラミング言語または同様のプログラミング言語などの通常の手続き型プログラミング言語とを含む１つまたは複数のプログラミング言語の任意の組合せで記述され得る。プログラム・コードは、すべてユーザのコンピュータ上で、（スタンドアロンのソフトウェア・パッケージとして）ユーザのコンピュータ上で部分的に、さらには以下、すなわち、ユーザのコンピュータ１０１、ユーザ信頼デバイス１０、および遠隔のサーバ３０のうちの２つ以上で部分的に実行される可能性がある。ホスト・コンピュータおよびサーバは、ローカル・エリア・ネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、外部コンピュータへの接続（インターネット・サービス・プロバイダを用いるインターネット）を含む任意の種類のネットワークを通じて接続され得る。
【００４８】
本発明の態様が、本発明の実施形態による方法、装置（システム）、およびコンピュータ・プログラム製品の流れ図またはブロック図あるいはその両方を参照して以下で説明される。流れ図またはブロック図あるいはその両方のブロックの少なくとも一部、および流れ図またはブロック図あるいはその両方のブロックの組合せは、コンピュータ・プログラム命令によって実装され得ることが理解されるであろう。これらのコンピュータ・プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサによって実行される命令が、流れ図またはブロック図あるいはその両方の１つのブロックまたは複数のブロックで規定された機能／動作を実施するための手段をもたらすように、汎用コンピュータ、専用コンピュータ、またはその他のプログラム可能なデータ処理装置のプロセッサに与えられ、マシンを作り出すものである可能性がある。
【００４９】
これらのコンピュータ・プログラム命令は、コンピュータ可読媒体に記憶された命令が、流れ図またはブロック図あるいはその両方の１つのブロックまたは複数のブロックで規定された機能／動作を実施する命令を含む製品をもたらすように、コンピュータ可読媒体に記憶され、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに特定の方法で機能するように指示することができるものである可能性もある。
【００５０】
コンピュータ・プログラム命令は、コンピュータまたはその他のプログラム可能な装置で実行される命令が、流れ図またはブロック図あるいはその両方の１つのブロックまたは複数のブロックで規定された機能／動作を実施するためのプロセスを提供するように、コンピュータで実施されるプロセスを生成するために、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスにロードされ、コンピュータ、その他のプログラム可能な装置、またはその他のデバイスで一連の動作のステップを実行させるものである可能性もある。
【００５１】
図面の流れ図およびブロック図は、本発明のさまざまな実施形態によるシステム、方法、およびコンピュータ・プログラム製品のあり得る実装のアーキテクチャ、機能、および動作を示す。これに関連して、流れ図またはブロック図のブロックのうちの少なくとも一部は、（１つまたは複数の）規定された論理的な機能を実装するための１つまたは複数の実行可能命令を含むモジュール、セグメント、またはコードの一部を表す可能性がある。一部の代替的な実装においては、ブロックで示された機能が、図面に示された順序とは異なる順序で行われる可能性があることにも留意されたい。例えば、連続で示された２つのブロックが、実際には実質的に同時に実行される可能性があり、またはそれらのブロックが、関連する機能に応じて逆順に実行されることもあり得る。ブロック図または流れ図あるいはその両方の各ブロックと、ブロック図または流れ図あるいはその両方のブロックの組合せとは、規定された機能もしくは動作を実行する専用のハードウェアに基づくシステム、または専用のハードウェアとコンピュータ命令との組合せによって実装され得ることも認められるであろう。
【００５２】
１．２  主な実施形態および高レベルの変更形態
図１から４を参照して、ソフトウェア・モジュールがアプリケーション・コンポーネント、オペレーティング・システム・イメージ・コンポーネント、および好ましくはハードウェア・コンポーネントのドライバも含む、コンピュータでソフトウェア・モジュールを実行するための方法に関係する本発明の一態様が、最初に説明される。図３および４に示されるように、方法は、主に以下のステップを含む。
−  ステップＳ４：少なくとも部分的にコンピュータ１０１で、好ましくはコンピュータのメイン・メモリでコンポーネント１６を実行する。
−  ブートローダが実行されると、
〇ステップＳ５：以下のものにアクセスする。
◆ソフトウェア・モジュールＳＭｎの最初の組ＩＳに関する要件（Ｓ５ｉ）、および
◆コンピュータ１０１、例えば、ＰＣのハードウェアの仕様（Ｓ５ｉｉ）
〇ステップＳ６：前記最初の組の中で、前記ハードウェアの仕様に準拠し（ステップＳ６ａ）、ＲＡＭディスクとして記憶され得る（ステップＳ６ｂ）ソフトウェア・モジュールの１つまたは複数の候補の組ＣＳ１およびＣＳ２を決定する。
◆したがって、ここで選択されるソフトウェア・モジュールは、一方で、ハードウェアの仕様に適合し、他方で、それ自体がコンピュータ１０１のハードウェアの能力に必然的に依存するＲＡＭディスクとしての記憶に好適でなければならない。ＲＡＭディスクは、保有されるソフトウェア・モジュールを実行する目的のために厳密に設定されることが好ましいのでこの段階ではまだ存在しない可能性があることに留意されたい。ＲＡＭディスクは、そのＲＡＭディスクにモジュールを記憶する前の任意の時間に設定され得る。
〇ステップＳ９：ＲＡＭディスク１２１に最終的な組ＦＳのソフトウェア・モジュールを記憶し、ＲＡＭディスクに記憶されたソフトウェア・モジュールを実行するように命令する。最終的な組ＦＳは、例えば、何らかの好適なポリシーに従って選択された候補の組ＣＳ１、ＣＳ２、．．．のうちの１つである。
【００５３】
本発明は、さらに、ブートローダ、またはコンピュータ１０１で実行されるとブートローダを実現することを可能にする任意のより全般的なコンピュータ・プログラム・コード製品として具現化され得る。本明細書においてブートローダと呼ばれるものは、コンピュータ１０１で実行されると、コンピュータ１０１をブートするために、おそらくはデバイス１０で実行されるそのコンポーネント１５とインタラクティブにさまざまな動作を実行することができる１組のコンポーネント１５、１６、１７（ＲＡＭディスクとして記憶されるソフトウェア・モジュールＳＭｎとそれらを区別するために「コンポーネント」または「部分」と呼ばれる）である。概して、ブートローダ（または少なくともその一部）は、初期化ファームウェア、例えば、ファームウェア１２２によって検出可能である。ブートローダは、とりわけ、ＰＣでその後実行するために、コンピュータ１０１へのそのブートローダのコンポーネント１６、１７の少なくとも一部の転送をファームウェア１２２が開始するための命令を含む。ブートローダのコンポーネント１５、１６、および１７は、単一のエンティティ（つまり、ブートを可能にするエンティティ）、または所望の結果を与えるためにインタラクションすることができる別々のエンティティと見なされる可能性がある。
【００５４】
ソフトウェア・モジュールＳＭｍの最初の組ＩＳおよび最終的な組ＦＳ（ならびに候補の組ＣＳ１、ＣＳ２、．．．）のそれぞれは、コンピュータのハードウェアとインタラクションする目的で、アプリケーション・コンポーネントおよびオペレーティング・システム・イメージ・コンポーネントを含み、好ましくは、ハードウェア・コンポーネントのドライバも含み、実行されると、アプリケーションが実行されることを可能にし、したがって、ユーザがコンピュータを介して活動を実行することを可能にする。モジュールがＲＡＭディスクとして直接実行されるので、上記の方法は、コンピュータ１０１上に跡をほとんどまたはそれどころかまったく残さずに、そのコンピュータ１０１上でオペレーティング・システムと前記オペレーティング・システム上で実行されるアプリケーション・ソフトウェアとを実行することを可能にする。基本的に、このソリューションは、ハード・ディスクまたはそのハード・ディスクに接続された大容量ストレージ・デバイスを調べることによって、セッションの終了後に、ユーザが前記コンピュータを使用していたと結論づけることを（不可能ではないにしろ）非常に難しくする。しかしながら、このソリューションの真の目的は、オペレーティング・システム上で実行されるアプリケーション・ソフトウェアが管理する資産（例えば、極秘の会社のデータ、極秘情報、企業秘密のデータ（proprietary data）、フォーマット、および情報など）を含め、このソフトウェアの完全性を確認するための安全なソリューションを提供することである。上記のソリューションは、信頼でき、つまり、ユーザが検証可能であり、移動可能である、つまり、マシンに固有でない。
【００５５】
好ましくは、ＧＰＯＳではなく、専用のＯＳ（ＳＰＯＳ）およびアプリケーションが、完全性を保証するために信頼される。ソフトウェア・モジュールＳＭｎは、それに応じて予め選択され得る。
【００５６】
ユーザの私的なＧＰＯＳを削除することは（特に個人所有物の業務利用のシナリオで、つまり、ユーザがそれらのユーザの私的なＰＣハードウェアを会社での仕事に利用するときに）ユーザにとって許容しがたい可能性が高いので、実施形態は、例えば、ＰＣの外部の暗号ハードウェア（cryptographic hardware）によって厳重に制御されるメカニズムによって一時的にブートしてＳＰＯＳに入ることからなる。これは、以下で詳細に説明されるように、ユーザ信頼デバイスのおかげで実現される。
【００５７】
提案されるソリューションは、ＲＡＭ、すなわち、永続的でないデータからのみ実行され、ユーザがリブートしてそのユーザの私的なＧＰＯＳに再び入るときに跡を残さず自動的に消えることができる。選択されたモジュール（例えば、最も機密性が高いモジュール）の実行することと相補的に、ＳＰＯＳは、さらに、より重大性の低いアプリケーションおよびアプリケーション・データの追加的な記憶のためにＰＣのローカルのハード・ディスクを利用するか、またはその目的のために遠隔の（クラウド）ストレージを利用する可能性がある。その場合、システムは、ローカルのハード・ディスクに空きを作り、ハード・ディスクの領域の所有権を取得する必要があり、それから、ネットワーク接続性なしに機能することができる。変形形態において、ＰＣは、ＳＰＯＳにクラウド・サーバに接続する能力を与えるためにオンラインである必要がある可能性がある。
【００５８】
ソフトウェア・モジュールの最初の組ＩＳに関する要件は、最初、ユーザがＰＣで有するように意図するかまたは有することを許される活動およびそれらの活動をどのように／どこで実行すべきかの観点で表される可能性がある。これらの活動は、例えば、
−  クライアントのアカウント情報がアクセスされ、おそらくはクライアントの資産がアクセス／管理されるｅ−バンキング・アプリケーション、または
−  安全なメッセージング・システム・アプリケーションである。
【００５９】
そして、これらの要件は、ソフトウェア・モジュール、すなわち、そのような活動を実行するために必要なモジュールの観点で変換される。単純なルック・アップ・テーブルが、活動をソフトウェア・モジュールに変換するのに十分である可能性がある。その他の対応の指針が、使用される可能性がある。変形形態において、要件は、ソフトウェア・モジュールの観点で直接提供される。
【００６０】
概して、ソフトウェア・モジュールは、高レベルのソフトウェア・コンポーネントであり、つまり、初期化ソフトウェア、すなわち、ＢＩＯＳシステムよりも高レベルである。
【００６１】
ＲＡＭディスクは、それ自体知られている。広く、ＲＡＭディスクは、不揮発性ＲＡＭをストレージ媒体として使用することを除いてハード・ディスクと同じである。ハード・ディスクとＲＡＭディスクとの両方は、ストレージをバイトのシーケンスの形態で提供する。ハード・ディスク上で、このシーケンスは、特定のサイズのブロックに分割され、したがって、各バイトは、ブロック番号とブロックにおけるバイトのオフセットによってアドレス指定され得る。ハード・ディスクではなくＲＡＭディスクにデータを記憶するとき、通常、データ・ブロックは、単純に、ＲＡＭに連続して記憶される。例えば、ＲＡＭディスクが５１２バイトのブロック・サイズを有し、人が（インデックス０を有する）第１のブロックを例えばアドレス５１２０００に記憶したいと仮定すると、第２のブロック（インデックス付けされたブロック１）をアドレス５１２５１２に記憶し、第３のブロックを５１３０２４に記憶し、以下同様である。人が（ｎ−１とインデックス付けされた）第ｎのブロックを必要とするとき、ハード・ディスクにブロックｎを読み取るように命じる代わりに、ここでは単純に、例えば上記の例においてはアドレス５１２０００＋５１２＊ｎのメイン・メモリの５１２バイトを読み取る。
【００６２】
両方の形態のディスクでデータが編成される方法は、同じである可能性があり、同じであることが多い。しかし実際は、異なる意味合いがある。人がディスクからブロックを読み取るとき、このブロックは、始めにＲＡＭにコピーされなければならない。人がそのブロックをＲＡＭディスクから読み取るときは、ブロックは既にＲＡＭに記憶されており、十分に適切に設計されたＯＳは、ブロックをＲＡＭの別の領域にコピーする必要がなく、その代わりに元の位置でブロックを読み取ることができる。
【００６３】
加えて、ハード・ディスクでは、概して、人は、ファイルがブロックの境界で始まるような編成を実現しようとし、ファイルの読み取りおよびファイルへの書き込みをより容易にする。そのような構造を維持することはＲＡＭディスク上の編成を単純にすることにも役立つが、ＲＡＭディスクでこの構造を保つことは必須ではない。したがって、この構造を義務づけないことは、ファイルをよりコンパクトに記憶し、メモリを節約することを可能にする。ハード・ディスクでは、これは、人が常にブロック全体を読み書きしなければならないので法外に高価である。これは、ハード・ディスクでは、人がブロックの一部を変更したい場合、最初にブロック全体を読み、それからそのブロックを部分的に変更し、そして修正されたブロック全体を書き戻さなければならないからである。ＲＡＭディスクでは、必要とされる部分のみが変更される必要がある。
【００６４】
さらに、ハード・ディスクでは、ブロックは、ディスクがハード・ディスクの読み取りヘッドの下で回転するときにブロックが次々にアクセスされ得るようにできるだけ連続して割り当てられる。ブロックが連続して割り当てられない場合、ハード・ディスクは、法外に長い時間をかけて各ブロックをシークしなければならない。同様の影響がＲＡＭディスクに関しても存在するが、比較すると、代償はほとんど無視できる。
【００６５】
ＲＡＭディスクは、データの読み取りのためにのみ使用されることが多い。この場合、データは、例えば、ＣＤＲＯＭのように異なるように編成される可能性がある。データが書き込まれず、新しいデータのために未使用ブロックを見つける必要がないので、未使用ブロックに印を付ける必要がない。
【００６６】
したがって、上で検討されたように、物理的なディスクではなくＲＡＭディスクに依拠することは、いくつかの技術的な意味を持つ。
【００６７】
提案される方法の主なステップを再び参照すると、どのソフトウェア・モジュールがＲＡＭディスクとして記憶され得るかを見つけるためのアルゴリズムは、決定ステップが以下の２つのサブステップに分かれる場合、大きく改善されることに留意されたい。
−  第１に、人が、最初の組の中で、前記ハードウェアの仕様に適合するソフトウェア・モジュールの第１のサブセットを決定し、
−  第２に、人が、前記第１のサブセットの中で、ＲＡＭディスクとして記憶され得るソフトウェア・モジュールの１つまたは複数の第２のサブセットを決定する。このようにして、それらの技術的に妥当なソフトウェア・モジュールのみが、ＲＡＭディスクとして実行されるためのあり得る候補と見なされる。
−  後で検討されるように、実際は、その他のサブステップが含まれる可能性がある。
【００６８】
ここで図１、２、および３を参照すると、上記の方法の実施形態においては、ブートローダのコンポーネント１５、１６、１７が、最初、ユーザ信頼デバイス１０に記憶される。好適なデバイスの例は、導入で思い起こされたいわゆるゾーン・トラステッド情報チャネル・デバイスである。このようにして、コンピュータ１０１の一時的なブートに関して改善された保証が与えられる。例えば、雇い主によって提供されず、その代わりに従業員の持ち物である可能性があるＰＣとは無関係に、雇い主は、デバイスに存在するブートローダを容易に制御することができ、そうでなければ、デバイスで厳重な暗号化制御が提供され得る。
【００６９】
（ユーザ信頼デバイスを任意で利用する）上記の方法の実施形態の他に、本発明は、上述のコンポーネント１５、１６を備えたユーザ信頼デバイス１０として、またはさらにはこのデバイス１０およびデバイス１０が接続可能なコンピュータ１０１を含むより全般的なシステム１００として具現化され得ることに留意されたい。
【００７０】
デバイス１０は好ましくは安全なデバイスである、つまり、安全なメモリを備えているが、これは、必ずしもそうである必要はない。ユーザ信頼デバイスのその他の態様は、後で検討される。提供されるデバイス１０（ステップＳ１）は、コンピュータ１０１に接続可能である。そして、ユーザ信頼デバイスがコンピュータに接続する（ステップＳ２）と、少なくともブートローダのコンポーネント１６が、転送されたコンポーネント１６のその後の実行Ｓ４のためにコンピュータ１０１のメイン・メモリ１１０に転送される（ステップＳ３）。
【００７１】
この転送は、概して、初期化ファームウェア１２２、例えば、ＢＩＯＳによって、または初期化ファームウェア１２２、例えば、ＢＩＯＳを介して命令される。ブートローダが一部だけ転送されることが好ましい（例えば、ブートローダのコンポーネント１６がＰＣに転送される）とき、そのブートローダのその後の実行は、したがって、（例えば、ファームウェア１２２とインタラクションして）ＰＣで部分的に行われ、ユーザ信頼デバイスのコンポーネント１５で部分的に行われ、両方のコンポーネント１５、１６がインタラクティブに実行され得る。
【００７２】
変形形態において、ＰＣに転送されたブートローダのコンポーネント１６は、利用可能な付随する処理手段の種類に応じて、グラフィック・カードまたはコンピュータの任意の好適な拡張カードで実行される可能性もあることに留意されたい。ユーザ・デバイスで部分的で、コンピュータで部分的な同時（しかしインタラクティブな）実行が、とりわけ、以下で説明される実施形態の一部で望ましい。
【００７３】
ソフトウェア・モジュールＳＭｎも、最初、ユーザ信頼デバイス１０に記憶される可能性がある。この場合、最終的に保有される（つまり、最終的な組ＦＳの）ソフトウェア・モジュールは、ＲＡＭディスクとして後で記憶し、実行するために、ユーザ信頼デバイス１０からＰＣのメイン・メモリ１１０に転送される（ステップＳ８）。変形形態において、ソフトウェア・モジュールは、遠隔のサーバ、またはＰＣのローカルにさえ記憶される可能性があり、それらのソフトウェア・モジュールの完全性は、暗号チェックサム（cryptographic checksum）などを用いて検証され得る。前者の場合、ＯＳがまだ実行されていないとしても、サーバに連絡するためにさらなる通信ステップが必要とされる。これを可能にする特定の方法が、後で検討される。
【００７４】
ブート・プロセスは、したがって、以下によって完了し得る。
−  ユーザ信頼デバイス（または別のソース、ローカル・コンピュータ、ネットワークなど）から最終的に保有されるソフトウェア・モジュールをロードすること、および
−  好ましくは、前記モジュールをＲＡＭディスクとして記憶し、それらのモジュールを実行する前にそれらのモジュールを復号すること
−  前記モジュールをＲＡＭディスクとして記憶し、それらのモジュールを実行すること。
動作の発生順の観点で、ソフトウェア・モジュールＳＭｍは、ソフトウェア・モジュールをＲＡＭディスクに記憶する前であるが、好ましくは、ソフトウェア・モジュールのどの潜在的な組が、一方でハードウェアの仕様に適合し、他方でＲＡＭディスクとしての記憶に好適であるかを決定した後に転送されることに留意されたい。
【００７５】
好ましくは、これは、どちらかの側、つまり、（おそらくはＢＩＯＳを含めることによって）最終的な組のソフトウェア・モジュールを転送するように最も都合良く命令するコンピュータまたはユーザ・デバイスで実行されるブートローダである。
【００７６】
ここで図３および４をより詳細に参照すると、上記の方法の実施形態は、ソフトウェア・モジュールをＲＡＭディスクとして記憶し、実行するように命令する前に、ソフトウェア・モジュールのいくつかの候補の組ＣＳ１、ＣＳ２からソフトウェア・モジュールの１つの最終的な組ＦＳを特定するステップＳ７をさらに含み得る。
【００７７】
この特定Ｓ７は、ユーザ信頼デバイス１０から受信される入力（ステップＳ７ｂ）に従って、好ましくは、（ＰＣで実行されるコンポーネント１６とインタラクティブに）信頼されたデバイス１０で実行されるブートローダのそのコンポーネント１５のおかげで行われ得る。
【００７８】
異なる種類のユーザ入力が、あり得る。ユーザは、ソフトウェア・モジュールがＲＡＭのみに記憶されるべきであるか、またはローカル・コンピュータのハード・ディスクにも記憶され得るのかを指定するように命令される可能性がある。例えば、任意のテストＴ、例えば、ソフトウェア・モジュールＳＭに論理的にリンクされたテストＴの実行中に、さらなるユーザ入力が要求される可能性がある。例えば、さらなる入力が、場所特定テスト（「あなたは現在スイスに居住していますか／あなたの会社はスイスにありますか？」）に関連付けられる可能性がある。しかし、そのような情報は、ＧＰＳデバイス、ＩＰネットワークと国とのマッピングなどのその他の手段によって推測される可能性もある。さらに別の入力は、会社のＰＣが検出されたかどうかなどに関する可能性がある。
【００７９】
モジュールの複数のあり得る組（候補の組ＣＳ１、ＣＳ２、．．．）が見つかった場合、どの組ＦＳを最終的に保有すべきかを決定するためにさらなるステップが必要とされる。さらなるユーザのインタラクションまたはポリシーの検査が、その目的のために使用される可能性がある。最終的な組を確認するための入力が、例えば、候補の組を確認のためにユーザに送った（ステップＳ７ａ）後に、または任意の前の段階で伝達されたユーザの選択に基づいて、もしくはさらにはユーザが修正可能であることが好ましい既定の選択に基づいて行われる可能性がある。
【００８０】
さらなるユーザのインタラクション（例えば、ユーザが、デバイス１０およびディスプレイ上の制御ボタンによってリストの中の最終的な組ＦＳを選択する）が、別の状況ではマシンをブートするために使用される同じデバイス１０によって、例えば、デバイス１０で実行されるコンポーネント１６とインタラクティブにデバイス１０で実行されるブートローダのコンポーネント１５によって実行されることが好ましい。それでもなお、どの最終的な組ＦＳを保有すべきかに関する判断は、その他のモジュール、例えば、後で説明される何らかのハードウェア信用性証明コンポーネントまたは仮想化検査コンポーネント１７によって自動的になされる可能性がある。その目的でデバイス１０を用いることは、人がコンピュータ１０１およびその状態に対して持つ信用性に基づいて特定の活動を有効化／無効化することができることを人が望む可能性があるので好ましい。また、マシンがどの程度信用され得るかは、特にＢＹＯのシナリオでは大きく変わり得る。
【００８１】
例えば、人は、ＰＣが（完全には）信頼され得ないと結論づけられる場合でさえも電子メール送信機能のみを許可し、例えば、デバイス１０によって電子メールを検証することを可能にする可能性がある。
【００８２】
変更形態において、ポリシーの検査は、任意のさらなるユーザのインタラクションによって、またはいかなるさらなるユーザのインタラクションもなしに、ソフトウェア・モジュールの最適な最終的な組ＦＳを特定するのに役立つ可能性がある。また、ユーザのインタラクションは、マシンをブートするために使用される信頼されたデバイス１０とは無関係に含められる可能性があり、例えば、ユーザが、ブート・プロセス中にＰＣで直接モジュールの最終的な組ＦＳを選択するように促される可能性がある。
【００８３】
実施形態において、候補の組ＣＳ１、ＣＳ２の決定ステップＳ６は、任意の好適な基準に従ってソフトウェア・モジュールを優先順位付けすること（ステップＳ６ｃ）を含む可能性がある。この優先順位付けは、後で検討されるように、ソフトウェア・モジュールに関して遂行されたテストの結果に依存する可能性がある。好ましくは、最もセキュリティ上の機密性が高いソフトウェア・モジュールが、ＲＡＭディスクに記憶されるために優先される。セキュリティの基準は、例えば、以下の考慮すべき事項、つまり、
１．セキュリティ上の機密性が高いデータが修正される可能性がある、
２．セキュリティ上の機密性が高いデータが読み取られる可能性がある、または
３．いかなる場合もセキュリティ上の機密性が高いデータがアクセスされない可能性がある、
あるいはこれらすべての可能性があるかどうかに基づく可能性がある。
【００８４】
例えば、そのような機密性が高いデータに関するユーザの意図（例えば、そのような機密性が高いデータが読み取られるのみで、修正されてはならないのかどうか）が、ユーザ信頼デバイスを通じて問い合わされる可能性があり、この入力に基づいて、ユーザ信頼デバイスに記憶されたソフトウェア・モジュールＳＭが、無効化される可能性があり、つまり、コンピュータにロードされない可能性がある。
【００８５】
その他の基準は、データが会社全体をリスクに晒すよりも個々のプロジェクトをリスクに晒すことなど、会社のポリシーに応じて定義され得る。多くのその他の可能な例が存在する。この実施形態は、いかなる特定のポリシーの枠組みにも限定されず、適切なポリシーの枠組みを選択することは、本発明とは本質的に独立している（orthogonal）。
【００８６】
最も機密性が高いソフトウェア・モジュールは、ＲＡＭディスクとして記憶され、実行される可能性が高いが、提案される方法の実施形態は、既に触れられたように、ＲＡＭディスクと相補的にその他のメモリのサポートを使用する可能性があることは変わらない。例えば、図３または４に示されたように、ソフトウェア・モジュールの追加の組ＡＳが決定される可能性があり（ステップＳ１０）、その組ＡＳは、ＲＡＭディスクで実行されるように保有されるソフトウェア・モジュールの最終的な組ＦＳに入っていないモジュールを含む。そのとき、この追加の組のソフトウェア・モジュールは、必要に応じて、その後実行する（ステップＳ１１ｂ）ためにコンピュータの物理的なストレージ媒体１２０に記憶され、ステップＳ１１ａ、好ましくは暗号化される。したがって、ＲＡＭディスクの能力が制限される（例えば、制限されたメモリがＲＡＭディスクに割り当てられ得る）状況であっても、ＰＣで実行されるソフトウェア・モジュールの選択に関してより高い柔軟性が提供され得る。モジュールのこの追加の組を決定すべきかどうかは、さらなるユーザ入力に基づいて、またはポリシーに基づいて判断される可能性がある。
【００８７】
変形形態において、追加の組のソフトウェア・モジュールは、ユーザ信頼デバイス自体に残され（後者は、コンピュータに取り付けられると、とにかくコンピュータのある種の物理的なストレージ媒体１２０である）、そこから実行される可能性さえある。しかし、そのデバイスでの実行は概して遅いので、追加の組のソフトウェア・モジュールを２次ストレージ媒体１２０に、つまり、３次ストレージではなく、メイン・メモリの「より近く」に記憶することが好ましい。
【００８８】
次に、図３を参照して、候補の組ＣＳ１、ＣＳ２を決定する（ステップＳ６）目的でステップＳ５ｉｉでアクセスされるハードウェアの仕様について、さらに説明される。概して、この方法は、図３に示されたように、例えば、ハードウェアの仕様の評価を実行する外部エンティティによって提供されるこの評価の結果を使用し得る。しかし、好ましくは、この評価は、図３のステップＳ５ｉｉを実施するためのあり得るステップを示す図４に示されたように、方法の一部である。どちらの場合も、コンピュータのハードウェアの仕様を評価することは、図４のステップＳ５１．１に示されるように、いくつかのテストＴを含み得る（例示として図５を参照されたい）。
【００８９】
実行されるテストＴの少なくとも一部は、ソフトウェア・モジュールとは独立して提供され、さらに、ユーザの要件の評価Ｓ５ｉの前に実行され得る。しかし好ましくは、最初の組ＩＳで提供されるそれぞれのソフトウェア・モジュールＳＭ１、ＳＭ２．．．は、（例えば、ユーザによって）実行されるソフトウェアのみでなく、図５で記号的に示されたように、ソフトウェア・モジュールが使用され得る前に実行されるテストＴ（またはこれらのテストへの論理的なリンク）を記述するメタデータも含む。したがって、実施形態において、テストＴは、ソフトウェア・モジュールに論理的にリンクされる。
【００９０】
そのようなテストＴは、実行されるテストではなく評価される条件として与えられる可能性がある（テストと条件との両方が、本明細書においては「テスト」と呼ばれる）ことに留意されたい。したがって、それぞれのソフトウェア・モジュールは、それらのソフトウェア・モジュールに関連するテストを含む可能性があり、テストは、ソフトウェア・モジュールが記憶され得るかどうか、およびどこに記憶され得るか、例えば、揮発性メモリ（コンピュータのＲＡＭ）、（ハード・ディスクなどの）永続的なメモリに記憶され得るか、またはユーザ信頼デバイス１０がやはり接続されるコンピュータによってまったくアクセスされ得ないかどうかを決定することにつながる。図４および図３に見られるように、上記のテストの実行（または条件の評価）の結果により、後で、とりわけステップＳ６で使用されるさまざまな結果が生じる。
【００９１】
上で触れられたように、（例えば、テストＴが埋め込まれた）それぞれのソフトウェア・モジュールに関するテストＴを記憶する代わりに、テストは、好ましくは、実行される実行可能なプログラム・コードとして提供され、ソフトウェア・モジュールとは別に記憶される。それにもかかわらず、テストは、識別子またはポインタによって特定される可能性があり、ソフトウェア・モジュールＳＭｉは、対応する識別子またはポインタを参照するだけである。これは、それぞれのテストが、たとえ複数のソフトウェア・モジュールの間で共有されるとしても一回だけ記憶されるという利点を有する。これは、図５に示される。
【００９２】
（図５に示されるように）ソフトウェア・モジュールに論理的にリンクされたテストＴは、その他のソフトウェア・モジュールに関係するグローバルな関心の対象を有する可能性があることに留意されたい。その場合、テストの実行の冗長性が、テストが既に評価されたかどうかを試験することによって回避され得る、図４のステップＳ５１．１．１およびＳ５１．１．３。したがって、全体的なテストが実行されると、そのテストを再び実行する必要はない。したがって、テストの一部が、ソフトウェア・モジュールにマッピングされる可能性がある（またはマッピングされない可能性がある）が、既に行われたことを繰り返す必要はない。
【００９３】
詳細に、図４は、テストがソフトウェア・モジュールに論理的にリンクされる（図４または５に表されているように、それぞれのソフトウェア・モジュールが１つまたは複数のテストに関連付けられる可能性がある）状況で、どのソフトウェア・モジュールが使用され得るか、およびそれらのソフトウェア・モジュールをどこに記憶すべきか（コンピュータのディスクに記憶すべきか、またはＲＡＭディスクだけに記憶すべきか）を決定するためのステップの例を示す。
【００９４】
第１に、Ｓ５１、ユーザ信頼デバイスを通じて使用され得る第１のソフトウェア・モジュール（または残りのモジュールのうちの第１のモジュール）が選択される。次に、このソフトウェア・モジュールに関連する第１のテストが選択される、Ｓ５１．１。上述のように、この同じテストが既に実行されたかどうかが検査される（Ｓ５１．１．１）。実行された場合、対応する結果が取り出される、Ｓ５１．１．３。実行されていない場合、テストがコンピュータで実行され、Ｓ５１．１．２、テストの結果が記憶される、Ｓ５１．１．４。実行される別のテストが存在する場合、Ｓ５１．１．５、ソフトウェア・モジュールに対応するそれぞれのテストが実行されるように、このテストが選択される、Ｓ５１．１．６。
【００９５】
すべてのテストが実行されると、ソフトウェア・モジュールの一部である条件が評価され、Ｓ５１．２、その評価は、その後、前記ソフトウェア・モジュールがコンピュータに、永続的なもしくは揮発性メモリに（または潜在的にそれら両方に）記憶され得るかどうかについてブートローダに知らせる。この判断が示されると、Ｓ５１．３〜５、同じステップが、すべての後続のソフトウェア・モジュールＳＭに関して繰り返される、Ｓ５１．７。
【００９６】
グローバルなテストの例として、おそらく、アクセスされる必要がある最も重要なハードウェアの仕様はコンピュータのメイン・メモリの容量に関係し、その理由は、後者が今度はどのメモリがＲＡＭディスクに割り当てられ得るかを決定するからである。しかし、（例えば、ポリシーによって）限られたアプリケーションが許される一部のシナリオにおいては、限られたメモリだけで事足り、したがって、メイン・メモリの容量を試験することは単純に飛ばされる可能性がある。同様に、その他のシナリオでは、この容量が、予め知られているか、またはこれまで通り予測され得る。
【００９７】
通常試験され得るその他のグローバルなハードウェアの仕様は、以下である。
−  コンピュータのプロセッサ・アーキテクチャ（例えば、３２対６４ビット、図５の「６４ｂｉｔ」）、
−  コンピュータのストレージ媒体１２０の容量、および
−  仮想化がサポートされるかどうか（図５の「ｈａｓｖｍ」）。このテストは、以下で検討されるように、セキュリティ上のリスクになり得る、コンピュータが仮想環境内で（既に）実行されているかどうかを調べること（「ｉｎｖｍ」）とは異なることに留意されたい。もっと正確に言えば、「ｈａｓｖｍ」テストは、仮想コンピュータ、つまり、この方法の制御下に残る仮想コンピュータを起動し、この方法の一部を実施する目的で、その仮想コンピュータ内でソフトウェアを実行させることをコンピュータが許すかどうかを調べる。
【００９８】
加えて、実行され得るその他のテストは、以下である可能性がある。
−  コンピュータがどこにあるか（ｍｉｓｃテスト）
−  ユーザが何をしたいか（データの読み取りのみ、またはデータの修正）
【００９９】
好ましくは、上記のハードウェアの能力は、２つのその他の種類のテスト、すなわち、（ｉ）マシンの信用性を検査すること（図５の「ｂｉｏｓ」テスト）、および（ｉｉ）マシンが既に仮想化された環境の下にあるかどうか（図５の「ｉｎｖｍ」テスト）を実行した後に試験される。これは、マシンが信頼され得ない場合、ハードウェアの能力を調べても無駄である可能性があるからである。反対に、ハードウェアの仕様に関する情報は、ブート・プロセスの初めから、または厳密にはマシンの信用性を検査する、もしくはマシンが仮想化された環境の下にあるかどうかを試験する前のステップから既に利用可能である可能性がある。より広く、ハードウェアの能力は、図３および５で仮定された順序にかかわらず、プロセスの異なる段階で試験され／取得される可能性がある。
【０１００】
現時点で、ＲＡＭディスクの割り当てのより詳細な態様が、図３および６を参照して検討される。より広く、既に説明されたように、ステップＳ９を実施する目的で、ＲＡＭディスクにソフトウェア・モジュールを記憶し、実行するのに好適な任意の方法が考えられ得る。２つの主な変形形態が、以下で検討される。第１の変形形態は、最初のものよりも実装がわずかに複雑であるが、ＲＡＭディスクでのよりコンパクトなファイルの記憶を可能にする。
【０１０１】
第１に、両方の変更形態は、概して、ＲＡＭディスクの使用方法から暗黙的に、ＲＡＭディスクのためにメモリを割り当てるステップＳ９ａを含む。図３の図示にかかわらず、このメモリの割り当ては、ＲＡＭディスクに割り当てられたメモリが、ひいては、どれだけの／どのソフトウェア・モジュールがＲＡＭディスクとして実際に記憶され得るかを決定するので、ステップＳ６の前、つまり、ソフトウェア・モジュールの候補の組ＣＳ１、ＣＳ２を決定する前に実行されることが好ましい。このメモリの割り当ては、コンピュータのメイン・メモリの容量に関係する情報を取得した後に実行されることがやはり好ましく、その理由は、既に触れられたように、後者が、どのメモリがＲＡＭディスクに割り当てられ得るかを決定するからである。それでもなお、例えば、（例えば、ポリシーによって）限られたアプリケーションが許される一部のシナリオでは、限られた、所定のＲＡＭディスクのメモリで事足りる可能性があり、したがって、ＲＡＭディスクのメモリの割り当ては、候補の組ＣＳ１、ＣＳ２を決定した後にさえ実行される可能性があり、候補の組ＣＳ１、ＣＳ２は、所定のＲＡＭディスクのメモリに収まるように制約される可能性がある。その場合、所定のＲＡＭディスクのメモリに応じて、図３に示されたように、ステップＳ９ａにおいて、メモリがＲＡＭディスクに割り当てられ得る。
【０１０２】
基本的に、第１の変形形態においては、ソフトウェア・モジュールを記憶するステップが、以下のサブステップに分かれる。
第１に、ステップＳ９ｂ、（ＲＡＭディスクに関する）ファイル・システム１２１ｆｓのメタデータＭＤｌが、最終的な組ＦＳに実際に保有されるソフトウェア・モジュールに応じて、つまり、基づいて計算される。これらのメタデータは、どの（ソフトウェア・モジュールの）ファイルが記憶されるべきであるか、およびそれらのファイルがファイル・システム上のどこに記憶されるべきであるか、より厳密には、どのファイルがＲＡＭディスクのどのメモリ・セクションに記憶されるべきであるかを指定する。第１の変形形態の独自性は、メタデータが、ＲＡＭディスクのメモリ・セクションに後で記憶されるファイルを考慮してメタデータが前もって計算されることである。換言すると、ＲＡＭファイル・システムのアーキテクチャは、通常のＲＡＭディスク・ファイルシステム構築方法とは異なり、これらのファイルが準拠しなければならない通常のアーキテクチャであるのではなく、後で記憶される特定のファイルに少なくとも部分的に基づく。
第２に、メタデータが、個々のメモリ・セクション、例えば、メモリ・ブロック（またはデータ・ブロック）に書き込まれ（ステップＳ９ｃ）、
最後に、最終的な組のソフトウェア・モジュールのファイルＦｉｊが、ファイル・システムで、メモリ・セクションに、メタデータＭＤｌに従って１つずつコピーされる（ステップＳ９ｄ）。例示として、図６は、利用可能なＲＡＭ空間の一部の抽象的な表現である。ステップＳ９ｂにおいて、とりわけ、メタデータＭＤｌを含むメタデータが計算される。ステップＳ９ｃにおいて、メタデータＭＤｌが、それらのそれぞれのメモリ・ブロックに書き込まれる。そして、ステップＳ９ｄ、ファイルが、メタデータＭＤｌに従ってメモリ・ブロックにコピーされる。図６においては、ソフトウェア・モジュールＳＭ８、ＳＭ５、ＳＭ１などが（マシンのハードウェアの能力とＲＡＭディスクの実装との両方に適合する）最も機密性が高いモジュールとして保有された（図５参照）ので、それらのモジュールの対応するファイル（理解しやすくするためにモジュール毎に２つのファイルだけを仮定する）が、１つずつ（Ｆ８１、次にＦ８２、次にＦ５１など）コピーされる。ステップＳ９ｃおよびＳ９ｄは、任意の順序で実行される可能性、並列に実行される可能性などがあることに留意されたい。
【０１０３】
例えば、図６の例のように、以下を仮定する。
−  保有される第１のソフトウェア・モジュールＳＭ８の２つのファイルＦ８１およびＦ８２が、それぞれ、２００００バイトのサイズを有し、
−  保有される第２のソフトウェア・モジュールＳＭ５の２つのファイルＦ５１およびＦ５２が、それぞれ、７０００バイトのサイズを有する。
ここで、メタデータＭＤ１は２０００バイトを消費すると仮定する。すると、メタデータＭＤ１は、基本的に、以下を記述する。
バイト０：メタデータＭＤｌ：
Ｆ８１，バイト２０００で開始，サイズ２００００
Ｆ８２，バイト２２０００で開始，サイズ２００００
Ｆ５１，バイト４２０００で開始，サイズ７０００
Ｆ５２，バイト４９０００で開始，サイズ７０００
等々
【０１０４】
したがって、ステップＳ９ｄにおいて、
−  ファイルＦ８１が、バイト２０００にコピーされる
−  ファイルＦ８２が、バイト２２０００にコピーされる
−  等々
【０１０５】
実際のレイアウトは、例えば、メモリのアラインメントの要件を守るために実際には少し異なって見える可能性がある。しかし、上記の第１の変形形態の説明は、レイアウトの肝心な態様を示す。特に、結果として得られる可能性がある１つのあり得るデータ・シーケンスは、以下である。
−  ＭＤｌ
−  Ｆ８１
−  Ｆ８２
−  Ｆ５１
−  Ｆ５２
−  Ｆ１１
−  Ｆ１２
−  等々
別のあり得る順序は、メタデータを分割することからなり、つまり、
−  ＭＤ８１
−  Ｆ８１
−  ＭＤ８２
−  Ｆ８２
−  ＭＤ５１
−  Ｆ５１
−  ＭＤ５２
−  Ｆ５２
−  ＭＤ１１
−  Ｆ１１
−  ＭＤ１２
−  Ｆ１２
−  等々
【０１０６】
上に例示されたように、コピーされる各ファイルに関してメタデータは、通常のＲＡＭディスク・ファイルシステムがするように事後に計算および記憶されない。確かに、この第２の変形形態によれば、人は、以下のように進む。
ａ．ＲＡＭディスクのためにメモリを割り当てる
ｂ．例えば、ユーザ・データのために通常のオペレーティング・システムが使用するようなファイルシステムをＲＡＭディスク上に生成する
ｃ．例えば、人が通常のＧＰＯＳでファイルをコピーするように、個々のモジュールからＲＡＭディスクにファイルをコピーする。このようにして、メタデータは、ファイルをコピーする間に徐々に生成される。しかし、データは、すべてのファイル・サイズが予め考慮に入れられ、最適なレイアウトが計算される前の変形形態ほど効率的に記憶され得ない。第２の変形形態は、例えば、標準的なＦＡＴ３２ファイルシステムがｒａｍディスクのために使用される場合に、以下と同様の構造をもたらすだけである。
−  ファイル・システムのメタ・データ
−  どのブロックがファイルによって占められるか、および各ファイルによって占められたブロックを示すファイル割り当てテーブル（ＦＡＴ）
−  ファイル割り当てテーブル（ＦＡＴ）に示される任意の順序で潜在的にインターリーブされた各ディレクトリ、ファイル、および個々のファイルのブロックに関するメタデータのブロック。
【０１０７】
上記の変形形態の結果は、未割り当てのブロックが追跡される必要がなく、したがって、ファイル割り当てテーブル（ＦＡＴ）または同様の技術が使用される必要がないので、通常のＲＡＭディスク・ファイルシステムの結果よりもコンパクトであり、ＲＡＭメモリを大幅に節約することを可能にするものである。まとめると、第２の変形形態は、第１の変形形態よりも実装するのがより簡単である。一方、第２の変形形態は、より効率の低いメモリ管理を提供する。さらに、上記の２つの変形形態の態様を組み合わせる混成のソリューションが、考えられ得る。
【０１０８】
ＲＡＭディスクの実装に必要とされる計算は、コンピュータ１０１自体で実行されることが好ましい。変更形態において、これは、ユーザ信頼デバイス１０で行われる可能性もあり、その場合、予め構築されたＲＡＭディスク・イメージが、コンピュータに転送される。さらに別の選択肢は、ソフトウェア・モジュールのすべてのあり得る組ＣＳｐを予め計算し、それぞれの組をユーザ信頼デバイスに別々のあり得るイメージとして記憶することである。しかし、そのようにすることは、モジュールをおそらくは複数回記憶することにつながり、これは、最もよくある状況で望ましくない。さらに、そのような選択肢は、例えば、最大で例えば２つまたは３つのあり得る組しか決して存在しないことが分かっているときに考えられ得る。
【０１０９】
既に喚起されたように、本発明は、コンピュータ１０１のメイン・メモリ１１０で少なくとも部分的に実行可能であり、ブートローダの実行が（主なステップＳ５、Ｓ６、およびＳ９で始まる）方法を参照して上で既に検討されたステップを行うことを引き起こすように構成されたコンポーネント１５、１６としてやはり具現化され得る。
【０１１０】
加えて、方法は、さらに、図２に示されるようなユーザ信頼デバイス１０として、あるいはユーザ信頼デバイス１０およびコンピュータ１０１、典型的にはＰＣ、モバイル用途のためのＰＣ、ノートブックもしくはネットブック、またはＰＤＡもしくはスマートフォンを含む（図１のような）コンピュータ化されたシステム１００として具現化され得る。コンピュータ１０１は、本明細書においては、コンピュータ、ホスト・コンピュータ、または単にＰＣと呼ばれる。
【０１１１】
図１から３を全体的に参照すると、信頼されたデバイス１０（外部トラスト・アンカーとも呼ばれる）は、とりわけ、以下を含む。
−  コンピュータ１０１との接続Ｓ２を可能にする接続インターフェース１２、および
−  以下のものを記憶する永続的メモリ１４
〇前記インターフェース１２を介してデバイス１０をコンピュータ１０１と接続すると、デバイス１０またはコンピュータ１０１あるいはその両方で、既に説明された動作の実行を可能にすることまたはトリガすることなどのために設計されたブートローダ、ならびに
〇やはり好ましくは、アプリケーション・コンポーネント、オペレーティング・システム・イメージ・コンポーネント、およびより好ましくはハードウェア・コンポーネントのドライバも含むソフトウェア・モジュール、ならびに実行されるテストＴ（またはテストへの論理的なリンクのみ）。
【０１１２】
このデバイスは、概して、会社のまたは個人の安全なデバイスであり、すなわち、ＵＳＢデバイス、好ましくはＵＳＢフラッシュ・ドライブ（組み込まれたユニバーサル・シリアル・バス（ＵＳＢ）インターフェースに加えてフラッシュ・メモリを含むデータ・ストレージ・デバイス）、このユーザのみが使用するか、またはこのユーザが勤めている会社によって所有され、制御されるモバイル電話または携帯情報端末（ＰＤＡ）などの会社またはユーザが所有し、制御するデバイスである。概して、このデバイスは、２００ｇ未満、好ましくは６０ｇ未満、より好ましくは４０ｇ未満の重さである。
【０１１３】
既に示唆された可能性は、とりわけ、ソフトウェア・モジュールＳＭｎの一部もしくはすべてを（それらのモジュールがデバイス１０に記憶される代わりに）分散させること、またはさらにはモジュールのどの最終的な組ＦＳを保有すべきかの判断を助けることなどのために、第３者、例えば、サーバ３０（図１参照）を含めることである。その場合、ブートローダは、サーバ３０に接続するようにデバイス１０またはコンピュータ１０１に命令するようにさらに構成される。「集中」サーバは、さまざまな、あり得る変わり続けるソフトウェア・モジュールのコンポーネントおよびポリシーの規則に関してより容易に更新され得る。
【０１１４】
その目的で、ブートローダは、
−  コンピュータ１０１のネットワーク・カード１２４と後でインタラクションするため、および（ネットワーク・カード１２４によって可能にされる）ネットワーク１６５を介した通信を開始し、サーバ３０に接続するために初期化ファームウェア１２２とインタラクションすること、
−  コンピュータ１０１のネットワーク・カード１２４と直接インタラクションすることであって、その場合には信頼されたデバイス１０に記憶されたネットワーク・カードのドライバにアクセスすることを必要とする、直接インタラクションすること、または
−  コンピュータ１０１のＯＳを部分的に実行する、つまり、コンピュータ１０１を介してサーバ３０に接続するために必要なＯＳのコンポーネントだけをロードするためにファームウェア１２２とインタラクションすること、
あるいはこれらすべてを行うように構成され得る。
【０１１５】
デバイス１０とサーバ３０との間の通信は、以下の手段によって行われることが好ましい。
−  コンピュータ１０１を通じたサーバ３０からデバイス１０へのＨＴＴＰ接続、
−  エンド−エンド認証（end-end authentication）、および
−  必要に応じて、デバイス１０の安全なメモリ１４１に記憶され得る署名およびその他の暗号化データ１３。
【０１１６】
代替として、人は、サーバと直接接続することなどのために、デバイス１０にネットワーク・アクセス手段、例えば、（有線または無線）ネットワーク・デバイスを装備させることを好む可能性がある。そのようなソリューションは、幾分、コストが高い。しかし、サーバに連絡するためにコンピュータ１０１とのさらなるインタラクションが必要とされないので、レイテンシーが削減される。ここでもやはり、サーバ３０との通信は、エンド−エンド認証および暗号化を使用する可能性がある。
【０１１７】
次に、図２をより詳細に参照すると、永続的メモリ１４は、好ましくは以下を含む。
−  コンポーネント１５、１６の第１の部分１５１（または所与の部分）、検証コンポーネント１７などが記憶され得る安全なメモリ１４１、および
−  （１つまたは複数の）同じブート有効化コンポーネント１５〜１７の第２の部分１５２（またはその他の部分）が記憶され得る安全でないメモリ１４２、例えば、ＳＤカード。
【０１１８】
安全なメモリの存在は、ユーザ信頼デバイスを「安全な」デバイスにする。コンピュータ１０１がブートローダの所与のブロックまたは任意のデータ・チャンクを要求するとき、デバイスのＣＰＵ１１は、例えば、安全なメモリ１４１に記憶された暗号化データ１３を用いて要求されたブロックを復号して要求されたブロックを提供するようにメモリ１４に存在するソフトウェアによって促される。好ましい実施形態はこのために対称暗号化を用いる（したがって、復号と暗号化との両方に同じ鍵が使用される）が、復号鍵だけで十分である。
【０１１９】
好ましくは、安全なメモリに存在する（１つまたは複数の）ブート有効化コンポーネント１５〜１７の（１つまたは複数の）部分は、メモリの制約のために、安全なメモリのサイズの半分未満を占める。しかし理想的には、ブート有効化モジュールのすべての部分は、できるだけわずかなメモリを占める。例えば、（およそ３２ｋｏを消費し、典型的には６４ｋｏ未満を消費するネットワーク・サーバに連絡するためのコードを除いて）ブート有効化コンポーネント１５〜１７のそれぞれの部分のために４ｋｏ未満を使用するいくつかの実装が、正常に試験された。当業者は、遠隔のサーバに連絡する機能を実装するコードが、ユーザ信頼デバイス１０に記憶された複数のブート有効化モジュールに共有され得ることを認めるであろう。
【０１２０】
デバイス１０の接続インターフェース１２は、例えば、以下の種類である可能性がある。
−  ユニバーサル・シリアル・バスまたはＵＳＢ、
−  外部小型コンピュータ・システム・インターフェースまたはＳＣＳＩ、
−  外部シリアル・アドバンスト・テクノロジー・アタッチメントまたはＳＡＴＡ、
−  Ｆｉｒｅｗｉｒｅ、または
−  Ｔｈｕｎｄｅｒｂｏｌｔ。
しかしより広く、これは、コンピュータが外部デバイス１０からブートすることを可能にする任意の現在のまたは将来の（有線または無線）コネクタである可能性がある。加えて、同じインターフェース１２が、さらに、ユーザ信頼デバイス１０がビーマ（beamer）、プリンタ、または任意のその他の出力デバイスなどの任意の外部デバイスと通信することを可能にし得る。
【０１２１】
通常通り、ユーザ信頼デバイス１０は、より広く、永続的なメモリ１４を含み、好ましくは非永続的なメモリも含む（明示されていないが、非永続的なメモリは処理手段１１の一部と見なされ得る）メモリに結合された暗号プロセッサなどのＣＰＵ（または計算手段）１１を設けられる可能性がある。
【０１２２】
この文脈で、永続的なメモリは、とりわけ、コンピュータ化された方法、例えば、ＣＰＵ１１、１０５によって実行される、上で思い起こされたブート有効化コンポーネント１５〜１７を記憶する。もちろん、本明細書において思い起こされるブート有効化コンポーネント１５〜１７は、異なる機能を提供された単一のモジュールと見なされる可能性があり、デバイスおよびコンピュータで実行可能である可能性がある。
【０１２３】
必要であれば、安全なデバイス１０は、メモリ・カード、例えば、安全でないメモリ１４２または任意のスマート・カードに記憶されたユーザの資格証明（credential）を読み取るためのカード・リーダを有する。好適な使用は、そのようなデータ、例えば、カードに記憶されたユーザの資格証明から安全になされ得る。特に、信用できる接続が、ホスト１０１を介して、そのようなデータを用いてユーザ（または厳密に言えばデバイス１０）と第３者、例えば、サーバ３０との間で確立され得る。変形形態において、ユーザの資格証明は、安全なデバイスに直接記憶され得る。さらに、（制御ボタンおよび表示のような）通常のインターフェースが、ユーザとのインタラクションを可能にするために提供される可能性がある。最も明白に、安全なデバイス１０上のそのような信用できる表示が、ユーザが現在いる環境についてのユーザの主張を得るために使用される可能性がある。このようにして、例えば、限定することなく、ユーザは、判断ステップＳ７に知らせるために、コンピュータ１０１を起動するとき、ユーザがインターネット・カフェなどの公共の場にいないことを確認するためにサーバ３０による要求を確認する可能性がある。
【０１２４】
既に検討されたように、例えば、どのモジュールがＲＡＭディスクに記憶されるべきかを決定する前に、コンピュータ１０１の信用性を評価するためにいくつかのテストが実行され得る。ブートローダのコンポーネント１７は、その目的専用である可能性がある。既に検討されたグローバルなテスト以外に、２つの種類のテストが特に注目され、以降で詳細に検討される。第１の種類のテストは、仮想化に反応するコードの実行が仮想化された環境で行われたかどうかを試験するためにコンピュータ１０１で仮想化に反応するコードを実行することを中心に展開する。この第１の種類のテストが、以降で簡潔に検討される。
【０１２５】
基本的に、この種類のテストのために行われることは、以下のステップを含む。
−  ステップＳ５１．１．２：仮想化に反応するコードを実行し、実行が完了すると完了データを発するようにコンピュータ１０１のプロセッサ１０５に命令し、
−  ステップＳ５１．２：そのような完了データに基づいて、実行が仮想化された環境で行われたかどうかを決定し、
−  そして、ステップＳ６において、仮想化に反応するコードの実行が仮想化された環境で行われたかどうかにも応じてソフトウェア・モジュールの候補の組が決定される可能性がある。仮想化された環境が検出される場合、利用可能なソフトウェア・モジュールの選択は、ポリシーの規則に従って制限されるかまたは場合によっては防止される可能性が高い。
【０１２６】
より詳細には、デバイス１０およびコンピュータ１０１が提供されると仮定する（図３のステップＳ１）。そして、デバイスが接続すると（ステップＳ２）、好ましくは以下の動作が実行される。
−  コンピュータ１０１が、ユーザ信頼デバイス１０からブートを開始する
−  プロセッサ１０５が、何らかの参照コードを実行するように命令される
〇問題のコードは、好ましくは、デバイス１０自体、例えば、ブートローダのコンポーネント１７によって提供される。変形形態において、コードの識別子またはやはりアドレスが、プロセッサ１０５に渡される可能性がある。概して、このコードは、試験されるマシン（の種類）に依存する可能性があるいくつかの命令を含む
〇このコードは、仮想化された環境に反応するように選択され、したがって、「仮想化に反応するコード」と呼ばれる。つまり、このコードは、このコードが仮想化された環境で実行されるかまたはネイティブで実行されるかに応じて異なるように実行され、異なる実行の特徴が生じる。実行の特徴は、とりわけ、以下のいずれかまたは両方で異なる可能性がある。
◆実行によって生成される結果、
◆タイミングの特徴、プロセッサのサイクルなどによって測定可能な計算量。例えば、ｘ８６に基づくＰＣに関して特に注目される計算は、リアル・モードとプロテクト・モードとの間を切り替えることである。
〇プロセッサへの命令により、仮想化に反応するコードの実行は、コンピュータ１０１がブートを開始する間に、つまり、ブート・プロセスが開始した後、そのブート・プロセスが完了する前に、つまり、どのソフトウェア・モジュールＳＭｎをロードすべきかを判断する前に行われる。
〇プロセッサ１０５は、さらに、実行が完了すると、何らかの完了データ（例えば、結果、タイムスタンプ、またはタイムスタンプが付けられ得るイベントなど）を発するように命令される
−  動作の次の組は、完了データに基づいて、実行が仮想化された環境で行われた（行われなかった）かどうか（言い換えると、同等に、実行が安全な環境で、例えば、ネイティブで行われたかどうか）を決定することであり、
−  最後に、実行が仮想化された環境で行われなかったと決定される場合、プロセスはさらに進む。
〇ステップＳ６に進む前に、以下で検討されるように、その他の条件が含まれる可能性がある（例えば、ＢＩＯＳ／ファームウェア１２２も試験される可能性がある）。
〇実施形態においては、実行が仮想化された環境で行われたかどうかを決定する問題は、間接的に答えられ、例えば、ユーザのインタラクティブ性が必要とされる可能性があり、または評価の一部を付託し、サーバ３０で更新された比較を行うためにサーバ３０への接続が必要とされる可能性がある。３つの同様のシナリオが、想定され得る。
◆実行が仮想化された環境で行われなかったと決定される場合、ブート・プロセスは継続される。
◆反対に、実行が仮想化された環境で行われたと決定される場合、ブート・プロセスは、中止されないならば修正される。以下の範囲に及ぶいくつかのその後のシナリオが、考えられ得る。
●１つまたは複数のソフトウェア・モジュールが、物理的なストレージへの記憶に適さないと宣告され、ＲＡＭディスクにのみ記憶されるべきである
●１つまたは複数のソフトウェア・モジュールが無効化される
●デバイス１０がシャットダウンされ、つまり、いかなるデータ、鍵、ソフトウェア・モジュールなどもコンピュータ１０１に渡されない。
◆コンピュータ１０１をきれいにするためにパッチ／プログラムがロードされる場合、ソフトウェア・モジュールの抑制された組（一部のコンポーネントが許される）、またはＯＳの修正されたバージョンをロードすることにつながる可能性がある中間的なシナリオも、考えられ得る。
【０１２７】
やはり既に思い起こされたように、実行され得る第２の種類のテストは、コンピュータの初期化ファームウェア（例えば、ＢＩＯＳ）１２２を試験することからなる。基本的に、その場合に行われることは、以下のステップを含む。
−  ステップＳ５１．１．２：「ファームウェア・データ」がコードにマッピングされる。ファームウェア・データは、コンピュータ１０１の初期化ファームウェア１２２のプログラム・コードまたは前記初期化ファームウェア１２２によってアクセスされ得るデータあるいはその両方を含むデータである。結果として得られるコードは、「マッピング」コードであり、つまり、ファームウェアのプログラム・コードと区別されなければならない。および
−  ステップＳ５１．２：マッピング・コードの信用性について結論が出される、つまり、このコードの信用性が証明され得る。
【０１２８】
この第２の種類のテストも、後続のステップＳ６に（およびおそらくはＳ１０にも）影響を与え、つまり、ソフトウェア・モジュールＳＭｎの候補の組が、上記のコードが証明され得るかどうかにも応じて決定されることが好ましい。
【０１２９】
外部ブート媒体からコンピュータを再起動し、外部媒体から（セキュリティの観点で「きれいな」）「きれいな」ＯＳを起動するか、またはそうでなければ信頼されたＯＳを起動することは、ＰＣで実行されるいずれかのソフトウェアがＰＣのオペレーティング・システム上に存在する可能性があるいくつかのウィルスおよび悪意のあるソフトウェア・マルウェアによる攻撃に晒されている可能性があるという問題を解決する１つの方法である。しかし、この手法は、とりわけ、以下の疑問、つまり、人がＢＩＯＳと、より広く、ＰＣのスタートアップ時に含められた任意の初期化ファームウェア１２２とを信頼できるのか？という疑問を生じさせる。さらに言えば、初期化ファームウェアは、感染している可能性があるコンピュータを起動しながら実行されるように促される可能性がある。この問題を解決するために、上記の（「ｂｉｏｓ」）テストは、初期化ファームウェアのプログラム・コードまたは初期化ファームウェアによってアクセスされ得るデータあるいはその両方を含むデータを、ブートを開始し、その後、そのような「ファームウェア・データ」を検査している間に取得することによって、そのようなファームウェアの信用性を証明することを可能にする。
【０１３０】
コンピュータが外部ブート媒体からブートすることをどのようにしておよびどの程度続けるかは、仮想化テストと同じく、ファームウェア・データが証明されるかどうかに依存する可能性がある。両方のテストの１つの重要な要素は、定義によって通常のＰＣ、ＰＤＡなどよりもマルウェアまたは攻撃者によって一層アクセスされにくいＰＣの外部のトラスト・アンカーを必要とすることである。
【０１３１】
どの重要な情報、すなわち、どのファームウェア・データを使用すべきかに関していくつかのあり得る変更形態が存在する。プログラム・コード（つまり、ファームウェアのプログラム・コードまたはその一部のみを捕捉するデータ）自体を使用することは、それがファームウェアのプログラム・コードを攻撃者が変更することを防止するので既に申し分がない。ファームウェアのプログラム・コードとは独立して、初期化ファームウェアに関する構成データなどの初期化ファームウェアによってアクセスされ得るデータを使用することも、構成データのみが改ざんされる可能性があるので有利である。理想的には、初期化ファームウェアのプログラム・コードと初期化ファームウェアによってアクセスされ得るデータとの両方が使用される。
【０１３２】
ファームウェア・データに関して、人は、例えば、起動している間にファームウェア１２２に専用のまたはファームウェア１２２によってアクセスされ得る（したがって、ファームウェアのプログラム・コードと構成データとの両方を含む）ＲＯＭまたはＣＭＯＳ  ＲＯＭ、および任意のその他の重要な識別記号列に対して計算されるハッシュ値を用いることができる。そのようなデータは、ファームウェアそのもの（ファームウェアのプログラム・コード）およびファームウェアの状態を特徴付け、したがって、前記初期化ファームウェアが危険に晒されるかどうかに関してしっかりした基礎を提供する。
【０１３３】
また、そのようなデータを単一のコードにマッピングすることは、迅速な検査と、ひいては迅速な証明とを可能にする。人は、例えば、ＢＩＯＳのＲＯＭ、ＢＩＯＳのＣＭＯＳのＲＯＭ、またはその他の重要なＢＩＯＳ識別記号列、あるいはそれらすべてに対して計算されたハッシュ値を使用し得る。より広く、ファームウェアのデータセットを、単一の整数などの好ましくは固定長のコードにマッピングすることができる任意のアルゴリズム／サブルーチンが、その後の検査を容易にするために使用され得る。ハッシュ関数を用いることは多くの点でより適切に見えるが、単純なチェックサムが信頼され得る。ここで、所望のセキュリティ・レベルに応じて、人は、それにもかかわらず、フィンガープリント、すなわち、実質的なデータセットを一意に特定するための高性能なハッシュ関数、暗号学的ハッシュ関数、またはさらにランダム化関数を使用することを好む可能性がある。
【０１３４】
今しがた検討された２種類のテスト（「ｉｎｖｍ」、「ｂｉｏｓ」）またはそれよりも前に検討されたテスト（「６４ｂｉｔ」、「ｈａｓｖｍ」、メイン・メモリの容量など）以外に、ステップＳ５ｉｉで実行される任意のテスト（能力の検査、信用性の検査など）が、ソフトウェア・モジュールの選択（Ｓ６、Ｓ１０）およびそれらのソフトウェア・モジュールをどこに記憶すべきか（Ｓ９、Ｓ１１）に影響し得る。
【０１３５】
上記の実施形態は、添付の図面を参照して簡潔に説明され、いくつかの変更形態を考慮し得る。上記の特徴のいくつかの組合せが考えられ得る。例が、次の節で与えられる。
【０１３６】
２．好ましいシナリオ
Ｓ１：コンピュータ１０１および信頼されたデバイスが提供される。コンポーネント１５、１６およびソフトウェア・モジュールは、最初、信頼されたデバイス１０に記憶されるＳ１。
Ｓ２：ユーザ信頼デバイス１０が、コンピュータ１０１に接続されるＳ２。
Ｓ３：ユーザ信頼デバイスをコンピュータに接続するとＳ２、ブートローダが検出され、ブートローダの１つのコンポーネント／部分１６が、その後実行するためにコンピュータ１０１のメイン・メモリ１１０に転送される。
Ｓ４：ブートローダのコンポーネント１６が、メイン・メモリ１１０で少なくとも部分的に実行され、一方、別のコンポーネント１５（またはモジュールなど）が、信頼されたデバイス１０でインタラクティブに実行され得る。
Ｓ５：実行されると、ブートローダが、最初に、コンピュータ１０１でさまざまな検査を実行し得る。そして、以下のことに関係するいくつかの要件が評価される。
ｉ．例えば、雇い主または従業員がコンピュータ１０１で実行したいソフトウェア・モジュールＳＭ１、．．．ＳＭｎの最初の組ＩＳ、および
ｉｉ．コンピュータのハードウェアの仕様。ブートローダが、そこで、必ずではないが、概して組ＩＳのソフトウェア・モジュールに論理的にリンクされるいくつかのテストＴを実行する。ブートローダは、例えば、マシンにおける実行が仮想化された環境で行われるかどうかを検査し、マシンの信用性を証明し得る。テストのその他の例は、既に検討された。
１．これらのテストの結果は、次に決定されるソフトウェア・モジュールの（１つまたは複数の）候補の組、ステップＳ６ならびにより広くステップＳ９およびＳ１０に影響を与える。
２．さまざまなブート動作が、テストの結果に応じてこの段階で完了される可能性がある。
３．変形形態において、テスト（またはその一部）はグローバルであり、最初の組ＩＳのソフトウェア・モジュールに特にリンクされない。その場合、これらのテストは、ユーザの要件を評価する（ステップＳ５ｉ）前にさえも実行され得る。
４．いずれの場合も、後続のステップＳ６、Ｓ９、Ｓ１０、．．．が行われるかどうかおよびどの程度行われるかは、テストの結果に依存する。
Ｓ６：次に、ソフトウェア・モジュールの候補の組ＣＳ１、ＣＳ２が、最初の組ＩＳの中で決定される。ソフトウェア・モジュールの選択が、それ自体がマシンのハードウェアの能力に依存する割り当てられたメモリに依存して行われることが好ましいので、ＲＡＭディスクのためのメモリは、ステップＳ６の前に割り当てられることが好ましいことに留意されたい。変形形態においては、所定のメモリ・サイズが信頼され得るが、その場合、ＲＡＭディスクのメモリ利用は準最適である可能性がある。詳細には、
ａ．これらの候補の組の中のソフトウェア・モジュールは、前にアクセスされたハードウェアの仕様に適合していなければならない。および
ｂ．それらのモジュールのサイズ、中身、実行論理などが、それらのモジュールがＲＡＭディスク１２１として記憶され得るようなものである。図５に例示されたように、モジュールＳＭ４、ＳＭ７は、テストに通らず、破棄された
ｃ．（１つまたは複数の）候補の組の決定は、所与のセキュリティの基準に従って、最もセキュリティ上の機密性が高いソフトウェア・モジュールを優先順位付けするステップを含み得る。優先順位付けのステップは、図５に示されるように（図３の実施形態とは異なり）ステップＳ６ａおよびＳ６ｂの前に実行される可能性があり、ステップＳ５ｉｉで実行されたテストの結果を考慮に入れることに留意されたい。さらに言えば、ステップＳ６ａ〜ｃは概して任意の順序で実行され得るが、それらのステップをこの順序、すなわち、Ｓ６ｃ→Ｓ６ａ→Ｓ６ｂの順序で実行することがより効率的である可能性がある。
ｉ．単純な選択の枠組みは、ＲＡＭディスク１２１のサイズに完全に収まる（およびその他の点ではＳ５ｉｉのテストを通過した）ソフトウェア・モジュールの代替的な組を特定することからなる。
ｉｉ．優先順位付けが含まれる場合、ＲＡＭディスク１２１に完全に収まり、テストを通過した最も機密性の高いソフトウェア・モジュールの代替的な組が決定される。
Ｓ７：依拠されたポリシーと、ソフトウェア・モジュール（およびもしあれば対応するドライバ）の間のあり得る依存関係とに応じて、いくつかの潜在的な候補の組ＣＳ１、ＣＳ２が決定され得る。その場合、方法は、いくつかの候補の組から最終的に選択されるソフトウェア・モジュールの最終的な組ＦＳを特定するためのさらなるステップＳ７を含む。
−  これは、例えば、候補の組を確認のためにユーザに送った（ステップＳ７ａ）後に、メイン・メモリで実行されるブートローダのコンポーネント１６とインタラクティブにユーザ信頼デバイスで実行されるブートローダのコンポーネント１５によって、ユーザ信頼デバイスから受信された入力（ステップＳ７ｂ）に従って行われることが好ましい。
−  図５の例においては、２つのあり得る候補の組が、ＣＳ１（ＳＭ８．．．ＳＭ６）およびＣＳ２（ＳＭ８．．．ＳＭ３）によって示される。
−  この例においては、前の優先順位付けステップと、（それぞれがＳＭ３およびＳＭ６よりも機密性が高い）モジュールＳＭ８．．．ＳＭ２のサイズとのために、唯１つのさらなるモジュール（ＳＭ３またはＳＭ６）がＲＡＭディスクに記憶され得るので、ＳＭ３またはＳＭ６の間の選択を行うためにユーザとのさらなるインタラクションＳ７が必要とされる。
Ｓ８：最終的に保有される組のソフトウェア・モジュール（＝ＦＳ）が、コンピュータ１０１に転送される。前記モジュールは、最初、ユーザ信頼デバイス１０または遠隔のサーバ３０に記憶される可能性がある。１つの可能性は、それらのモジュールをデバイス１０に記憶させることである。したがって、最終的に保有されるモジュールは、さらなるネットワーク接続を必要とせずに、ＲＡＭディスクとしてその後記憶し、実行するために信頼されたデバイスからメイン・メモリに迅速に転送され得る。概して、これは、ソフトウェア・モジュールを転送するように命令する（どちらかの側、すなわち、コンピュータまたはユーザ・デバイスで実行される）ブートローダである。
Ｓ９：そして、ソフトウェア・モジュールが、ＲＡＭディスクに記憶され、そのステップは、好ましくは以下のように分かれる。
ａ．第１に、既にステップＳ６で思い起こされた好ましい選択肢の変形形態において、ＲＡＭディスクのためのメモリが割り当てられる（またはさらにはソフトウェア・モジュールの最終的な選択に基づいてこの段階で修正される）可能性がある。
ｂ．ＲＡＭディスクのためのファイル・システムのメタデータが、最終的な組ＦＳのソフトウェア・モジュールに応じて計算され、メタデータは、どのファイルがＲＡＭディスクのどのメモリ・セクションに記憶されるべきであるかを指定する。
ｃ．そして、メタデータが、ＲＡＭディスクの個々のメモリ・セクション、例えば、データ・ブロックに書き込まれる。
ｄ．保有されるソフトウェア・モジュールのファイルが、ファイル・システムで１つずつメモリ・セクションにメタデータに従ってコピーされる。
ｅ．最後に、それらのソフトウェア・モジュールをＲＡＭディスクで直接実行することが命令される。
Ｓ１０：ステップＳ７の後またはステップＳ７と同時に、人は、さらに、ソフトウェア・モジュールＳＭ６、．．．ＳＭｋ、つまり、ＲＡＭディスクとして実行するために保有される最終的な組の中にないモジュールを含むソフトウェア・モジュールの追加の組ＡＳを決定し得る。
Ｓ１１：好ましくは暗号化された（ステップＳ１１ａ）この追加の組ＡＳのモジュールＳＭ６、．．．ＳＭｋをその後実行する（ステップＳ１１ｂ）ためにコンピュータの物理的なストレージ媒体１２０に記憶する。優先順位付けプロセスにより、これらの追加のモジュールは、ＣＳ２に保有されるモジュールよりも低いリスクをもたらす（またはまったくリスクをもたらさない）。したがって、これらの追加のモジュールは、穏当なリスクで物理的なストレージ媒体１２０に記憶され得る。もちろん、変形形態において、物理的なストレージ媒体１２０にいかなるモジュールを記憶することも防止するより厳しいポリシーが、実施される可能性がある。
Ｓ１２：セッションの終わりに、ユーザ（またはデバイス１０、またはさらにやはりメイン・メモリで実行されるモジュール１６）が、ＲＡＭディスクとして（ステップＳ１２ａ）または物理的なストレージ媒体１２０（ステップＳ１２ｂ）に記憶されたソフトウェア・モジュールの実行を止めることを命じる可能性がある。そして、プロセスは、以下によって終了し得る。
Ｓ１３：デバイス１０を切断する。および
Ｓ１４：物理的なストレージ媒体１２０からソフトウェアを削除する。
Ｓ１５：最後に、ＲＡＭが消去される。示されるように、このステップは、物理的なストレージ・システムが消去された後に行われることが好ましい。これは、コンピュータ１０１からあらゆる残りのデータを消去する、例えば、概して、より高い動作性能のためにＲＡＭにキャッシュされる永続的な（物理的に記憶された）データを消去することである。このようにして、システムは、あり得る攻撃者のためにセッションの跡をまったく残さないことを確認する。
【０１３７】
３．いくつかの特定の実施形態の技術的な実装の詳細
本発明の実施形態を実装するために有利に使用され得る命令（のシーケンス）の例が、以下に続く。当業者は、実質的に同じことを実現するために使用され得る同じ／同様の機能を有するその他の命令が存在することを認める。
【０１３８】
始めに、ＢＩＯＳ情報（「ファームウェア構成データ」）を読み取ることを可能にするＡＰＩの例が、以下に続く。
outb(cmos_data_address, 0x70);
data_at_address = inb(0x71);
ここで、cmos_data_addressは、０．．．max_cmos_data_addressの範囲にわたって反復される。ファームウェアのプログラム・コード自体またはファームウェアの構成あるいはその両方を読み取るためのその他の同様の命令が、Ｉｎｔｅｌ  ８２８０２ＡＢ／８２８０２ＡＣ  Ｆｉｒｍｗａｒｅ  Ｈｕｂ（ＦＷＨ）によって与えられる。
【０１３９】
ＥＦＩ  ＢＩＯＳにおいては、ＥＦＩの構成が、GetVariable関数呼び出しによってＥＦＩの変数を読み出すことによってアクセスされ得る。ＢＩＯＳ自体に関する情報を取得することは、特に、例えば、Ｉｎｔｅｌ  Ｆｉｒｍｗａｒｅ  Ｈｕｂが使用される場合、これまでのＢＩＯＳと同様に機能する。
【０１４０】
次に、ＰＣからユーザ信頼デバイスとインタラクションすることを可能にする命令の例が与えられる。
ユーザ信頼デバイス（大容量ストレージ・デバイス）からブロックを読み出す
mov ah, 42h
mov dl, the_drive_to_read_from
mov ds:si,disk_address_packet_describing_what_to_read
int 13h
【０１４１】
ユーザ信頼デバイス（大容量ストレージ・デバイス）にブロックを書き込む
mov ah, 43h
mov dl, the_drive_to_write_to
mov ds:si,disk_address_packet_describing_what_to_write
int 13h
【０１４２】
ＥＦＩ  ＢＩＯＳにおいては、両方ともReadおよびWrite関数を提供するいわゆるEFI_DISK_IO_PROTOCOLまたはEFI_BLOCK_IO_PROTOCOLが、使用される可能性がある。
【０１４３】
好適なディスクＩ／Ｏコマンドは、当業者に容易に理解される。
【０１４４】
最後に、ＰＸＥ  ＢＩＯＳを開始するためにモジュールによって使用され得る命令のシーケンスの例は、以下を含むが、これらに限定されない。
Load UNDI ROM
PXENV_START_UNDI
PXENV_UNDI_STARTUP
PXENV_UNDI_INITIALIZE
PXENV_UNDI_OPEN
【０１４５】
追加の命令（例えば、PXENV_UNDI_TRANSMIT）が、ネットワーク・カード１２４を介してサーバ３０にパケットを送信するために付加される可能性がある。そのような命令によって、モジュールは、ホストで実行されると、ネットワーク・カード１２４を開始するためにＰＸＥ  ＢＩＯＳ１２２とインタラクションし、それによって、通信が、ネットワークを介して開始され得る。
【０１４６】
同様の命令が、ＥＦＩ＿ＳＩＭＰＬＥ＿ＮＥＴＷＯＲＫ  ＡＰＩのＥＦＩおよびＵＥＦＩ  ＢＩＯＳによって提供される（Initialize、Start、Stop、Receive、Transmit）。ＢＩＯＳは、やはり使用され得るＴＣＰ／ＩＰスタックのより高レベルのプロトコルの実装およびその他のネットワーキング・プロトコルも提供する可能性がある。
【０１４７】
ハードウェアの仕様は、サポートされる特徴をＣＰＵのレジスタで返すcpuid id ＣＰＵ命令を用いて取得され得る。その関数に渡される異なるｉｄに関して、異なるＣＰＵの情報が利用可能である。加えて、何らかのハードウェアの仕様（例えば、仮想化のサポートがＢＩＯＳによって無効化されたかどうか）が、rdmsr reg ＣＰＵ命令によって取得され得るモデルに固有のレジスタを用いて取得され得る。
【０１４８】
最後に、ソフトウェア・モジュールを実行することが、例えば、ＰＯＳＩＸ関数のsystem()またはexec()系統を用いて行われ得る。
【０１４９】
本発明が限られた数の実施形態、変形形態、および添付の図面を参照して説明されたが、本発明の範囲から逸脱することなく、さまざまな変更が行われる可能性があり、均等物が代わりに使われる可能性があることは、当業者に理解されるであろう。特に、本発明の範囲を逸脱することなく、所与の実施形態、変形形態で述べられたか、もしくは図面に示された（デバイスのようなまたは方法のような）特徴が、別の実施形態、変形形態、もしくは図面の別の特徴と組み合わされるかまたは別の実施形態、変形形態、もしくは図面の別の特徴を置き換える可能性がある。したがって、上記の実施形態または変形形態のいずれかに関して説明された特徴のさまざまな組合せが考えられる可能性があり、それらの組合せは、添付の請求項の範囲内に残る。さらに、特定の状況を本発明の教示に適合させるために、本発明の範囲を逸脱することなく多くの小さな変更が行われ得る。したがって、本発明は開示された特定の実施形態に限定されず、本発明は添付の請求項の範囲に含まれるすべての実施形態を含むことが意図される。加えて、上で明確に触れられなかった多くの変更形態が考えられる可能性がある。例えば、安全なデバイスが、太陽電池または任意のその他の好適なバッテリなどによって給電される可能性がある。既に触れられたように、本明細書において説明されたコンピュータ化された方法は、明瞭にするためにそれぞれのコンポーネント１５〜１７に割り振られたそれらの方法の主な機能によって説明された。しかし、本発明の実施形態は、唯１つのモジュールまたは複数のモジュールで作り直された同じ機能によって等しく説明され得る。
【符号の説明】
【０１５０】
１０  ユーザ信頼デバイス
１１  安全なデバイスのＣＰＵ
１２  ユーザ信頼デバイスの接続インターフェース
１３  暗号化データ
１４  信頼されたデバイスの永続的なメモリ
１５、１６  コンポーネント
１５  コンポーネント（ユーザ信頼デバイスで実行される部分）
１６  コンポーネント（コンピュータのメイン・メモリに転送される部分）
１７  検証モジュール
３０  サーバ
１００  通常のコンピュータ化されたシステム
１０１  ホスト・コンピュータ
１０５  コンピュータ・プロセッサ
１１０  コンピュータのメイン・メモリ
１１１  オペレーティング・システム（ＯＳ）
１１５  メモリ・コントローラ
１２０  物理的なストレージ媒体（例えば、ディスク）
１２１  ＲＡＭディスク
１２１ｆｓ  ＲＡＭディスクのためのファイル・システム
１２２  ホスト・コンピュータのファームウェア／初期化ソフトウェア（例えば、ＢＩＯＳ）
１２４  ネットワーク・カード
１２５  ディスプレイ・コントローラ
１３０  ディスプレイ
１４１  信頼されたデバイスの安全なメモリ
１４２  信頼されたデバイスの安全でないメモリ
１４５  Ｉ／Ｏデバイス（または周辺機器）
１５０  キーボード
１５１  ブートローダのローカルの部分の第１の部分
１５２  ブートローダのローカルの部分の第２の部分
１５５  マウス
１６５  ネットワーク
ＡＳ  ソフトウェア・モジュールの組（追加の組）
ＣＳ１、ＣＳ２、ＣＳｐ  ソフトウェア・モジュールの組（候補の組）
Ｆｉｊ  ソフトウェア・モジュールＳＭｉの第ｊのファイル
ＦＳ  ソフトウェア・モジュールの最終的な組
ＩＳ  ソフトウェア・モジュールの最初の組
ＭＤｌ  メタデータ
ＳＭｉ  ソフトウェア・モジュール
Ｔ  ソフトウェア・モジュールのテスト
【図１】
0005970141.tif 000002
【図２】
0005970141.tif 000003
【図３】
0005970141.tif 000004
【図４】
0005970141.tif 000005
【図５】
0005970141.tif 000006
【図６】
0005970141.tif 000007