(57)【要約】【課題】コンピュータ（１０１）がユーザ・トラステッド・デバイス（１０）から起動することを可能にするための方法を提供する。【解決手段】本発明は特に、コンピュータ（１０１）がユーザ・トラステッド・デバイス（１０）から起動することを可能にするための方法を対象とし、ユーザ・トラステッド・デバイス（１０）は前記コンピュータ（１０１）との接続（Ｓ２）を可能にする接続インタフェース（１２）を含み、この方法は、前記接続インタフェース（１２）を介したユーザ・トラステッド・デバイスと前記コンピュータ（１０１）との接続（Ｓ２）の際に、前記コンピュータ（１０１）がユーザ・トラステッド・デバイス（１０）からの起動を開始することを可能にするステップ（Ｓ３）と、コンピュータ（１０１）のプロセッサ（１０５）に対して、仮想化感知コードを実行すること（Ｓ７）、および実行完了の際に完了データを発行すること（Ｓ８）を指示するステップであって、この完了データは仮想化感知コードおよびプロセッサ（１０５）によるその実行に依存するものである、ステップと、前記完了データに基づいて、その実行が仮想化環境においてなされなかったかどうかを判定するステップ（Ｓ９〜Ｓ１４）と、その実行が仮想化環境においてなされなかったと判定するときに、前記コンピュータ（１０１）がユーザ・トラステッド・デバイス（１０）からの起動を完了することを可能にするステップ（Ｓ１５）とを含む。本発明はさらに、この方法を可能にするユーザ・トラステッド・デバイスおよび関連するシステムを対象とする。【選択図】図３
2015537322.tif 000002
【特許請求の範囲】
【請求項１】
ユーザ・トラステッド・デバイス（１０）であって、
コンピュータ（１０１）との接続を可能にする接続インタフェース（１２）と、
複数のモジュール（１５、１６、１７）を保存する永続的メモリ（１４）とを含み、前記モジュールは、前記接続インタフェース（１２）を介した前記ユーザ・トラステッド・デバイス（１０）と前記コンピュータ（１０１）との接続の際に、
前記コンピュータ（１０１）が前記ユーザ・トラステッド・デバイス（１０）からの起動を開始することを可能にし、
前記コンピュータ（１０１）のプロセッサ（１０５）に対して、起動を開始する際に仮想化感知コードを実行することと、実行完了の際に完了データを発行することとを指示し、
こうした完了データに基づいて、前記実行が仮想化環境においてなされなかったかどうかを判定し、かつ、
前記実行が仮想化環境においてなされなかったと判定するときに、前記コンピュータ（１０１）が前記ユーザ・トラステッド・デバイス（１０）からの起動を完了することを可能にするように構成される、ユーザ・トラステッド・デバイス（１０）。
【請求項２】
前記複数のモジュールは、
前記コンピュータ（１０１）が前記デバイス（１０）からの起動を開始および完了することを可能にするブートローダ（１６）と、
前記仮想化感知コードを実行し、かつ前記完了データを発行することを前記プロセッサ（１０５）に指示するために前記コンピュータ（１０１）において実行可能なプロセッサ命令モジュール（１５）と、
前記完了データに基づいて、前記実行が仮想化環境においてなされなかったかどうかを判定するよう指示するように構成された検証モジュール（１７）とを含み、前記検証モジュール（１７）は、前記デバイス（１０）もしくは前記コンピュータ（１０１）またはその両方において実行可能であり、
前記ブートローダ（１６）は、前記ユーザ・トラステッド・デバイス（１０）と前記コンピュータ（１０１）との接続の際に初期化ファームウェア（１２２）によって検出可能であり、かつ前記ファームウェア（１２２）が前記プロセッサ命令モジュール（１５）を以後の前記コンピュータ（１０１）における実行のために前記コンピュータ（１０１）に移すことを開始するための命令を含む、請求項１に記載のユーザ・トラステッド・デバイス（１０）。
【請求項３】
前記プロセッサ命令モジュール（１５）はさらに、前記コンピュータ（１０１）における実行の際に、前記プロセッサが前記コンピュータ（１０１）および好ましくは前記プロセッサ自体によって支援される１つまたはそれ以上の機能のリストを前記完了データの一部として生成するように設計された仮想化感知コードを実行することを前記プロセッサ（１０５）に指示するように構成される、請求項２に記載のユーザ・トラステッド・デバイス（１０）。
【請求項４】
前記プロセッサ命令モジュール（１５）はさらに、前記コンピュータ（１０１）における実行の際に、前記仮想化感知コードを実行するために必要とされる前記プロセッサの計算量に依存する最終状態値を前記完了データの一部として生成することを前記プロセッサ（１０５）に指示するように構成され、
かつ好ましくは、前記プロセッサ命令モジュール（１５）はさらに、前記コンピュータ（１０１）における実行の際に、前記仮想化感知コードを実行する前の前記プロセッサの状態を反映する初期状態値を生成することを前記プロセッサ（１０５）に指示するように構成される、請求項２または３に記載のユーザ・トラステッド・デバイス（１０）。
【請求項５】
前記検証モジュール（１７）はさらに、
前記初期状態値および前記最終状態値に基づいて、前記仮想化感知コードを実行するために必要とされる前記プロセッサの前記計算量を定量化するプロセッサ使用値、たとえば計算持続時間、プロセッサ・サイクル数、またはカウンタなどを生成し、かつ
前記プロセッサ使用値に基づいて、前記実行が仮想化環境においてなされなかったかどうかを判定するように構成される、請求項４に記載のユーザ・トラステッド・デバイス（１０）。
【請求項６】
前記プロセッサ命令モジュール（１５）はさらに、前記コンピュータ（１０１）における実行の際に、前記仮想化感知コードを実行するために必要とされる前記プロセッサの前記計算量を定量化するプロセッサ使用値、たとえば計算持続時間、プロセッサ・サイクル数、またはカウンタなどを前記完了データの一部として生成することを前記プロセッサ（１０５）に指示するように構成され、
かつ前記検証モジュール（１７）はさらに、前記プロセッサ使用値に基づいて、前記実行が仮想化環境においてなされなかったかどうかを判定するよう指示するように構成される、請求項４に記載のユーザ・トラステッド・デバイス（１０）。
【請求項７】
前記検証モジュール（１７）はさらに、前記実行が仮想化環境においてなされなかったかどうかをサーバにおいて少なくとも部分的に判定するために、好ましくは前記コンピュータ（１０１）を介してサーバ（３０）に接続するよう指示するように構成される、請求項２から６のいずれか１項に記載のユーザ・トラステッド・デバイス（１０）。
【請求項８】
前記検証モジュール（１７）はさらに、
−前記サーバ（３０）に接続するために、ネットワーク・カード（１２４）によって可能にされるネットワーク（１６５）を通じた通信を開始するために、前記ファームウェア（１２２）と対話することでその後前記コンピュータ（１０１）の前記ネットワーク・カード（１２４）と対話するステップ、
−前記サーバに接続するために、前記ネットワーク・カードによって可能にされるネットワークを通じた通信を開始するために、前記ユーザ・トラステッド・デバイス（１０）に保存されたネットワーク・カード・ドライバにアクセスして、前記コンピュータ（１０１）のネットワーク・カード（１２４）と直接対話するステップ、および
−好ましくは前記ブートローダを介して前記ファームウェア（１２２）と対話することによって、前記コンピュータ（１０１）を介して前記サーバに接続するために必要である前記コンピュータのオペレーティング・システムを部分的に実行するステップ
のうちの１つまたはそれ以上を実行するように構成される、請求項７に記載のユーザ・トラステッド・デバイス（１０）。
【請求項９】
前記仮想化感知コードは、
−前記プロセッサを保護モードからリアル・モードに切換えるための命令、もしくは前記プロセッサをリアル・モードから保護モードに切換えるための命令、またはその両方、
−前記プロセッサがマシン固有レジスタを読取るための命令、および
−前記プロセッサがマシン固有レジスタに書込むための命令
のうちの１つまたはそれ以上を含む、請求項１から８のいずれか１項に記載のユーザ・トラステッド・デバイス（１０）。
【請求項１０】
コンピュータ（１０１）がユーザ・トラステッド・デバイス（１０）から起動することを可能にするための方法であって、前記ユーザ・トラステッド・デバイス（１０）は前記コンピュータ（１０１）との接続（Ｓ２）を可能にする接続インタフェース（１２）を含み、前記方法は、
前記接続インタフェース（１２）を介した前記ユーザ・トラステッド・デバイスと前記コンピュータ（１０１）との接続（Ｓ２）の際に、前記コンピュータ（１０１）が前記ユーザ・トラステッド・デバイス（１０）からの起動を開始することを可能にするステップ（Ｓ３）と、
前記コンピュータ（１０１）のプロセッサ（１０５）に対して、
仮想化感知コードを実行すること（Ｓ７）、および
実行完了の際に完了データを発行すること（Ｓ８）を指示するステップであって、前記完了データは前記仮想化感知コードおよび前記プロセッサ（１０５）によるその実行に依存するものである、ステップと、
前記完了データに基づいて、前記実行が仮想化環境においてなされなかったかどうかを判定するステップ（Ｓ９〜Ｓ１３）と、
前記実行が仮想化環境においてなされなかったと判定するときに、前記コンピュータ（１０１）が前記ユーザ・トラステッド・デバイス（１０）からの起動を完了することを可能にするステップ（Ｓ１５）とを含む、方法。
【請求項１１】
前記ユーザ・トラステッド・デバイス（１０）と前記コンピュータ（１０１）との接続の際に、前記コンピュータ（１０１）の初期化ファームウェア（１２２）と対話することによって、
前記コンピュータ（１０１）が前記ユーザ・トラステッド・デバイス（１０）からの起動を開始することを可能にし（Ｓ３）、かつ
プロセッサ命令モジュール（１５）を以後の前記コンピュータ（１０１）における実行（Ｓ５〜Ｓ６）のために前記コンピュータ（１０１）に移すことを開始する（Ｓ４）ことによって、前記プロセッサ（１０５）に前記仮想化感知コードを実行させ（Ｓ７）、かつ実行完了の際に前記完了データを発行させる（Ｓ８）、ステップをさらに含む、請求項１０に記載の方法。
【請求項１２】
前記実行が仮想化環境においてなされなかったかどうかを判定するステップ（Ｓ９〜Ｓ１４）は、前記デバイス（１０）もしくは前記コンピュータ（１０１）またはその両方において検証モジュール（１７）を実行するステップ（Ｓ９）を含み、前記検証モジュール（１７）を実行するステップ（Ｓ９）は好ましくは、前記実行が仮想化環境においてなされなかったかどうかをサーバにおいて少なくとも部分的に判定する（Ｓ１１）ために、より好ましくは前記コンピュータ（１０１）を介してサーバ（３０）に接続するステップ（Ｓ１０）を含む、請求項１０または１１に記載の方法。
【請求項１３】
前記プロセッサ（１０５）はさらに、前記コンピュータ（１０１）および好ましくは前記プロセッサ自体によって支援される１つまたはそれ以上の機能のリストを前記完了データの一部として生成する（Ｓ８）ように指示される、請求項１０から１２のいずれか１項に記載の方法。
【請求項１４】
前記プロセッサ（１０５）はさらに、前記仮想化感知コードを実行するために必要とされた前記プロセッサの計算量に依存する最終状態値、たとえば計算持続時間、プロセッサ・サイクル数、またはカウンタなどを前記完了データの一部として生成する（Ｓ８）ように指示され、
好ましくは、前記プロセッサ（１０５）はさらに、前記仮想化感知コードを実行する（Ｓ７）前の初期状態値を生成する（Ｓ６）ように指示される、請求項１０から１３のいずれか１項に記載の方法。
【請求項１５】
コンピュータ（１０１）がユーザ・トラステッド・デバイス（１０）から起動することを可能にするためのコンピュータ・プログラム製品であって、前記コンピュータ・プログラム製品は、ともに具現化される複数のモジュール（１５、１６、１７）を有するコンピュータ読取り可能記憶媒体を含み、前記複数のモジュールは、請求項１０から１４に記載のいずれかの方法のすべてのステップを実行することを可能にする、コンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般的に、コンピュータをユーザ・トラステッド・デバイスから起動させることを可能にするユーザ・トラステッド・デバイスの分野、ならびに関連するデバイス、システムおよび方法に関する。
【背景技術】
【０００２】
過去に調整も調査もされていない任意のコンピュータ（例、従業員の私物ＰＣ）においてソフトウェアが実行されることを可能にしつつ、その実行がたとえば企業／会社のＰＣにおける実行と同程度に安全（セキュア）であることを確実にする技術が必要とされている。こうした技術によって、信頼のある（トラステッド）「ブリング・ユア・オウン（ｂｒｉｎｇ  ｙｏｕｒ  ｏｗｎ）」（ＢＹＯ）コンピューティング作業環境が可能になる。ＢＹＯは一般的に、「ブリング・ユア・オウン・デバイス（Ｂｒｉｎｇ  ｙｏｕｒ  ｏｗｎ  ｄｅｖｉｃｅ）」（ＢＹＯＤ）、「ブリング・ユア・オウン・テクノロジ（ｂｒｉｎｇ  ｙｏｕｒ  ｏｗｎ  ｔｅｃｈｎｏｌｏｇｙ）」（ＢＹＯＴ）、または密接に関係する「ブリング・ユア・オウン・ビヘイビア（ｂｒｉｎｇ  ｙｏｕｒ  ｏｗｎ  ｂｅｈａｖｉｏｒ）」（ＢＹＯＢ）に関するものである。ＢＹＯＤまたはＢＹＯＴは、従業員が仕事に個人のモバイル・デバイスを持ち込んで使用し、雇用者のｅメール、データベースおよびファイルにアクセスし、一方でこうしたデバイスを家でも用いるために、同じデバイスを通じて個人のアプリケーション／データにアクセスすることをいかにしてなし得るかという企業／ビジネス・ポリシに関わるものである。ＢＹＯＢは、このことをハードウェアを越えてデバイス上で用いられるソフトウェアにも広げたものである。
【０００３】
今日、コンピュータ上で実行されるあらゆるソフトウェアは、ＰＣのオペレーティング・システムに存在し得るいくつものウイルスおよび悪意あるソフトウェア（マルウェア）による攻撃を受け得ることが公知である。この問題に対する解決策の１つは、たとえば典型的にセキュア・デバイスであるユーザ・トラステッド・デバイスに保存されるなどした外部起動媒体からＰＣを再始動させて、その外部媒体から、新しくかつセキュリティの観点からクリーンなオペレーティング・システム（ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ：ＯＳ）を始動させるというものである。
【０００４】
しかし、このアプローチは特に１つの顕著な技術的問題点を有することを本発明者らは認識しており、本発明はその問題点の解決を目的とするものである。
【０００５】
加えて、外部起動媒体はしばしば（セキュアな耐タンパ・デバイスを含む）トラステッド・デバイス上に提供され、このタイプのデバイスは一般的に公知である。たとえば、オンラインのトランザクションに対して開発された解決策は、いわゆるゾーン・トラステッド情報チャネル（Ｚｏｎｅ  Ｔｒｕｓｔｅｄ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｃｈａｎｎｅｌ）（または略してＺＴＩＣ）である。ＺＴＩＣは、トランザクション・データの認証のためのセキュアな非プログラマブル・デバイスである。ＺＴＩＣはサーバに対するセキュアなエンド・ツー・エンドのネットワーク接続を維持するため、ＺＴＩＣ自体が悪意あるソフトウェアの攻撃に対して耐タンパであり、かつＺＴＩＣはそれが接続するホストとは独立した自身の入力および出力構成要素を有するため、ＺＴＩＣディスプレイに示されるデータは本物である。より詳細なことは、たとえば非特許文献１などに見出され得る。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】“Ｔｈｅ  Ｚｕｒｉｃｈ  Ｔｒｕｓｔｅｄ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｃｈａｎｎｅｌ−Ａｎ  Ｅｆｆｉｃｉｅｎｔ  Ｄｅｆｅｎｃｅ  ａｇａｉｎｓｔ  Ｍａｎ−ｉｎ−ｔｈｅ−Ｍｉｄｄｌｅ  ａｎｄ  Ｍａｌｉｃｉｏｕｓ  Ｓｏｆｔｗａｒｅ  Ａｔｔａｃｋｓ”，Ｔｈｏｍａｓ  Ｗｅｉｇｏｌｄ，Ｔｈｏｒｓｔｅｎ  Ｋｒａｍｐ，Ｒｅｔｏ  Ｈｅｒｍａｎｎ，Ｆｒａｎｋ  Ｈｏｅｒｉｎｇ，Ｐｅｔｅｒ  Ｂｕｈｌｅｒ，Ｍｉｃｈａｅｌ  Ｂａｅｎｔｓｃｈ．Ｉｎ  Ｐ．Ｌｉｐｐ，Ａ．−Ｒ．ＳａｄｅｇｈｉおよびＫ．−Ｍ．Ｋｏｃｈ（編）：ＴＲＵＳＴ  ２００８，ＬＮＣＳ  ４９６８，ｐ．７５−９１，２００８．Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ  Ｂｅｒｌｉｎ  Ｈｅｉｄｅｌｂｅｒｇ  ２００８
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明の目的は、仮想化環境を検出するためのユーザ・トラステッド・デバイスを提供することである。
【課題を解決するための手段】
【０００８】
第１の局面に従うと、本発明はユーザ・トラステッド・デバイスとして具現化され、このユーザ・トラステッド・デバイスは、
コンピュータとの接続を可能にする接続インタフェースと、
複数のモジュールを保存する永続的メモリとを含み、これらのモジュールは、前記接続インタフェースを介したユーザ・トラステッド・デバイスと前記コンピュータとの接続の際に、
前記コンピュータがユーザ・トラステッド・デバイスからの起動を開始することを可能にし、
コンピュータのプロセッサに対して、起動を開始する際に仮想化感知コードを実行することと、実行完了の際に完了データを発行することとを指示し、
こうした完了データに基づいて、その実行が仮想化環境においてなされなかったかどうかを判定し、かつ、
その実行が仮想化環境においてなされなかったと判定するときに、前記コンピュータがユーザ・トラステッド・デバイスからの起動を完了することを可能にするように構成される。
【０００９】
好ましくは、前記モジュールは、
前記コンピュータがデバイスからの起動を開始および完了することを可能にするブートローダと、
仮想化感知コードを実行し、かつ完了データを発行することをプロセッサに指示するためにコンピュータにおいて実行可能なプロセッサ命令モジュールと、
前記完了データに基づいて、その実行が仮想化環境においてなされなかったかどうかを判定するよう指示するように構成された検証モジュールとを含み、この検証モジュールはデバイスもしくはコンピュータまたはその両方において実行可能であり、
ブートローダは、ユーザ・トラステッド・デバイスと前記コンピュータとの接続の際に初期化ファームウェアによって検出可能であり、かつファームウェアが前記プロセッサ命令モジュールを以後のコンピュータにおける実行のためにコンピュータに移すことを開始するための命令を含む。
【００１０】
第１のクラスの実施形態に従うと、プロセッサ命令モジュールはさらに、コンピュータにおける実行の際に、プロセッサがコンピュータおよび好ましくはプロセッサ自体によって支援される１つまたはそれ以上の機能のリストを完了データの一部として生成するように設計された仮想化感知コードを実行することをプロセッサに指示するように構成される。
【００１１】
第２のクラスの実施形態に従うと、プロセッサ命令モジュールはさらに、コンピュータにおける実行の際に、前記仮想化感知コードを実行するために必要とされるプロセッサの計算量に依存する最終状態値を完了データの一部として生成することをプロセッサに指示するように構成され、かつ好ましくは、プロセッサ命令モジュールはさらに、コンピュータにおける実行の際に、前記仮想化感知コードを実行する前のプロセッサの状態を反映する初期状態値を生成することをプロセッサに指示するように構成される。
【００１２】
実施形態において、検証モジュールは、初期状態値および最終状態値に基づいて、仮想化感知コードを実行するために必要とされるプロセッサの計算量を定量化するプロセッサ使用値、たとえば計算持続時間、プロセッサ・サイクル数、またはカウンタなどを生成するためにデバイスにおいて実行可能であり、かつ検証モジュールはさらに、前記プロセッサ使用値に基づいて、その実行が仮想化環境においてなされなかったかどうかを判定するよう指示するように構成される。
【００１３】
他の実施形態において、プロセッサ命令モジュールはさらに、コンピュータにおける実行の際に、仮想化感知コードを実行するために必要とされるプロセッサの計算量を定量化するプロセッサ使用値、たとえば計算持続時間、プロセッサ・サイクル数、またはカウンタなどを完了データの一部として生成することをプロセッサに指示するように構成され、検証モジュールはさらに、前記プロセッサ使用値に基づいて、その実行が仮想化環境においてなされなかったかどうかを判定するよう指示するように構成される。
【００１４】
有利には、検証モジュールはさらに、その実行が仮想化環境においてなされなかったかどうかをサーバにおいて少なくとも部分的に判定するために、好ましくは前記コンピュータを介してサーバに接続するよう指示するように構成されてもよい。
【００１５】
たとえば、検証モジュールは次のステップの１つまたはそれ以上を実行するように構成されてもよい。
−サーバに接続するために、ネットワーク・カードによって可能にされるネットワークを通じた通信を開始するために、前記ファームウェアと対話することでその後コンピュータの前記ネットワーク・カードと対話するステップ、
−サーバに接続するために、ネットワーク・カードによって可能にされるネットワークを通じた通信を開始するために、ユーザ・トラステッド・デバイスに保存されたネットワーク・カード・ドライバにアクセスして、コンピュータの前記ネットワーク・カードと直接対話するステップ、および
−好ましくはブートローダを介してファームウェアと対話することによって、コンピュータを介してサーバに接続するために必要である前記コンピュータのオペレーティング・システムを部分的に実行するステップ。
【００１６】
好ましくは、仮想化感知コードは次のうちの１つまたはそれ以上を含む。
−プロセッサを保護モードからリアル・モードに切換えるための命令、もしくはプロセッサをリアル・モードから保護モードに切換えるための命令、またはその両方、
−プロセッサがマシン固有レジスタを読取るための命令、および
−プロセッサがマシン固有レジスタに書込むための命令。
【００１７】
別の局面に従うと、本発明はコンピュータがユーザ・トラステッド・デバイスから起動することを可能にするための方法として具現化され、このユーザ・トラステッド・デバイスは前記コンピュータとの接続を可能にする接続インタフェースを含み、この方法は、
前記接続インタフェースを介したユーザ・トラステッド・デバイスと前記コンピュータとの接続の際に、前記コンピュータがユーザ・トラステッド・デバイスからの起動を開始することを可能にするステップと、
コンピュータのプロセッサに対して、
仮想化感知コードを実行すること、および
実行完了の際に完了データを発行することを指示するステップであって、この完了データは仮想化感知コードおよびプロセッサによるその実行に依存するものである、ステップと、
前記完了データに基づいて、その実行が仮想化環境においてなされなかったかどうかを判定するステップと、
その実行が仮想化環境においてなされなかったと判定するときに、前記コンピュータがユーザ・トラステッド・デバイスからの起動を完了することを可能にするステップとを含む。
【００１８】
好ましくは、この方法はさらに、ユーザ・トラステッド・デバイスとコンピュータとの接続の際に、前記コンピュータの初期化ファームウェアと対話することによって、
前記コンピュータがユーザ・トラステッド・デバイスからの起動を開始することを可能にし、かつ
プロセッサ命令モジュールを以後のコンピュータにおける実行のためにコンピュータに移すことを開始することによって、プロセッサに仮想化感知コードを実行させ、かつ実行完了の際に完了データを発行させる、ステップを含む。
【００１９】
好ましい実施形態において、実行が仮想化環境においてなされなかったかどうかを判定するステップは、デバイスもしくはコンピュータまたはその両方において検証モジュールを実行するステップを含み、検証モジュールを実行するステップは好ましくは、その実行が仮想化環境においてなされなかったかどうかをサーバにおいて少なくとも部分的に判定するために、より好ましくは前記コンピュータを介してサーバに接続するステップを含む。
【００２０】
前記第１のクラスの実施形態に従うと、プロセッサはさらに、コンピュータおよび好ましくはプロセッサ自体によって支援される１つまたはそれ以上の機能のリストを完了データの一部として生成するように指示される。
【００２１】
前記第２のクラスの実施形態に従うと、プロセッサはさらに、仮想化感知コードを実行するために必要とされたプロセッサの計算量に依存する最終状態値、たとえば計算持続時間、プロセッサ・サイクル数、またはカウンタなどを完了データの一部として生成するように指示され、
好ましくは、プロセッサはさらに、仮想化感知コードを実行する前の初期状態値を生成するように指示される。
【００２２】
最後の局面に従うと、本発明はコンピュータがユーザ・トラステッド・デバイスから起動することを可能にするためのコンピュータ・プログラム製品として具現化され、このコンピュータ・プログラム製品は、ともに具現化されるモジュールを有するコンピュータ読取り可能記憶媒体を含み、このモジュールは、上の実施形態に従ういずれかの方法のすべてのステップを実行することを可能にする。
【００２３】
添付の図面を参照して、限定的でない実施例として、本発明を具現化するデバイス、システムおよび方法を説明する。
【図面の簡単な説明】
【００２４】
【図１】本発明の実施形態に含まれる１つまたはそれ以上の方法ステップを実現するために好適な汎用コンピュータ・システムを概略的に表す図である。
【図２】実施形態に含まれるユーザ・トラステッド・デバイスの選択された構成要素を概略的に示す図である。
【図３】実施形態のとおりに、図１に示されるものなどのユーザ・トラステッド・デバイスからコンピュータが起動することを可能にするための方法の高レベル・ステップを示す流れ図である。
【発明を実施するための形態】
【００２５】
以下の説明は、次のように構成されている。最初に一般的な実施形態および高レベルの変形について説明する（セクション１）。次のセクションは、より特定的な実施形態および技術的実施の詳細に向けられたものである（セクション２）。
【００２６】
１．一般的な実施形態および高レベルの変形
図１は、本発明の実施形態に含まれる方法ステップを実現するために好適な一般的コンピュータ・システムを表す。
【００２７】
本明細書に記載される方法はほとんど非対話型であり、たとえばサーバまたは埋込みシステムなどのコンピュータ・システムによって自動化されることが認識されるだろう。例示的実施形態において、本明細書に記載される方法は、（部分的に）対話型または非対話型のシステムにおいて実現されてもよい。さらに、これらの方法はソフトウェア（例、ファームウェア）、ハードウェア、またはその組み合わせにおいて実現されてもよい。例示的実施形態において、本明細書に記載される方法は、実行可能なプログラムとしてソフトウェアにおいて実現され、特定目的または汎用のデジタル・コンピュータ、たとえばパーソナル・コンピュータ、ワークステーション、ミニコンピュータ、またはメインフレーム・コンピュータなどによって実行される。したがって、最も一般的なシステム１００は汎用コンピュータ１０１を含む。
【００２８】
図１に示されるとおりのハードウェア・アーキテクチャに関する例示的実施形態において、コンピュータ１０１はプロセッサ１０５と、メモリ・コントローラ１１５に結合されたメモリ１１０と、ローカル入力／出力コントローラ１３５を介して通信的に結合された１つまたはそれ以上の入力もしくは出力またはその両方の（ｉｎｐｕｔ  ａｎｄ／ｏｒ  ｏｕｔｐｕｔ）（Ｉ／Ｏ）デバイス（または周辺装置）１０、１４５とを含む。当該技術分野において公知であるとおり、入力／出力コントローラ１３５は、１つもしくはそれ以上のバス、またはその他の有線もしくはワイヤレス接続であってもよいが、それに限定されない。入力／出力コントローラ１３５は、通信を可能にするために、たとえばコントローラ、バッファ（キャッシュ）、ドライバ、リピータおよび受信機などの付加的な構成要素を有してもよく、それらは簡潔のために省略されている。さらに、ローカル・インタフェースは、前述の構成要素間の適切な通信を可能にするためのアドレス、制御、もしくはデータ接続、またはその組み合わせを含んでもよい。本明細書に記載されるとおり、Ｉ／Ｏデバイス１０、１４５は一般的に、当該技術分野において公知である任意の汎用暗号カードまたはスマート・カードを含んでもよい。これらのデバイスの１つは、以下に詳細に考察されるユーザ・トラステッド・デバイス１０である。
【００２９】
プロセッサ１０５は、ソフトウェア、特にメモリ１１０に保存されるソフトウェアを実行するためのハードウェア・デバイスである。プロセッサ１０５は、任意の特注プロセッサまたは商業的に入手可能なプロセッサ、中央処理ユニット（ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ：ＣＰＵ）、コンピュータ１０１に関連するいくつかのプロセッサの中の補助プロセッサ、（マイクロチップまたはチップ・セットの形の）半導体に基づくマイクロプロセッサ、マクロプロセッサ、またはソフトウェア命令を実行するための一般的にあらゆるデバイスであってもよい。
【００３０】
メモリ１１０は、揮発性記憶素子（例、ランダム・アクセス・メモリ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）（ＲＡＭ、たとえばＤＲＡＭ、ＳＲＡＭ、ＳＤＲＡＭなど））および不揮発性（永続的）記憶素子（例、ＲＯＭ、消去可能プログラマブル・リード・オンリ・メモリ（ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ：ＥＰＲＯＭ）、電気的消去可能プログラマブル・リード・オンリ・メモリ（ｅｌｅｃｔｒｏｎｉｃａｌｌｙ  ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ：ＥＥＰＲＯＭ）、プログラマブル・リード・オンリ・メモリ（ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ：ＰＲＯＭ）、テープ、コンパクト・ディスク・リード・オンリ・メモリ（ｃｏｍｐａｃｔ  ｄｉｓｃ  ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ：ＣＤ−ＲＯＭ）、ディスク、ディスケット、カートリッジ、カセットまたはその類似物など）のいずれか１つまたはその組み合わせを含んでもよい。さらに、メモリ１１０は電子、磁気、光学、もしくはその他のタイプの記憶媒体またはその組み合わせを組み込んでもよい。なおメモリ１１０は、さまざまな構成要素が互いに離れた位置にあるがプロセッサ１０５によってアクセス可能であるような分散型アーキテクチャを有してもよい。特に、メモリ１１０は所与のメモリ部分１２１を含み、そのメモリ部分１２１にプロセッサ命令モジュール（ｐｒｏｃｅｓｓｏｒ  ｉｎｓｔｒｕｃｔｉｏｎ  ｍｏｄｕｌｅ）（すなわちＰＩＭ）１５およびおそらくは検証モジュール１７の全体または一部が以後の実行のために移されてもよい。
【００３１】
メモリ１１０内のソフトウェアは１つまたはそれ以上の別個のプログラムを含んでもよく、そのプログラムの各々は、論理関数、特に本発明の実施形態に関与する関数を実施するために実行可能な命令のリストを含む。図１の実施例において、いくつかの条件が確認されたときにコンピュータ１０１がユーザ・トラステッド・デバイス１０からの起動を開始および完了することを可能にするための命令がメモリ１１０にロードされてもよい。
【００３２】
本明細書において考察される新規の方法は、ホスト１０１において任意のＯＳが完全にロードされる「前に」少なくとも部分的に動作するものである（ステップの少なくともいくつかは、ハードウェアにより近い別のレベルで動作し、それによってコンピュータ１０１の正常な挙動が影響を受ける）が、メモリ１１０内のソフトウェアは好適なオペレーティング・システム（ＯＳ）１１１を含んでもよい。一旦（もし）ロードされると、ＯＳ１１１は他のコンピュータ・プログラムの実行を本質的に制御して、スケジューリング、入力−出力制御、ファイルおよびデータ管理、メモリ管理、ならびに通信制御および関連するサービスを提供する。
【００３３】
なお、ロードされるべきＯＳは、最初にコンピュータのハード・ディスク・ドライブ１２０に保存されていないことが好ましい。これは特に、私物コンピュータを、そこに保存された所有者のプライベート・データのいずれも用いることなく始動させるというシナリオの場合であろう。しかし状況によっては、コンピュータのハード・ディスクの別個の区域に、トラステッド・デバイスによって始動されるＯＳをキャッシュすることが有用であり得る。以下に説明される好ましい実施形態において、ロードされるべきＯＳは最初にユーザ・デバイス１０に含まれているか、ネットワークを通じてロードされるか、またはコンピュータのハード・ドライブにキャッシュされる。後者の場合には、典型的にＯＳのシグネチャが確認される。
【００３４】
本明細書に記載される方法の少なくとも一部は、ソース・プログラム、実行可能プログラム（オブジェクト・コード）、スクリプト、または実行されるべき命令のセットを含むあらゆるその他のエンティティの形であってもよい。ソース・プログラムのとき、次いでそのプログラムは、デバイス１０もしくはホスト１０１またはその両方のメモリ（単数または複数）に含まれても含まれなくてもよいコンパイラ、アセンブラ、またはインタープリタなどを介して変換される必要がある。さらに、これらの方法は、データおよび方法のクラスを有するオブジェクト指向プログラミング言語として書かれてもよいし、ルーチン、サブルーチン、もしくは関数、またはその組み合わせを有する手続き型プログラミング言語として書かれてもよい。すべての場合に、本明細書において考察される新規の方法は、必要とされるときにはファームウェア１２２に関連し、かつ必要に応じてデバイスのＣＰＵ１１に関連して適切に動作するように設計される。
【００３５】
例示的実施形態において、入力／出力コントローラ１３５には従来のキーボード１５０およびマウス１５５が結合されてもよい。たとえばＩ／Ｏデバイス１４５などのその他の出力デバイスは、たとえばプリンタ、スキャナ、およびマイクロホンなどであるがそれに限定されない入力デバイスを含んでもよい。最後に、Ｉ／Ｏデバイス１０、１４５は入力および出力の両方と通信するデバイスをさらに含んでもよく、それはたとえば（他のファイル、デバイス、システムまたはネットワークにアクセスするための）ネットワーク・インタフェース・カード（ｎｅｔｗｏｒｋ  ｉｎｔｅｒｆａｃｅ  ｃａｒｄ：ＮＩＣ）または変調器／復調器、無線周波数（ｒａｄｉｏ  ｆｒｅｑｕｅｎｃｙ：ＲＦ）またはその他のトランシーバ、電話インタフェース、ブリッジ、およびルータなどであるが、それに限定されない。本明細書において説明されるとおり、Ｉ／Ｏデバイス１０、１４５は、当該技術分野において公知である任意の汎用暗号カードまたはスマート・カードであってもよい。システム１００はさらに、ディスプレイ１３０に結合されたディスプレイ・コントローラ１２５を含んでもよい。例示的実施形態において、システム１００はさらに、ネットワーク１６５に結合するためのネットワーク・インタフェース１６０を含んでもよい。ネットワーク１６５は、コンピュータ１０１と、任意の外部サーバおよびクライアントなどとの間の広帯域接続を介した通信のための、ＩＰに基づくネットワークであってもよい。ネットワーク１６５は、コンピュータ１０１と、たとえばサーバ３０などの外部システムとの間でデータを送受信する。例示的実施形態において、ネットワーク１６５は、サービス・プロバイダによって管理されるマネージドＩＰネットワークであってもよい。ネットワーク１６５は、たとえばＷｉＦｉ、ＷｉＭａｘなどのワイヤレス・プロトコルおよび技術を用いるなどして、ワイヤレスの態様で実現されてもよい。加えてネットワーク１６５は、たとえばローカル・エリア・ネットワーク、広域ネットワーク、メトロポリタン・エリア・ネットワーク、インターネット・ネットワーク、またはその他の類似のタイプのネットワーク環境などのパケット交換ネットワークであってもよい。ネットワーク１６５は、固定ワイヤレス・ネットワーク、ワイヤレス・ローカル・エリア・ネットワーク（ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ：ＬＡＮ）、ワイヤレス広域ネットワーク（ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ：ＷＡＮ）、パーソナル・エリア・ネットワーク（ｐｅｒｓｏｎａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ：ＰＡＮ）、仮想プライベート・ネットワーク（ｖｉｒｔｕａｌ  ｐｒｉｖａｔｅ  ｎｅｔｗｏｒｋ：ＶＰＮ）、イントラネット、またはその他の好適なネットワーク・システムであってもよく、信号を受信および送信するための機器を含む。
【００３６】
コンピュータ１０１がＰＣ、ワークステーション、またはインテリジェント・デバイスなどであるとき、メモリ１１０内のソフトウェアは、基本入出力システム（ｂａｓｉｃ  ｉｎｐｕｔ  ｏｕｔｐｕｔ  ｓｙｓｔｅｍ：ＢＩＯＳ）またはあらゆる類似の初期化ソフトウェア１２２をさらに含んでもよい。ＢＩＯＳは、始動時にハードウェアを初期化およびテストする基本的ソフトウェア・ルーチンのセットである。別様には、一般的にＯＳを始動して、ハードウェア・デバイス間でデータを移すことを支援することが可能である。コンピュータ１０１が活動化されるときにＢＩＯＳが実行され得るように、ＢＩＯＳは典型的にＲＯＭに保存される。
【００３７】
本明細書に記載される方法を実現する目的のために、ＢＩＯＳ１２２は特に起動プロセスを開始および完了させるため、ならびにおそらくはネットワークを通じた通信を開始するために使用（対話）されてもよい。しかしより一般的には、その目的のために、あらゆる好適なファームウェア１２２またはファームウェアに対するインタフェース（すなわち、ソフトウェア・スタックにおいて任意のＯＳ１１１の「下で」動作する、永続的メモリならびにそこに保存されるプログラム・コードおよびデータの組み合わせ）が用いられてもよい。これは典型的にはＢＩＯＳである。しかし、好適なファームウェア１２２またはそれに対するインタフェースの例は、プリブート実行環境（Ｐｒｅｂｏｏｔ  ｅＸｅｃｕｔｉｏｎ  Ｅｎｖｉｒｏｎｍｅｎｔ：ＰＸＥ）ＢＩＯＳ、いわゆるエクステンシブル・ファームウェア・インタフェース（Ｅｘｔｅｎｓｉｂｌｅ  Ｆｉｒｍｗａｒｅ  Ｉｎｔｅｒｆａｃｅ：ＥＦＩ）ＢＩＯＳ、またはさらに、ユニファイド・エクステンシブル・ファームウェア・インタフェース（Ｕｎｉｆｉｅｄ  Ｅｘｔｅｎｓｉｂｌｅ  Ｆｉｒｍｗａｒｅ  Ｉｎｔｅｒｆａｃｅ：ＵＥＦＩ）を含む。後者は、オペレーティング・システムとプラットフォーム・ファームウェアとの間のソフトウェア・インタフェースを規定する仕様である。ＵＥＦＩはＢＩＯＳファームウェア・インタフェースに取って代わることが意図されており、今日すべてのＩＢＭ（ＩＢＭ社の登録商標）のＰＣ準拠コンピュータに存在する。実際には、ほとんどのＵＥＦＩイメージがＢＩＯＳサービスに対するレガシ・サポートを有する。より一般的には、ＢＩＯＳサービスまたは同等のサービスに対するレガシ・サポートを有するあらゆるファームウェアは、本明細書に記載される方法を実現する目的のために予期され得る。さらにより一般的には、ソフトウェア・スタックにおいてオペレーティング・システムの下で動作するあらゆる初期化ファームウェアは、本発明を実現する目的のために招集され得る。
【００３８】
コンピュータ１０１が動作中であるとき、プロセッサ１０５は、メモリ１１０内に保存されたソフトウェアを実行し、メモリ１１０とデータを通信し、かつソフトウェアに従ってコンピュータ１０１の動作を広く制御するように構成される。本明細書に記載される方法の全体または一部、典型的に後者は、プロセッサ１０５によって読取られ、おそらくはプロセッサ１０５内にバッファされ、次いで実行される。
【００３９】
ソフトウェアにおいて実現され得る、本明細書に記載される方法の部分は、任意のコンピュータ関連のシステムもしくは方法による使用、またはそれに関連する使用のための任意のコンピュータ読取り可能媒体に保存されてもよい。
【００４０】
当業者に認識されるとおり、本発明の局面はシステム、方法またはコンピュータ・プログラム製品として具現化されてもよい。したがって本発明の局面は、完全にハードウェアの実施形態、完全にファームウェアもしくはソフトウェアまたはその両方の実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなど）、またはファームウェア／ソフトウェアおよびハードウェアの局面を組み合わせた実施形態の形を取ってもよく、本明細書においてこれらはすべて一般的に「モジュール」、「コンピュータ化された方法」、「プロセス」または「スキーム」などと呼ばれることがある。さらに、本発明の局面は、コンピュータ読取り可能プログラム・コードが具現化されている１つまたはそれ以上のコンピュータ読取り可能媒体（単数または複数）において具現化されるコンピュータ・プログラム製品の形を取ってもよい。
【００４１】
１つまたはそれ以上のコンピュータ読取り可能媒体（単数または複数）の任意の組み合わせが用いられてもよい。コンピュータ読取り可能媒体は、コンピュータ読取り可能信号媒体またはコンピュータ読取り可能記憶媒体であってもよい。コンピュータ読取り可能記憶媒体は、たとえば電子、磁気、光学、電磁気、赤外、または半導体のシステム、装置、もしくはデバイス、または前述のもののあらゆる好適な組み合わせなどであってもよいがそれに限定されない。コンピュータ読取り可能記憶媒体のより特定的な例（非網羅的なリスト）は以下を含む。すなわち、１つまたはそれ以上のワイヤを有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、リード・オンリ・メモリ（ＲＯＭ）、消去可能プログラマブル・リード・オンリ・メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク・リード・オンリ・メモリ（ＣＤ−ＲＯＭ）、光学記憶装置、磁気記憶装置、または前述のもののあらゆる好適な組み合わせである。本文書の状況において、コンピュータ読取り可能記憶媒体は、命令実行システム、装置またはデバイスによる使用、またはそれに関連する使用のためのプログラムを含有または保存し得るあらゆる有形の媒体であってもよい。
【００４２】
コンピュータ読取り可能信号媒体は、たとえばベースバンド内で、または搬送波の部分などとして媒体内で具現化されるコンピュータ読取り可能プログラム・コードを有する伝播データ信号を含んでもよい。こうした伝播信号は、電磁気信号、光学信号、またはそのあらゆる好適な組み合わせを含むがそれに限定されないさまざまな形のいずれかを取ってもよい。コンピュータ読取り可能信号媒体は、コンピュータ読取り可能記憶媒体ではなく、かつ命令実行システム、装置またはデバイスによる使用、またはそれに関連する使用のためのプログラムを通信、伝播または移送できるあらゆるコンピュータ読取り可能媒体であってもよい。
【００４３】
コンピュータ読取り可能媒体において具現化されるプログラム・コードは、ワイヤレス、ワイヤライン、光ファイバ・ケーブル、ＲＦなど、または前述のもののあらゆる好適な組み合わせを含むがそれに限定されない任意の適切な媒体を用いて送信されてもよい。
【００４４】
本発明の局面のための動作を行うためのコンピュータ・プログラム・コードは、オブジェクト指向プログラミング言語、たとえばＪａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、またはＣ＋＋など、および従来の手続き型プログラミング言語、たとえば「Ｃ」プログラミング言語または類似のプログラミング言語などを含む、１つまたはそれ以上のプログラミング言語のあらゆる組み合わせで書かれていてもよい。プログラム・コードは、すべてがユーザのコンピュータで実行されてもよいし、（スタンド・アロン・ソフトウェア・パッケージとして）部分的にユーザのコンピュータで実行されてもよいし、さらに部分的に次のうちの２つまたはそれ以上で実行されてもよい。すなわち、ユーザのコンピュータ１０１、ユーザ・トラステッド・デバイス１０、およびリモート・コンピュータ３０である。ホスト・コンピュータおよびサーバは、ローカル・エリア・ネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、外部コンピュータへの接続（インターネット・サービス・プロバイダを使用するインターネット）を含むあらゆるタイプのネットワークを通じて接続されてもよい。
【００４５】
本発明の実施形態に従う方法、装置（システム）およびコンピュータ・プログラム製品の流れ図もしくはブロック図またはその両方を参照して、本発明の局面を以下に説明する。流れ図もしくはブロック図またはその両方の各ブロック、および流れ図もしくはブロック図またはその両方におけるブロックの組み合わせは、コンピュータ・プログラム命令によって実現され得ることが理解されるだろう。これらのコンピュータ・プログラム命令が、汎用コンピュータもしくは特定目的のコンピュータ、またはマシンを生成するためのその他のプログラマブル・データ処理装置のプロセッサに与えられることによって、そのコンピュータまたはその他のプログラマブル・データ処理装置のプロセッサを介して実行された命令が、流れ図もしくはブロック図またはその両方の単数または複数のブロックにおいて指定された機能／動作を実現するための手段を作成するようにしてもよい。
【００４６】
さらに、これらのコンピュータ・プログラム命令は、コンピュータ、その他のプログラマブル・データ処理装置またはその他のデバイスに特定の態様で機能するよう指示できるコンピュータ読取り可能媒体の中に保存されることによって、コンピュータ読取り可能媒体に保存された命令が、流れ図もしくはブロック図またはその両方の単数または複数のブロックにおいて指定された機能／動作を実現する命令を含む製造品を生成するようにしてもよい。
【００４７】
さらに、コンピュータ・プログラム命令は、コンピュータ、その他のプログラマブル・データ処理装置またはその他のデバイスにロードされて、そのコンピュータ、その他のプログラマブル装置またはその他のデバイスにおいて一連の動作ステップを行わせることにより、コンピュータまたはその他のプログラマブル装置において実行された命令が、流れ図もしくはブロック図またはその両方の単数または複数のブロックにおいて指定された機能／動作を実現するためのプロセスを提供するような、コンピュータに実現されるプロセスを生成してもよい。
【００４８】
図面中の流れ図およびブロック図は、本発明のさまざまな実施形態に従うシステム、方法およびコンピュータ・プログラム製品の実現可能なアーキテクチャ、機能および動作を例示するものである。これに関して、流れ図またはブロック図における各ブロックは、指定された論理関数（単数または複数）を実施するための１つまたはそれ以上の実行可能な命令を含むモジュール、セグメント、またはコードの部分を表していてもよい。さらに、いくつかの代替的な実現においては、ブロック中に示される機能が図面に示される以外の順序で起こってもよいことに留意すべきである。たとえば、連続して示される２つのブロックは、伴われる機能に依存して、実際には実質的に同時に実行されてもよいし、それらのブロックがときには逆の順序で実行されてもよい。さらに、ブロック図もしくは流れ図またはその両方の各ブロック、およびブロック図もしくは流れ図またはその両方のブロックの組み合わせは、指定された機能もしくは動作を行う特定目的のハードウェアに基づくシステム、または特定目的のハードウェアとコンピュータ命令との組み合わせによって実現され得ることを注記する。
【００４９】
前に触れたとおり、コンピュータを外部起動媒体から再始動し、外部媒体から「クリーンな」ＯＳ（セキュリティの観点からの「クリーン」）または別様のトラステッドＯＳを始動することは、ＰＣにおいて実行されるあらゆるソフトウェアがＰＣのオペレーティング・システムに存在し得るウイルスまたは悪意あるソフトウェア（マルウェア）による攻撃を受け得るという問題を解決する１つのやり方である。
【００５０】
しかし、本発明者らが認識したとおり、このアプローチは特に次の疑問を抱かせるものである。ＰＣを再始動したのは果たして本物のユーザであるか？または、新たに始動したクリーンなＯＳを悪意ある仮想化環境が改ざんし始めているだろうか。さらに、セキュリティに無頓着であるか、もしくは利便性を好むか、またはその両方であるユーザが、コンピュータの再始動を回避するためにこうした概念を用いようとする可能性もあるだろう。
【００５１】
一般的に図１から図３を参照して、セキュア・デバイス１０（またはより一般的にユーザ・トラステッド・デバイス、加えて外部トラスト・アンカーとも呼ばれる）に関する本発明の局面を最初に説明する。このデバイスは企業または個人のデバイスであり、すなわち会社またはユーザが所有して制御するデバイス、たとえばＵＳＢデバイス、好ましくはＵＳＢフラッシュ・ドライブ（統合されたユニバーサル・シリアル・バス（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ：ＵＳＢ）インタフェースに加えてフラッシュ・メモリを含むデータ記憶装置）、携帯電話またはパーソナル・デジタル・アシスタント（ｐｅｒｓｏｎａｌ  ｄｉｇｉｔａｌ  ａｓｓｉｓｔａｎｔ：ＰＤＡ）など、このユーザのみが使用するか、またはこのユーザが勤める会社によって所有され制御されるデバイスである。典型的に、このデバイスの重さは２００ｇ未満、好ましくは６０ｇ未満、より好ましくは４０ｇ未満である。このデバイス１０を「セキュア」にするために寄与し得る付加的な局面を後で考察する。
【００５２】
このデバイスは少なくとも、コンピュータ１０１との接続を可能にする接続インタフェース１２と、特にいくつかのモジュール１５、１６、１７を保存する永続的メモリ１４とを含む。後者は、前記インタフェース１２を介したデバイス１０とコンピュータ１０１との接続の際に、デバイス１０もしくはコンピュータ１０１またはその両方におけるいくつかの動作の実行を可能にするように設計される。
【００５３】
こうしたデバイス１０およびコンピュータ１０１が提供されるものと想定する（図３のステップＳ１）。次いで、デバイスの接続の際に（ステップＳ２）、上記の動作は本質的に高レベルにおいて以下のステップに存在する。
１．前記コンピュータ１０１がユーザ・トラステッド・デバイス１０からの起動を開始することを可能にするステップ（ステップＳ３）。
２．プロセッサ１０５に何らかの参照コードを実行する（ステップＳ７）よう指示するステップ。
○なお、このコードは好ましくはデバイス１０自身によって、たとえばプロセッサ命令モジュール１５などによって提供される。変形においては、コードの識別子またはさらにアドレスがプロセッサ１０５に送られてもよい。このコードは典型的に、テストされるマシンに依存し得るいくつかの命令を含む。
○このコードは仮想化環境を感知するように選択されるために「仮想化感知コード」と呼ばれる。すなわち、このコードは仮想化環境において実行されるか、またはネイティブに実行されるかによって実行の態様が異なり、異なる実行特性を生じさせる。実行特性は、特に以下の点が異なっていてもよい。
■その実行によって生成される結果（これは以下に記載される第１のクラスの実施形態に関する）、もしくは
■タイミング特性、プロセッサ・サイクルなどによって測定可能な計算量（第２のクラスの実施形態）、またはその両方。
・たとえば、ｘ８６ベースＰＣに対して特に興味深い計算は、リアル・モードと保護モードとの切換えを行うことであろう。
・仮想化感知コードの他の例は後に示す。
○プロセッサへの命令に従い、コンピュータ１０１が起動を開始している間、すなわち起動プロセスが始まった後から完了する前まで、すなわちＯＳの主要／重要な構成要素がロードされる前に、仮想化感知コードの実行がなされる。
○プロセッサ１０５はさらに、実行完了の際に何らかの完了データ（例、結果、タイムスタンプ、またはタイムスタンプ可能な事象など）を発行するよう指示される、図３のステップＳ８。
３．次の動作セット（Ｓ９〜Ｓ１３）は、完了データに基づいて、その実行が仮想化環境においてなされなかったかどうか（または同等に、その実行がたとえばネイティブなどの安全な環境でなされたかどうか）を判定することである。
４．最後に、もしその実行が仮想化環境においてなされなかったと判定されれば、コンピュータ１０１がデバイス１０からの起動を完了する（ステップＳ１５）ことが可能にされてもよい。特に下記のセクション２．１において考察されるとおり、実施形態において、この条件は間接的に確認され、たとえばユーザとの対話が必要とされてもよい。仮想化環境において実行されないという条件は必ずしも十分条件ではない。それは本発明の状況において必要条件である。特に下記のセクション２．２において考察されるとおり、他の条件が含まれてもよい（例、ＢＩＯＳもテストされてもよい）。
○もしその実行が仮想化環境においてなされなかったと判定されれば、起動プロセスは継続され（ステップＳ１５）、たとえばさらなるデータ、キー、ソフトウェア、ブート・イメージなどがその目的のためにコンピュータ１０１に提供されてもよい。
○反対に、もしその実行が仮想化環境においてなされたと判定されれば、次いで起動プロセスは中止される（ステップＳ１４）。デバイス１０はたとえばシャットダウンされてもよく、すなわちコンピュータ１０１にデータ、キー、ソフトウェアなどは与えられない。
○中間の状況が予期されてもよく、その場合には制限されたバージョンのＯＳ（すべての構成要素は許可されない）または変更されたバージョンのＯＳがロードされて、コンピュータ１０１をクリーンにするためのパッチ／プログラムがロードされてもよい。
【００５４】
コンピュータ１０１は典型的にはパーソナル・コンピュータ（ｐｅｒｓｏｎａｌ  ｃｏｍｐｕｔｅｒ：ＰＣ）であり、好ましくは可搬使用のためのＰＣ、ノートブックもしくはネットブック、またはＰＤＡまたはスマートフォンである。本明細書においては、簡潔のためにそれを（ホスト）コンピュータまたはＰＣと呼ぶ。
【００５５】
要約すると、本発明の基礎をなす原理は次のとおりである。
−モジュール１５〜１７は、ユーザがそれらを信頼できるように最初にトラステッド・デバイス１０に保存される。
−それらのモジュールはＰＣにおいて少なくとも部分的に実行可能であることによって、ＰＣのプロセッサが仮想化感知コードを実行するよう強制する。
−前記モジュールは実行の結果を分析させることによって、その環境が仮想化されていないことを確認し、もしそうであれば起動プロセスが継続される。
【００５６】
仮想化環境を識別することは、特に以下の理由から有利である。
・変更されたＢＩＯＳは、実際にはコンピュータが仮想化されているときに、トラステッド・デバイス１０がホスト・コンピュータから正常に起動されたように装い得る。仮想化されたコンピュータはトラステッド・デバイスに対して実コンピュータと同様の提示を行うだろうが、仮想化層が適合するとみなすときにいつでもトラステッド・デバイスを用いて開始されようとするシステムを変更できるように、特定のコンピュータ命令を変更しているかもしれない。
・ユーザは自発的に、トラステッド・デバイスの上に／それを介して提供されたシステムを、仮想化環境において起動しようとするかもしれない。そうする理由は、私物ＰＣを再起動する必要をなくして、すでに開始したプライベート・プログラムを維持するためかもしれない。すなわち、企業の仕事をするために自身のプライベート・プログラムを停止して、企業の仕事が終わったときにそれらを再始動させる必要をなくすためである。しかし、ユーザはそうすることによって、トラステッド・デバイスからのシステムを上記と同じリスクにさらすことになる。すなわち、このシステムは、仮想マシン実行の一部として感知計算が行われることを認識するコンピュータ上に存在するあらゆるマルウェアに露出されるだろう。
【００５７】
上記の２つの理由から、トラステッド・デバイス１０は、そのデバイスに対して提示されたコンピュータ１０１が実際のものか仮想化されたものかを識別できることが望ましく、それが本解決策である。
【００５８】
ここで図２をより特定的に参照すると、実施形態において、前記モジュール１５〜１７は以下のとおりに分解される。
−ＰＣ１０１がデバイス１０からの起動を開始する（および最終的に完了する）ことを可能にするブートローダ１６、
−本質的にＰＣにおいて、ＰＣのプロセッサ１０５に対し、仮想化感知コードを実行することと、完了データを発行することとを指示するために実行可能であるプロセッサ命令モジュール（すなわちＰＩＭ）１５、および
−検証モジュール１７。このモジュールは、デバイス１０もしくはコンピュータ１０１またはその両方において実行可能であり、完了データを（直接的または間接的に）分析するように設計されている。
【００５９】
ブートローダ１６は、トラステッド・デバイス１０がＰＣ１０１と接続される際に、たとえばＢＩＯＳ１２２などの初期化ファームウェアによって検出可能である。ブートローダはさらに、ＰＩＭ１５をＰＣにおける以後の実行のためにＰＣ１０１に移すことを開始するための、ファームウェア１２２に対する命令を含む。
【００６０】
なお、モジュール１５および１７は単一のエンティティとみなされてもよく（それを仮想化分析モジュール（ｖｉｒｔｕａｌｉｚａｔｉｏｎ  ａｎａｌｙｓｉｓ  ｍｏｄｕｌｅ）すなわちＶＡＭと呼ぶ）、その機能はプロセッサに指示することだけではなく、完了データを分析することも行う。
【００６１】
前に触れたとおり、第１のクラスの実施形態において、ＰＩＭ１５はプロセッサ１０５に対して、コンピュータ１０１、好ましくはプロセッサ自体によって支援される機能のリストを完了データの一部として生成させるコードを実行するように指示してもよい。こうした機能の１つは、ＣＰＵによってハードウェア仮想化支援が提供されるかどうかである（すなわち、ＣＰＵの機能レジスタ内に設定されるｖｔｘビットと、対応するモデル固有レジスタ内のｖｔｘイネーブル・ビットとの形である）。もしそうではないのに、ｃｐｕｉｄ命令によって報告されるＣＰＵはハードウェア仮想化が可能であれば、これはソフトウェアにおいてこれらの命令をエミュレートしない仮想化環境内での実行を示すものである。その他のこうした能力は、システムに存在するハードウェアに対して、仮想化されたグラフィックス（典型的な準仮想化環境の場合）カードが存在するか、または実際のものが存在するかをチェックすることである。
【００６２】
次に、検証モジュールまたはＶＡＭは、支援される機能のリストを何らかの基準データと比較して、その実行が仮想化環境においてなされたかどうかを結論付けてもよい。こうした動作はＣＰＵ１０５によって直接実行されてもよいし、ユーザ・デバイス１０において実行されてもよいし、デバイスおよびＣＰＵにおいて共同で実行されてもよい。
【００６３】
しかし、もっとロバストなのは、プロセッサ１０５が実行完了の際に完了データの一部として最終状態値を生成または使用するようにさせることである。この値は、プロセッサが仮想化感知コードを実行するために必要とされたプロセッサの計算量に依存するものであり、すなわちそれに影響される。こうした値はたとえばタイムスタンプ、またはデバイス１０もしくはその任意のモジュールに対する命令（デバイス１０またはＰＣにおいて実行されるものとする）であって、受信の際にタイムスタンプされ得るものなどであってもよい。さらに、この値はプロセッサ・サイクル数、所与の数の先行サイクルまたは所与の時間の間の最大ＣＰＵ使用、実行後の時刻などであるか、またはそれを参照するものであってもよい。この値を何らかの好適な基準値と比較することによって、次いでその実行が仮想化環境においてなされたかどうかを結論付けることが可能である。
【００６４】
第２のクラスの実施形態は、第１のクラスの実施形態よりも信頼性が高い。なぜなら、プロセッサ１０５またはマシン１０１によって支援される特定の機能が（例、ベンダによって）無効にされたために非仮想化環境を確認することが容易でなくなることがあるためである。
【００６５】
好ましくは、プロセッサ１０５は初期状態値、すなわち仮想化感知コードを実行する前のプロセッサの状態を反映する値をさらに生成または使用してもよい。ここでも、初期状態値はタイムスタンプ、デバイス１０またはそのモジュールに対する命令、プロセッサ・サイクル数、時刻などであってもよい。
【００６６】
初期値および最終値の両方を有することで、プロセッサ使用値、すなわち仮想化感知コードを実行するために必要とされた計算量を直接的かつ明確に定量化する値が容易に得られる。こうしたプロセッサ使用値は、たとえば計算持続時間、プロセッサ・サイクル数、または任意の好適なカウンタなどであってもよい。さらに、プロセッサ使用値は初期値とは独立して生成されてもよい。たとえば、（所与の数の先行サイクルまたは所与の先行時間の間の）最大ＣＰＵ使用は、所与の命令セットを実行するために必要とされる計算量を示すものとなる。
【００６７】
最終状態値はすでに十分であり得るが、上に定義されたプロセッサ使用値を用いることで、（それは実行に必要とされる計算量を直接的かつ明確に定量化しているため）より直接的かつ関連性のある比較が可能になる。
【００６８】
次に検証モジュール１７は、最終状態値／プロセッサ使用値を分析し、次いでその実行が仮想化環境においてなされなかったかどうかを判定するために関与する。その目的のために、検証モジュール１７は、デバイス１０において入手可能であるか、または第三者３０を介して入手可能である基準値と、最終状態値／プロセッサ使用値とを単純に比較してもよい。変形において、検証モジュール１７は結論を出す前に、プロセッサ１０５によって実行されたものと同じ仮想化感知コードの（デバイス１０または第三者３０において行われる）同時実行をトリガした後に、比較に進んでもよい。
【００６９】
加えて、プロセッサ使用値の算出は、その目的のために記録または発行された初期および最終状態値を用いて、プロセッサ１０５によって直接行われてもよいし、（デバイスまたはＰＣのいずれかにおいて実行中の）検証モジュール１７によって行われてもよいことに留意されたい。しかしながら、この算出はデバイスにおいて実行することが好ましい（実行のためにＣＰＵ１１を伴う事柄）。なぜなら、デバイス１０内で算出された使用値は容易に操作され得ないため、こうした解は改ざんされにくいからである。しかし、（ＰＣ１０１とデバイス１０との間に）余分な通信オーバーヘッドが必要となるために、いくらか不正確さが加わるおそれがある。
【００７０】
検証モジュール１７による最終状態値またはプロセッサ使用値の分析は、ＰＣまたはデバイス１０において行われてもよい。使用値の算出および分析をデバイスで実行するか、それともＰＣで実行するかは、ＰＣの既知であるかまたは検出された通信オーバーヘッド特性に基づいて、設計段階で決められてもよいし、実行時に動的に決められてもよい。
【００７１】
プロセッサ使用値の算出がプロセッサに任される（例、ＰＣにおいてカウンタが増分される）ときには、ＣＰＵのタイムスタンプ・カウンタに依拠することが好ましい。このカウンタはＣＰＵサイクルをカウントするため、非常に正確である。ＣＰＵのタイムスタンプ・カウンタを改ざんすることは、かなりの労力を要する。
【００７２】
一連の動作の例は次のとおりである。
１．トラステッド・デバイス１０およびＰＣ１０１が提供される。
２．デバイス１０がＰＣ１０１に差し込まれる。
３．初期化ファームウェア１２２によってブートローダ１６が検出され、ＰＣがデバイス１０からの起動を開始する。
４．ブートローダ１６はＰＣに、ＰＩＭ１５（またはＶＡＭ１５＋１７）を所与のメモリ位置１２１に移すよう指示する。
５．ＰＩＭ１５が実行を開始する、すなわちそれがプロセッサ１０５によって実行される。
６．実行中に、プロセッサに対するＰＩＭの命令によって、プロセッサは
ａ．初期状態値を記録（または発行）し、
ｂ．ＰＩＭ１５によって示される仮想化感知コードの実行を開始し、
ｃ．最終状態値を記録し、
ｄ．たとえば持続時間などのプロセッサ使用値を算出する。
７．次に、検証モジュール１７またはＶＡＭ１５＋１７は、ＣＰＵ１０５もしくはデバイスのプロセッサ１１またはその両方に対する命令によって、以下の動作をトリガするための介入を行う。
ａ．プロセッサ使用値と基準値とを比較する（またはさらに別の、たとえば外部エンティティ３０などに比較するよう指示する）こと、および
ｂ．その実行が仮想化環境においてなされたかどうかを結論付けること。
【００７３】
後で考察されるとおり、最後の２つの動作はＣＰＵ１０５によって、またはユーザ・デバイス１０において直接実行されてもよいし、デバイスおよびＣＰＵにおいて共同で実行されてもよいし、さらに別のエンティティ３０を伴って実行されてもよい。
【００７４】
仮想化感知コードは１つまたはそれ以上の命令を含んでもよい。前に触れたとおり、その例は、プロセッサを保護モードからリアル・モードに切換えるための命令、もしくはプロセッサをリアル・モードから保護モードに切換えるための命令、またはその両方である。こうした命令は、ｘ８６ベースＰＣにとって特に有利である。その計算はハードウェアで行うことができ、迅速である。これに対し、仮想マシン内で実行されるとき、仮想マシンはこれらの命令をキャッチし（これはＣＰＵ例外を通じてのみ行われ得る）、次いでそれらをソフトウェアまたはさらに長時間かかる他の機構において実行する必要がある。たとえハードウェア仮想化支援を有するＣＰＵであっても、これをハードウェアで行うことはできない。なぜならリアル・モードはレガシとみなされ、これらの機能に対してハードウェア仮想化は利用できないからである。
【００７５】
本状況において有利に用いられ得る仮想化感知命令の他の例も存在する。たとえば、
−プロセッサがマシン固有レジスタを読取るための命令、すなわち「ｒｄｍｓｒ」、
−プロセッサがマシン固有レジスタに書込むための命令（「ｗｒｍｓｒ」）、もしくは
−いわゆるａ２０ゲートを可能にするための命令（しかしこれは複雑な実施を必要とするために好ましくない）、またはその組み合わせなどである。
より一般的には、ネイティブに実行されるときと仮想化環境において実行されるときとで異なるリソース特性を有するあらゆるその他の命令が予期され得る。
【００７６】
例示の目的のために、すべての命令がプロセッサ１０５によって実行されるものと想定する（プロセッサ使用値の算出を含む）。その場合には典型的に、ＰＩＭ／ＶＡＭ１５、１７の２種類の命令（セットアップ命令対仮想化感知コード）が区別され、図３を参照してそれらを説明する。
ａ．初期セットアップ
ｉ．プロセッサ１０５を保護モード（ｐｒｏｔｅｃｔｅｄ  ｍｏｄｅ）（以下ＰＭ）にして、プロセッサが保護モードであることを確認する。
ｉｉ．以後の計算（ステップＳ７）および完了データ発行（ステップＳ８）のためにメモリを割り当てる。
ｉｉｉ．開始時刻を記録する（ステップＳ６）。
ｂ．仮想化感知命令は、たとえば以下のいずれかを用いてもよい。
ｉ．以下を含むモード切換え命令。
１．ＰＭからリアル・モード（ｒｅａｌ  ｍｏｄｅ）（以下ＲＭ）への切換え、比較すると仮想化環境の方がエミュレートする時間が長くなる。
２．ＲＭからＰＭへの切換え。
ｉｉ．マシン固有レジスタを読取る（ｒｅａｄ  ｍａｃｈｉｎｅ  ｓｐｅｃｉｆｉｃ  ｒｅｇｉｓｔｅｒ）ための読取り命令（ｒｄｍｓｒ）。
ｉｉｉ．マシン固有レジスタに書込む（ｗｒｉｔｅ  ｔｏ  ｍａｃｈｉｎｅ  ｓｐｅｃｉｆｉｃ  ｒｅｇｉｓｔｅｒ）ための書込み命令（ｗｒｍｓｒ）。
なお、仮想化感知命令は、ＰＩＭ／ＶＡＭからの命令の際にプロセッサによって呼び出される（プロセッサによって実行される）サブルーチンによって実行されてもよい。たとえばグラフィックス・カードなど、仮想化される必要のある他のハードウェア構成要素を仮想化感知命令が含んでいるときに、この選択肢は特に好ましい。この場合、仮想化感知コードはグラフィックス処理ユニット（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ：ＧＰＵ）と対話して、仮想化環境において実行されるときにソフトウェアにおいてエミュレートされる必要があるためにより長い時間がかかるような命令を実行する。他の予想される変形も存在する。
ｃ．最終セットアップ
ｉ．最終状態値（例、終了時刻）を記録する。
ｉｉ．プロセッサ使用値（例、持続時間）を計算する。
ｉｉｉ．基準値と比較する。
ｉｖ．仮想化環境に関して結論を出す。
【００７７】
ここでも、上記実施例において最終セットアップはプロセッサ１０５に向けられることが想定されているが、最終動作はプロセッサもしくはデバイス１０またはその両方において行われてもよい。最終命令が少なくとも部分的にデバイス１０に向けられる場合、これらの命令は、プロセッサがデバイス１０に対して最終命令を実行するよう信号を送るようにするために、多少異なる態様で配置される必要がある。
【００７８】
前に暗示されていた可能性は、得られたプロセッサ使用値（または最終状態値のみ）の分析の一部またはすべてを達成するために、たとえばサーバ３０（図１を参照）などの第三者を関与させることである。その場合、検証モジュール１７はさらに、デバイスまたは好ましくはコンピュータ１０１に対して、サーバ３０と接続するよう指示するように構成される。「中央」サーバは、さまざまな可能性のある常に変化するマシン状態に関してより容易に更新され得る。
【００７９】
その目的のために、検証モジュール１７は、以下のうちの１つまたはそれ以上と対話するように構成されてもよい。
−（ネットワーク・カード１２４によって可能にされる）ネットワーク１６５を通じた通信を開始してサーバ３０に接続するために、初期化ファームウェア１２２と対話することによって、その後コンピュータ１０１のネットワーク・カード１２４と対話する。
−コンピュータ１０１のネットワーク・カード１２４と直接対話する。これは、この場合にはトラステッド・デバイス１０に保存されたネットワーク・カード・ドライバにアクセスすることを必要とする。
−たとえばブートローダなどを介してファームウェア１２２と対話することによって、コンピュータ１０１のＯＳを部分的に実行し、すなわちＰＣ１０１を介してサーバ３０に接続するために必要なＯＳの構成要素をロードする。
【００８０】
デバイス１０と外部エンティティ３０との間の通信は、次の手段によって行われることが好ましい。
−コンピュータ１０１を通じたサーバ３０からデバイス１０へのＨＴＴＰ接続、
−エンド−エンド認証、ならびに
−必要であれば、デバイス１０のセキュア・メモリ１４１に保存され得るシグネチャおよびその他の暗号化データ１３。
【００８１】
根本的な代替形として、たとえばサーバに直接接続するために、たとえばネットワーク・デバイス（有線またはワイヤレス）などのネットワーク・アクセス手段をデバイス１０に装備することが好ましいことがある。こうした解決策は、多少高価になる。しかし、サーバに接触するためにコンピュータ１０１と付加的な対話を行う必要がないため、待ち時間が低減される。ここでも、サーバ３０との通信にエンド−エンド認証および暗号化が用いられてもよい。
【００８２】
次に、図２をより特定的に参照して、永続的メモリ１４は好ましくは以下を含む。
−ＰＩＭ１５またはＶＡＭ１５−１７の第１の部分１５１（または所与の部分）が保存され得るセキュア・メモリ１４１、および
−モジュール（単数または複数）１５、１７の第２の部分１５２（またはその他の部分）が保存され得る、たとえばＳＤカードなどの非セキュア・メモリ１４２。
【００８３】
セキュア・メモリの存在によって、ユーザ・トラステッド・デバイスはセキュア・デバイスとなる。たとえば、モジュール１５の一部は暗号化されて非セキュア・メモリ１４２に存在してもよく、一方で対応する暗号化キー１３がセキュア・メモリ１４１に保存されてもよい。セキュア・メモリは典型的に、コスト上の理由から１２８ｋｏまたは２５６ｋｏに制限される。よってそれは、たとえばハッシュ／シグネチャ１３などの暗号化データを保存するためだけに用いられ得ることが好ましい。したがって、モジュールの一部分１５１がセキュア・メモリ１４１に存在してもよく、一方でモジュールの他の部分１５２は暗号化されて非セキュア・メモリ１４２に存在してもよい。同様に、ブートローダ１６はセキュア・メモリ１４１に存在するシグネチャによって暗号化されて、ＳＤカードに存在してもよい。コンピュータ１０１がブートローダの所与のブロックまたは任意のデータ・チャンクを要求するとき、デバイスのＣＰＵ１１はメモリ１４内に存在するソフトウェアによって、たとえばセキュア・メモリ１４１に保存される暗号化データを用いるなどして要求されたブロックを復号化するように促される。
【００８４】
好ましくは、メモリの制約のために、セキュア・メモリに存在するモジュール（単数または複数）１５−１７の部分（単数または複数）は、セキュア・メモリのサイズの半分未満を占める。しかし理想的には、モジュールのすべての部分ができる限り小さいメモリを占有する。たとえば、モジュール１５のいくつかの実施では、モジュール１５−１７の各部分に対して４ｋｏ未満を用いるもののテストに成功している（およそ３２ｋｏ、典型的には６４ｋｏ未満を消費する、ネットワーク・サーバに接触するためのコードは除く）。リモート・サーバに接触するための機能を実現するコードは、ユーザ・トラステッド・デバイス１０に保存される複数のモジュールに共有され得ることを当業者は認識するだろう。
【００８５】
デバイス１０の接続インタフェース１２は、たとえば次のタイプのものであってもよい。
−ユニバーサル・シリアル・バスすなわちＵＳＢ、
−外部の小型コンピュータ・システム・インタフェース（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）すなわちＳＣＳＩ、
−外部のシリアル・アドバンスト・テクノロジ・アタッチメント（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）すなわちＳＡＴＡ、
−Ｆｉｒｅｗｉｒｅ（Ｒ）、または
−Ｔｈｕｎｄｅｒｂｏｌｔ（Ｒ）。
しかし、より一般的には、コンピュータが外部デバイス１０から起動することを可能にするのは、あらゆる現行または将来のコネクタ（有線またはワイヤレス）であってもよい。加えて、その同じインタフェース１２がさらに、たとえばプロジェクタ、プリンタ、または任意のその他の出力デバイスなどの任意の外部デバイスと、ユーザ・トラステッド・デバイス１０とが通信することを可能にしてもよい。
【００８６】
通常どおり、ユーザ・トラステッド・デバイス１０には、メモリに結合されたたとえば暗号プロセッサなどの処理手段（またはコンピューティング手段、すなわちＣＰＵ）１１が設けられてもよく、メモリはより一般的には永続的メモリ１４を含み、好ましくは非永続的メモリも含む（明確に示されていないが、非永続的メモリは処理手段１１の一部と考えられ得る）。
【００８７】
この状況において、永続的メモリは特に、処理手段１１、１０５によって実行される、たとえば上述のモジュール１５〜１７などのコンピュータ化された方法を保存する。もちろん、本明細書に記載されるモジュール１５〜１７は、異なる機能が設けられ、かつデバイスおよびコンピュータにおいて実行可能な単一のモジュールと考えられてもよい。
【００８８】
必要であれば、セキュア・デバイス１０は、たとえば非セキュア・メモリ１４２または任意のスマート・カードなどのメモリ・カードに保存されたユーザの信用証明を読取るためのカード・リーダを有する。好適な使用は、たとえばカードに保存されたユーザの信用証明などのこうしたデータから安全に行われ得る。特に、ホスト１０１を介し、かつこうしたデータを用いて、ユーザ（または厳密にいえばデバイス１０）と、たとえばサーバ３０などの第三者との間に信頼できる接続を確立できる。変形において、ユーザの信用証明はセキュア・デバイスに直接保存されてもよい。ユーザとの対話を可能にするために、さらなるインタフェース（制御ボタンおよびディスプレイなど）が提供されてもよい。
【００８９】
次に、同様に本発明は、コンピュータ１０１がユーザ・トラステッド・デバイス１０から起動することを可能にするための方法と考えられてもよい。この方法は少なくとも、デバイス１０を参照してすでに説明された以下の必須のステップを含む。
−トラステッド・デバイスがデバイス１０の接続インタフェース１２を介してコンピュータ１０１と接続されるＳ２際に、コンピュータ１０１がトラステッド・デバイス１０からの起動を開始することを可能にするステップＳ３、
−プロセッサ１０５に対して、
○仮想化感知コードを実行することＳ７と、
○実行完了の際に完了データを発行することＳ８とを指示するステップ、
−前記完了データに基づいて、その実行が仮想化環境においてなされなかったかどうかを判定するステップＳ９〜Ｓ１３、および
−その実行が仮想化環境においてなされなかったと判定されたときに、コンピュータ１０１がユーザ・トラステッド・デバイス１０からの起動を完了することを可能にするステップＳ１５。
【００９０】
前にすでに述べたとおり、以下のことを行うために、初期化ファームウェア１２２と対話するためにブートローダが関与することが好ましい。
−前記コンピュータ１０１がユーザ・トラステッド・デバイス１０からの起動を開始することを可能にすることＳ３、および
−ＰＩＭ１５（またはＶＡＭ１５＋１７）を以後の実行Ｓ５〜Ｓ６のためにコンピュータ１０１に移すことを開始することＳ４。すでに説明したとおり、これによってプロセッサ１０５は仮想化感知コードを実行しＳ７、かつ完了の際に完了データを発行するＳ８。
【００９１】
加えて、判定ステップＳ９〜Ｓ１３は、デバイス１０もしくはコンピュータ１０１またはその両方において実行される検証モジュール１７と、好ましくはコンピュータ１０１を介して接続されるサーバ３０とを伴っていてもよい。
【００９２】
よって検証モジュール１７は、
−デバイス１０またはコンピュータ１０１において完了データを局所的に評価してもよいし、
−たとえば前記完了データを基準データと比較することなどによって完了データを評価するサーバに接続してもよい。
【００９３】
後者の場合、サーバは比較に進んで、その実行が仮想化環境においてなされたか否かを結論付けてもよいし（その場合、モジュール１７は単に、起動を完了するか、または何らかの他の動作を行うかを示す命令をサーバから受信する）、またはサーバはその評価の結果を検証モジュール１７に通信し、モジュール１７が判定を完了して、その実行が仮想化環境においてなされたかどうかを結論付けてもよい。スキームの複雑さによって、必要であれば、付加的なステップおよびサーバとの通信ステップが含まれてもよい。
【００９４】
必要であれば、検証モジュール１７は、たとえば第１のテストからの疑わしい結果を明瞭にするなどのために、プロセッサ１０５による付加的な命令の実行をトリガしてもよい、ステップＳ１６。
【００９５】
上記の実施形態は添付の図面を参照しながら簡潔に説明されており、いくつかの変形に適応してもよい。上記の機能のいくつかの組み合わせが予期されてもよい。その例を次のセクションに示す。
【００９６】
２．特定的実施形態／技術的実施の詳細
ここでは、前のセクションで考察されたいくつかの任意の機能を組み合わせた特定的実施形態について考察する。加えて、仮想化感知コードが仮想化環境において実行されるかどうか（セクション２．１）を補足するものとして、ＰＣのファームウェア１２２が改ざんされたかどうかを識別することを可能にする新規の方法をセクション２．２に提供する。実施形態において用いられ得る命令の典型的な例をセクション２．３に示す。
【００９７】
２．１  仮想マシン内の実行を検出する、特定的実施形態および変形
特定的実施形態においては、以下の一連のステップが実施される。トラステッド・デバイス１０がＰＣ１０１に接続され、ＰＣが再始動され、ブートローダが検出され、ＰＩＭ１５が以後の実行のためにすでにＰＣに移されたものと想定する。
１．トラステッド・デバイス１０は、ＰＣ１０１において既知の計算が始まったことを知らされる。外部デバイス１０は、初期状態時刻、すなわちちょうどその計算が開始されたときの、前の最終既知時間値を記録する。
２．計算が開始される。その計算自体が、ネイティブに実行されたときと仮想化環境で実行されたときとでそのタイミング特性が異なるという性質のものであり、それはたとえばリアル・モードと保護モードとの切換えを行う命令などである。より一般的には、もしハードウェアを用いることができればプロセッサが迅速に実行できるような任意の命令である。こうした命令の例は、ｒｄｍｓｒ、ｗｒｍｓｒ（前述のとおり、モデル固有レジスタ命令の読取り／書込み）、または対応するモデル固有レジスタにおいても設定されるときにはｒｄｔｓｃ（タイムスタンプ・カウンタの読取り（ｒｅａｄ  ｔｉｍｅｓｔａｍｐ  ｃｏｕｎｔｅｒ））である。その他の例は、たとえばｘ８６アセンブリ命令マニュアルなどに見出され得る。
３．計算が終了すると、外部デバイス１０に接触する。
４．次いでトラステッド・デバイスは、その計算にどれ位時間がかかったかをチェックし、基準値（たとえばデバイス１０の内部などにおいて同じ計算を同時に実行することなどによって得られてもよいし、予め計算されていてもよい）との比較に基づいて、その計算が仮想化環境において実行された可能性を定める。
ａ．これまでに本発明者らが調べた中で最速の仮想化支援は、コードをネイティブに実行するときよりも約８倍長い。
ｂ．仮想化環境は高速デスクトップＰＣにおいて実行されたのに対し、ネイティブ環境は平均的なノートブックＰＣであったため、同じハードウェアにおける時間差は８という因子よりも大きいことが予測される。これは、提案されるテスト・コードが仮想化環境で実行されたか否かを判定するために十分な余地を与える。
ｃ．たとえば、もっと小さい因子が閾値因子として選択されてもよい。たとえば因子４など（これはすでに警告的である）。
５．外部デバイス１０が仮想マシンの存在を識別するとき、外部デバイス１０は動作を中止してもよいし、好ましくはユーザもしくはセキュアに接続されたサーバ３０またはその両方に対して、動作を中止して作業を停止するように知らせてもよい。
６．もし仮想化環境が検出されなければ、デバイスは、たとえばデバイス１０に保存され得るさらなるソフトウェア構成要素をＰＣが検索することを可能にするなどのために動作を続けるか、または、実行されるべきソフトウェアに対する暗号化キーもしくはその他の認証トークンまたは前述のとおりのクリーンなＯＳを与える。
【００９８】
上記ステップの複数の変形が予期され得る。
・上記の項目１および３は、たとえばＰＣのタイムスタンプ・カウンタ（ｔｉｍｅ  ｓｔａｍｐ  ｃｏｕｎｔｅｒ：ＴＳＣ）など、仮想化環境によって操作できないか、または操作が困難である任意のタイミング・ソースと組み合わされてもよい。
・得られたタイミング値をＰＣ内のＣＰＵと相関させることによって、それが仮想マシンの下で実行されたか否かのさらに良好な推定を得てもよい。
・上記の項目４において、完全に自動化されたプロセスの代わりに、デバイスがユーザに情報を提示して、ＯＳの起動に進むかどうかをユーザに尋ねてもよい。これは、ユーザが信頼されている（かつ、こうした判定を行い得ると考えられる）場合を対象とする。たとえば、ＰＣが所与の命令を実行するのに３０ｍｓかかり、それは典型的にクリーンな環境において１０〜１５ｍｓかかるものであり、一方で悪意ある実行は典型的に１００ｍｓを要するという事実がユーザに知らされてもよい。この場合、ユーザは、たとえば自身のマシンが古いためにこの計算時間は妥当であると結論付けてもよい。別の例において、タイミングが６５ｍｓと示されるとき、ユーザは、たとえばそのマシンが最近の高速のものであり、タイミングは７〜１０ｍｓの範囲のはずであることから、悪意ある環境と結論付けてもよい。
・この情報は客観的に提示されてもよいし、さらに符号化されてもよい（緑、赤または橙色のフラグ、１２３など）。
・こうした設計上の変形は、コンピュータが日々高速化するという事実に適応することを助ける。しかし、これはユーザ側の知識を必要とする。
・項目４において、サーバに進行の許可を求めるために、導入部において引用した非特許文献１に別様に記載されるとおりに、外部デバイスがサーバと対話してもよい。
【００９９】
上記の方法はヒューリスティックなものであり、攻撃を準備するためのリソースおよび時間を有する確信的な攻撃者を止めることはない。しかしおそらく、彼が攻撃を起こすときまでに新たなバージョンのソフトウェアが利用可能になり、攻撃者は再び自身のセットアップを変更する必要が生じるだろう。言換えると、上記の方法は単に任意の攻撃者に対するより多くの障害を置くことによって、そのシステムへの不正侵入を２桁のオーダで困難にすることを意図するものである。
【０１００】
２．２  改ざんされたＢＩＯＳを検出する
本発明者らも認識しているとおり、コンピュータを外部起動媒体から再始動して、外部媒体から「クリーンな」ＯＳまたは別様のトラステッドＯＳを始動することは、別の疑問を抱かせる。すなわち、そのＢＩＯＳ、およびより一般的にはＰＣの始動に関与した任意の初期化ファームウェア１２２は信頼できるものだろうか？実際に、コンピュータを始動している間に他の初期化ファームウェアの実行が促されるか、または促されたかもしれず、それも感染され得る。
【０１０１】
この付加的な問題を解決するために、実施形態において、デバイス１０は付加的な動作をトリガするかまたは実行することができてもよく、その動作は高レベルにおける次のステップからなる。
１．コンピュータ１０１がデバイス１０からの起動を開始する際に（または仮想化がチェックされた後に）、ファームウェア・データをコード（すなわちマッピング・コード）にマップするステップであって、このファームウェア・データは、初期化ファームウェア１２２のプログラム・コード、もしくは起動開始の際にたとえばＢＩＯＳ１２２などの初期化ファームウェアによってアクセス可能なデータ、またはその両方を含む、ステップ、
２．このマッピング・コードの信頼性を証明するステップ、および
３．マッピング・コードが証明されたとき（これは、仮想化環境が関与していないことを判定できるかどうかに加えたさらなる条件である）に、コンピュータ１０１がデバイス１０からの起動を完了することを可能にするステップ。
【０１０２】
この付加的な方法は、初期化ファームウェアのプログラム・コード、もしくは起動開始の際に初期化ファームウェアによってアクセス可能なデータ、またはその両方を含むデータを得た後に、こうしたファームウェア・データをチェックすることによって、こうしたファームウェアの信頼性を証明することを可能にする。よって実施形態において、コンピュータは、仮想化環境が関与していないことを判定できるかどうかに加えて、ファームウェア・データが証明されたときにのみ、外部起動媒体１０からの起動プロセスを完了してもよい。
【０１０３】
ここでも、この付加的アプローチの重要な要素は、それが通常のＰＣ、ＰＤＡなどよりも本質的にマルウェアまたは攻撃者によるアクセスがかなり困難であるＰＣ外部トラスト・アンカー１０を必要とすることである。これらの付加的ステップの別の重要な要素は、適切なときに、すなわちＯＳが始動される（または少なくとも完全に始動される）前にＰＣに関する重要な情報を集めて、それをたとえばセキュアなチャネルなどを介して信頼できる分析に報告し、最後にクリーンなＯＳの実行を開始するかどうかに関する判定を行うことである。
【０１０４】
どの重要な情報、すなわちどのファームウェア・データを用いるかに関して、いくつかの予想される変形が存在する。ファームウェアのプログラム・コード自体を用いることは、攻撃者がプログラム・コードを変更することを防止するのですでに十分である。ファームウェアのプログラム・コード自体とは独立して、たとえば初期化ファームウェアに対する構成データなど、初期化ファームウェアによってアクセス可能なデータを用いることも有利である。なぜなら、実際には構成データ（のみ）が改ざん可能だからである。よって、初期化ファームウェアのファームウェア・プログラム・コードと、初期化ファームウェアによってアクセス可能なデータとの両方を用いることが理想的である。構成データに関しては、たとえば、始動時に、ファームウェア１２２の専用であるか、またはファームウェア１２２によってアクセス可能なＲＯＭまたはＣＭＯＳ  ＲＯＭ上で計算されるハッシュ値（よってファームウェアのプログラム・コードおよび構成データの両方を含む）、およびあらゆるその他のキー識別ストリングなどが用いられてもよい。こうしたデータは、ファームウェアおよびそのファームウェアの状態を特徴付けるため、前記初期化ファームウェアが損なわれているかどうかに関する堅実な根拠を提供する。
【０１０５】
加えて、こうしたデータを単一のコードにマップすることによって、迅速なチェックすなわち迅速な証明が可能になる。たとえば、ＢＩＯＳのＲＯＭ、ＢＩＯＳのＣＭＯＳ  ＲＯＭ上で計算されたハッシュ値、もしくはその他のキーＢＩＯＳ識別ストリング、またはその両方が用いられてもよい。より一般的には、その後のチェックを容易にするために、ファームウェア・データセットを、好ましくはたとえば単一の整数などの固定長のコードにマップできる、任意のアルゴリズム／サブルーチンが用いられてもよい。多くの点からハッシュ関数を用いることがより適切であると考えられるが、単純なチェックサムが依拠されてもよい。所望のセキュリティ・レベルによっては、なおもフィンガープリント、すなわち相当量のデータセットを一意に識別するための高性能ハッシュ関数、暗号ハッシュ関数、またはさらにランダム化関数を用いることが好まれてもよい。
【０１０６】
コード・マッピングは、仮想化環境をテストする前または後に行われてもよい。再起動の必要はない。たとえば、仮想化チェックおよびＣＭＯＳチェックサムを実行する順序は問題にならない。しかし、両方のデータ項目（仮想化データおよびハードウェア・フィンガープリント）がデータベース内で計算されてチェックされることが有利である。このやり方で、仮想化およびハードウェア・フィンガープリントの両方がホワイト・リストに適合する必要がある。加えて、仮想化およびハードウェア・フィンガープリントは、独立にではなく相関的にテストされてもよい。たとえば、それ自体は許容可能な仮想化データが得られて、それをそれ自体は許容可能なハードウェア・フィンガープリントと対にしたときに、正しいと識別されない組み合わせが形成される、すなわち仮想化データが正しいハードウェア・プロファイルと適合しないことがある。たとえば、ハードウェア・フィンガープリントは高速コンピュータを有するＰＣを識別しているのに、仮想化データは低速コンピュータのタイムスタンプを生成するとき、たとえば同じデータベース内などでこれら２つを組み合わせて、得られた組み合わせをチェックすることによって、そのことを識別できる。
【０１０７】
たとえば、セクション２．１および２．２に記載される２つのアプローチを組み合わせて、本発明は、ユーザ・トラステッド・デバイス、またはそれに応じて、コンピュータ１０１がユーザ・トラステッド・デバイス１０から起動することを可能にするための方法として具現化されてもよい。本質的に、ここでもユーザ・トラステッド・デバイス１０は、前記コンピュータ１０１との接続Ｓ２を可能にする接続インタフェース１２を含み、かつこの方法は、
１．前記接続インタフェース１２を介したデバイス１０と前記コンピュータ１０１との接続の際に、コンピュータ１０１がデバイス１０からの起動を開始することを可能にするステップと、
２．ファームウェア・データをマッピング・コードにマップするステップであって、ファームウェア・データは、初期化ファームウェアのコード、もしくは起動開始の際にコンピュータの初期化ファームウェア１２２によってアクセス可能なデータ、またはその両方、および好ましくは初期化ファームウェアのハードウェア・データセットを含む、ステップと、
３．マッピング・コードの信頼性を証明するステップと、
４．コンピュータ１０１のプロセッサ１０５に対して、
ａ．仮想化感知コードを実行すること、および
ｂ．実行完了の際に完了データを発行することを指示するステップであって、この完了データは仮想化感知コードおよびプロセッサ１０５によるその実行に依存する、ステップと、
５．前記完了データに基づいて、その実行が仮想化環境においてなされなかったかどうかを判定するステップと、
６．以下の場合、すなわち
ａ．その実行が仮想化環境においてなされなかったことが判定され、かつ
ｂ．マッピング・コードが証明されるか、または
ｃ．仮想化メトリクス、マッピング・コード、およびマッピング・コードと（に関して）相関させた仮想化メトリクスが正しいときに、
前記コンピュータ１０１がユーザ・トラステッド・デバイス１０からの起動を完了することを可能にするステップとを含む。
【０１０８】
なお、変形においてはステップ２〜３をステップ４〜５の後に行っても、並行して行っても、インタレースして行ってもよい。
【０１０９】
前に言及したとおり、上記のステップ２および４の間に再起動は必要ない。しかし最後のコメントとして注記すると、コンピュータは、（上記のステップ１を実行するため、すなわち起動を開始するために）デバイス１０がそれに接続された後、または別様にそれが外部デバイス１０から始動される状態にされたときに、大抵（再）始動される必要がある。したがって、たとえば次の選択肢が考えられる。
・コンピュータ１０１は停止しており、デバイス１０を差し込み、コンピュータを始動するか、または
・コンピュータ１０１はすでに走行しており、デバイスを差し込み、コンピュータを再始動する。
【０１１０】
２．３  実施形態において用いられる命令の例
前に仮想化感知命令の例について考察した。ここでは、本発明の実施形態を実現するために有利に用いられ得る（一連の）他の命令の例を以下に示す。本質的に同じことを達成するために用いられ得る、同じ／類似の機能を有する他の命令が存在することを当業者は認識するだろう。
【０１１１】
最初に、ＢＩＯＳ情報（「ファームウェア構成データ」）の読取りを可能にするＡＰＩの例を以下に示す。
ｏｕｔｂ（ｃｍｏｓ＿ｄａｔａ＿ａｄｄｒｅｓｓ，０ｘ７０）；
ｄａｔａ＿ａｔ＿ａｄｄｒｅｓｓ＝ｉｎｂ（０ｘ７１）；
ここで、ｃｍｏｓ＿ｄａｔａ＿ａｄｄｒｅｓｓは０．．．ｍａｘ＿ｃｍｏｓ＿ｄａｔａ＿ａｄｄｒｅｓｓの範囲で反復される。ファームウェアのプログラム・コード自体、もしくはその構成データ、またはその両方を読取るためのその他の類似の命令は、インテル（Ｉｎｔｅｌ）（Ｒ）８２８０２ＡＢ／８２８０２ＡＣファームウェア・ハブ（Ｆｉｒｍｗａｒｅ  Ｈｕｂ：ＦＷＨ）によって提供される。
【０１１２】
ＥＦＩ  ＢＩＯＳにおいて、特にたとえばインテル（Ｒ）ファームウェア・ハブなどが用いられるときには、ＢＩＯＳ情報を得るために同じ命令が用いられてもよい。
【０１１３】
次に、ＰＣからユーザ・トラステッド・デバイスと対話することを可能にする命令の例を示す。
ユーザ・トラステッド・デバイス（大容量記憶装置）からブロックを読取る
ｍｏｖ  ａｈ，４２ｈ
ｍｏｖ  ｄｌ，ｔｈｅ＿ｄｒｉｖｅ＿ｔｏ＿ｒｅａｄ＿ｆｒｏｍ
ｍｏｖ  ｄｓ：ｓｉ，ｄｉｓｋ＿ａｄｄｒｅｓｓ＿ｐａｃｋｅｔ＿ｄｅｓｃｒｉｂｉｎｇ＿ｗｈａｔ＿ｔｏ＿ｒｅａｄ
ｉｎｔ  １３ｈ
【０１１４】
ユーザ・トラステッド・デバイス（大容量記憶装置）にブロックを書込む
ｍｏｖ  ａｈ，４３ｈ
ｍｏｖ  ｄｌ，ｔｈｅ＿ｄｒｉｖｅ＿ｔｏ＿ｗｒｉｔｅ＿ｔｏ
ｍｏｖ  ｄｓ：ｓｉ，ｄｉｓｋ＿ａｄｄｒｅｓｓ＿ｐａｃｋｅｔ＿ｄｅｓｃｒｉｂｉｎｇ＿ｗｈａｔ＿ｔｏ＿ｗｒｉｔｅ
ｉｎｔ  １３ｈ
【０１１５】
ＥＦＩ  ＢＩＯＳにおいて、いわゆるＥＦＩ＿ＤＩＳＫ＿ＩＯ＿ＰＲＯＴＯＣＯＬまたはＥＦＩ＿ＢＬＯＣＫ＿ＩＯ＿ＰＲＯＴＯＣＯＬが用いられてもよく、これらはどちらも読取りおよび書込み機能を提供する。
【０１１６】
当業者にとって、好適なディスクＩ／Ｏコマンドは容易にアクセス可能である。
【０１１７】
最後に、ＰＸＥ  ＢＩＯＳを初期化するためにモジュールによって使用され得る一連の命令の例は、以下を含むがこれに限定されない。
ＵＮＤＩ  ＲＯＭをロードする
ＰＸＥＮＶ＿ＳＴＡＲＴ＿ＵＮＤＩ
ＰＸＥＮＶ＿ＵＮＤＩ＿ＳＴＡＲＴＵＰ
ＰＸＥＮＶ＿ＵＮＤＩ＿ＩＮＩＴＩＡＬＩＺＥ
ＰＸＥＮＶ＿ＵＮＤＩ＿ＯＰＥＮ
【０１１８】
ネットワーク・カード１２４を介してサーバ３０にパケットを送るために、付加的な命令（例、ＰＸＥＮＶ＿ＵＮＤＩ＿ＴＲＡＮＳＭＩＴ）が追加されてもよい。こうした命令によって、モジュールはホストにおける実行の際に、ネットワーク・カード１２４を初期化するためにＰＸＥ  ＢＩＯＳ１２２と対話し、それによってネットワークを通じた通信が開始され得る。
【０１１９】
ＥＦＩ＿ＳＩＭＰＬＥ＿ＮＥＴＷＯＲＫ  ＡＰＩにおいては、ＥＦＩおよびＵＥＦＩ  ＢＩＯＳによって類似の命令が提供される（初期化、開始、停止、受信、送信）。ＢＩＯＳはさらに、ＴＣＰ／ＩＰスタックのより高レベルのプロトコル実施、および同様に使用され得るその他のネットワーキング・プロトコルを提供してもよい。
【０１２０】
限られた数の実施形態、変形および添付の図面を参照して本発明を説明したが、本発明の範囲から逸脱することなく、さまざまな変更が加えられてもよいし、同等物が置換されてもよいことが当業者に理解されるだろう。特に、所与の実施形態、変形において述べられるか、または図面に示される特徴（デバイスまたは方法の形）は、本発明の範囲から逸脱することなく、別の実施形態、変形または図面における別の特徴と組み合わされるか、または置き換えられてもよい。したがって、上記の実施形態または変形のいずれかに関して記載された特徴のさまざまな組み合わせが予期されてもよく、それらは添付の請求項の範囲内にとどまる。加えて、本発明の範囲から逸脱することなく、特定の状況または材料を本発明の教示に適合させるために、多くの軽微な修正が加えられてもよい。したがって、本発明は開示される特定の実施形態に限定されず、本発明は添付の請求項の範囲内にあるすべての実施形態を含むことが意図される。さらに、上記において明確に触れられたもの以外の多くのその他の変形が予期され得る。たとえば、説明を明瞭にするために、主要な機能はそれぞれのモジュール１５、１６、１７に割り当てられるものと記載されている。しかし、これらの機能のうちの異なる機能が各々に設けられた１つまたはそれ以上のモジュールに分散された同じ機能によって、本発明の実施形態が同等に説明され得る。たとえば、ブートローダ１６およびＰＩＭ１５は単一のモジュールとみなされてもよく、それはおそらくは「ブートローダ」と呼ばれる一方で、本明細書に別様に記載されるものと同じ機能を実行してもよい。
【符号の説明】
【０１２１】
１０  ユーザ・トラステッド・デバイス
１１  セキュア・デバイスのＣＰＵ
１２  接続インタフェース
１４  永続的メモリ
１４１  セキュア・メモリ
１４２  非セキュア・メモリ
１５  プロセッサ命令モジュール（ＰＩＭ）
１５１  プロセッサ命令モジュール（ＰＩＭ）の第１の部分
１５２  プロセッサ命令モジュール（ＰＩＭ）の第２の部分
１６  ブートローダ
１７  検証モジュール
３０  サーバ
１５、１７  仮想化分析モジュール（ＶＡＭ）
１００  一般的コンピュータ・システム
１０１  ホスト・コンピュータ
１０５  コンピュータ・プロセッサ
１１０  メモリ
１１１  オペレーティング・システム（ＯＳ）
１１５  メモリ・コントローラ
１２０  物理記憶媒体（物理ディスク）
１２２  ホスト・コンピュータのファームウェア（ＢＩＯＳ）
１２４  ネットワーク・カード
１２５  ディスプレイ・コントローラ
１３０  ディスプレイ
１４５  Ｉ／Ｏデバイス（または周辺装置）
１５０  キーボード
１５５  マウス
１６５  ネットワーク
【図１】
2015537322.tif 000003
【図２】
2015537322.tif 000004
【図３】
2015537322.tif 000005
【手続補正書】
【提出日】平成27年6月30日(2015.6.30)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ユーザ・トラステッド・デバイス（１０）であって、
コンピュータ（１０１）との接続を可能にする接続インタフェース（１２）と、
複数のモジュール（１５、１６、１７）を保存する永続的メモリ（１４）とを含み、前記モジュールは、前記接続インタフェース（１２）を介した前記ユーザ・トラステッド・デバイス（１０）と前記コンピュータ（１０１）との接続の際に、
前記コンピュータ（１０１）が前記ユーザ・トラステッド・デバイス（１０）からの起動を開始することを可能にし、
前記コンピュータ（１０１）のプロセッサ（１０５）に対して、起動を開始する際に仮想化感知コードを実行することと、実行完了の際に完了データを発行することとを指示し、
こうした完了データに基づいて、前記実行が仮想化環境においてなされなかったかどうかを判定し、かつ、
前記実行が仮想化環境においてなされなかったと判定するときに、前記コンピュータ（１０１）が前記ユーザ・トラステッド・デバイス（１０）からの起動を完了することを可能にするように構成される、ユーザ・トラステッド・デバイス（１０）。
【請求項２】
前記複数のモジュールは、
前記コンピュータ（１０１）が前記デバイス（１０）からの起動を開始および完了することを可能にするブートローダ（１６）と、
前記仮想化感知コードを実行し、かつ前記完了データを発行することを前記プロセッサ（１０５）に指示するために前記コンピュータ（１０１）において実行可能なプロセッサ命令モジュール（１５）と、
前記完了データに基づいて、前記実行が仮想化環境においてなされなかったかどうかを判定するよう指示するように構成された検証モジュール（１７）とを含み、前記検証モジュール（１７）は、前記デバイス（１０）もしくは前記コンピュータ（１０１）またはその両方において実行可能であり、
前記ブートローダ（１６）は、前記ユーザ・トラステッド・デバイス（１０）と前記コンピュータ（１０１）との接続の際に初期化ファームウェア（１２２）によって検出可能であり、かつ前記ファームウェア（１２２）が前記プロセッサ命令モジュール（１５）を以後の前記コンピュータ（１０１）における実行のために前記コンピュータ（１０１）に移すことを開始するための命令を含む、請求項１に記載のユーザ・トラステッド・デバイス（１０）。
【請求項３】
前記プロセッサ命令モジュール（１５）はさらに、前記コンピュータ（１０１）における実行の際に、前記プロセッサが前記コンピュータ（１０１）および前記プロセッサ自体によって支援される１つまたはそれ以上の機能のリストを前記完了データの一部として生成するように設計された仮想化感知コードを実行することを前記プロセッサ（１０５）に指示するように構成される、請求項２に記載のユーザ・トラステッド・デバイス（１０）。
【請求項４】
前記プロセッサ命令モジュール（１５）はさらに、前記コンピュータ（１０１）における実行の際に、前記仮想化感知コードを実行するために必要とされる前記プロセッサの計算量に依存する最終状態値を前記完了データの一部として生成することを前記プロセッサ（１０５）に指示するように構成され、
かつ、前記プロセッサ命令モジュール（１５）はさらに、前記コンピュータ（１０１）における実行の際に、前記仮想化感知コードを実行する前の前記プロセッサの状態を反映する初期状態値を生成することを前記プロセッサ（１０５）に指示するように構成される、請求項２または３に記載のユーザ・トラステッド・デバイス（１０）。
【請求項５】
前記検証モジュール（１７）はさらに、
前記初期状態値および前記最終状態値に基づいて、前記仮想化感知コードを実行するために必要とされる前記プロセッサの前記計算量を定量化するプロセッサ使用値、たとえば計算持続時間、プロセッサ・サイクル数、またはカウンタなどを生成し、かつ
前記プロセッサ使用値に基づいて、前記実行が仮想化環境においてなされなかったかどうかを判定するように構成される、請求項４に記載のユーザ・トラステッド・デバイス（１０）。
【請求項６】
前記プロセッサ命令モジュール（１５）はさらに、前記コンピュータ（１０１）における実行の際に、前記仮想化感知コードを実行するために必要とされる前記プロセッサの前記計算量を定量化するプロセッサ使用値、たとえば計算持続時間、プロセッサ・サイクル数、またはカウンタなどを前記完了データの一部として生成することを前記プロセッサ（１０５）に指示するように構成され、
かつ前記検証モジュール（１７）はさらに、前記プロセッサ使用値に基づいて、前記実行が仮想化環境においてなされなかったかどうかを判定するよう指示するように構成される、請求項４に記載のユーザ・トラステッド・デバイス（１０）。
【請求項７】
前記検証モジュール（１７）はさらに、前記実行が仮想化環境においてなされなかったかどうかをサーバにおいて少なくとも部分的に判定するために、前記コンピュータ（１０１）を介してサーバ（３０）に接続するよう指示するように構成される、請求項２から６のいずれか１項に記載のユーザ・トラステッド・デバイス（１０）。
【請求項８】
前記検証モジュール（１７）はさらに、
−前記サーバ（３０）に接続するために、ネットワーク・カード（１２４）によって可能にされるネットワーク（１６５）を通じた通信を開始するために、前記ファームウェア（１２２）と対話することでその後前記コンピュータ（１０１）の前記ネットワーク・カード（１２４）と対話するステップ、
−前記サーバに接続するために、前記ネットワーク・カードによって可能にされるネットワークを通じた通信を開始するために、前記ユーザ・トラステッド・デバイス（１０）に保存されたネットワーク・カード・ドライバにアクセスして、前記コンピュータ（１０１）のネットワーク・カード（１２４）と直接対話するステップ、および
−好ましくは前記ブートローダを介して前記ファームウェア（１２２）と対話することによって、前記コンピュータ（１０１）を介して前記サーバに接続するために必要である前記コンピュータのオペレーティング・システムを部分的に実行するステップ
のうちの１つまたはそれ以上を実行するように構成される、請求項７に記載のユーザ・トラステッド・デバイス（１０）。
【請求項９】
前記仮想化感知コードは、
−前記プロセッサを保護モードからリアル・モードに切換えるための命令、もしくは前記プロセッサをリアル・モードから保護モードに切換えるための命令、またはその両方、
−前記プロセッサがマシン固有レジスタを読取るための命令、および
−前記プロセッサがマシン固有レジスタに書込むための命令
のうちの１つまたはそれ以上を含む、請求項１から８のいずれか１項に記載のユーザ・トラステッド・デバイス（１０）。
【請求項１０】
コンピュータ（１０１）がユーザ・トラステッド・デバイス（１０）から起動することを可能にするための方法であって、前記ユーザ・トラステッド・デバイス（１０）は前記コンピュータ（１０１）との接続（Ｓ２）を可能にする接続インタフェース（１２）を含み、前記方法は、
前記接続インタフェース（１２）を介した前記ユーザ・トラステッド・デバイスと前記コンピュータ（１０１）との接続（Ｓ２）の際に、前記コンピュータ（１０１）が前記ユーザ・トラステッド・デバイス（１０）からの起動を開始することを可能にするステップ（Ｓ３）と、
前記コンピュータ（１０１）のプロセッサ（１０５）に対して、
仮想化感知コードを実行すること（Ｓ７）、および
実行完了の際に完了データを発行すること（Ｓ８）を指示するステップであって、前記完了データは前記仮想化感知コードおよび前記プロセッサ（１０５）によるその実行に依存するものである、ステップと、
前記完了データに基づいて、前記実行が仮想化環境においてなされなかったかどうかを判定するステップ（Ｓ９〜Ｓ１３）と、
前記実行が仮想化環境においてなされなかったと判定するときに、前記コンピュータ（１０１）が前記ユーザ・トラステッド・デバイス（１０）からの起動を完了することを可能にするステップ（Ｓ１５）とを含む、方法。
【請求項１１】
前記ユーザ・トラステッド・デバイス（１０）と前記コンピュータ（１０１）との接続の際に、前記コンピュータ（１０１）の初期化ファームウェア（１２２）と対話することによって、
前記コンピュータ（１０１）が前記ユーザ・トラステッド・デバイス（１０）からの起動を開始することを可能にし（Ｓ３）、かつ
プロセッサ命令モジュール（１５）を以後の前記コンピュータ（１０１）における実行（Ｓ５〜Ｓ６）のために前記コンピュータ（１０１）に移すことを開始する（Ｓ４）ことによって、前記プロセッサ（１０５）に前記仮想化感知コードを実行させ（Ｓ７）、かつ実行完了の際に前記完了データを発行させる（Ｓ８）、ステップをさらに含む、請求項１０に記載の方法。
【請求項１２】
前記実行が仮想化環境においてなされなかったかどうかを判定するステップ（Ｓ９〜Ｓ１４）は、前記デバイス（１０）もしくは前記コンピュータ（１０１）またはその両方において検証モジュール（１７）を実行するステップ（Ｓ９）を含み、前記検証モジュール（１７）を実行するステップ（Ｓ９）は好ましくは、前記実行が仮想化環境においてなされなかったかどうかをサーバにおいて少なくとも部分的に判定する（Ｓ１１）ために、前記コンピュータ（１０１）を介してサーバ（３０）に接続するステップ（Ｓ１０）を含む、請求項１０または１１に記載の方法。
【請求項１３】
前記プロセッサ（１０５）はさらに、前記コンピュータ（１０１）および前記プロセッサ自体によって支援される１つまたはそれ以上の機能のリストを前記完了データの一部として生成する（Ｓ８）ように指示される、請求項１０から１２のいずれか１項に記載の方法。
【請求項１４】
前記プロセッサ（１０５）はさらに、前記仮想化感知コードを実行するために必要とされた前記プロセッサの計算量に依存する最終状態値、たとえば計算持続時間、プロセッサ・サイクル数、またはカウンタなどを前記完了データの一部として生成する（Ｓ８）ように指示され、
前記プロセッサ（１０５）はさらに、前記仮想化感知コードを実行する（Ｓ７）前の初期状態値を生成する（Ｓ６）ように指示される、請求項１０から１３のいずれか１項に記載の方法。
【請求項１５】
コンピュータ（１０１）がユーザ・トラステッド・デバイス（１０）から起動することを可能にするためのコンピュータ・プログラムであって、前記コンピュータ・プログラムは、ともに具現化される複数のモジュール（１５、１６、１７）を含み、前記複数のモジュールは、請求項１０から１４に記載のいずれかの方法のすべてを実行することを可能にする、コンピュータ・プログラム。
【国際調査報告】
2015537322.tif 000006
2015537322.tif 000007