(57)【要約】      （修正有）【課題】適切に署名されたプログラムコードのみがコンピューティング装置で実行されること、およびこうしたプログラムコードが実行前に修正または変更されていないことを確実にする。【解決手段】システムは、様々な特権レベルをサポートするメモリおよびプロセッサを含む。ある特権レベルで実行されるプログラムコードのみが、メモリをマッピングし、読み取り専用、書き込み可能、実行可能などのアクセス許可をマッピングされたメモリに割り当てる。その特権レベルでプロセッサ上で実行される制御コードは、異なる特権レベルで実行されている他のコードからの要求に応答して、実行可能ファイルがマッピングされたメモリにロードされ、次いで制御コードは、実行可能ファイルに関連付けられている署名を確認し、確認された場合、制御コードは、実行可能ファイルを、制御コードが実行されるもの以外の特権レベルでプロセッサによって実行できるようにする。【選択図】図２
2006065847.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサおよびメモリを含むシステムにおいて実行可能ファイルの安全な実行を確実にする方法であって、前記プロセッサは様々な特権レベルをサポートし、前記特権レベルのうちの第１のもので実行されるプログラムコードのみがメモリをマッピングし、前記マッピングされたメモリを読み取り専用、書き込み可能、および実行可能として指定することができ、前記方法は、前記プロセッサの前記特権レベルのうちの前記第１のもので実行される以下の、
異なる特権レベルで実行される他のプログラムコードからの要求に応答して、実行可能ファイルをロードするためのメモリの一部分をマッピングするステップと、
前記実行可能ファイルがメモリの前記マッピングされた一部分にロードされた後、前記実行可能ファイルに関連付けられている署名を確認するステップと、
前記署名が確認されると、前記実行可能ファイルを前記特権レベルのうちの前記第１のもの以外の特権レベルで実行できるようにし、そうでなければ、前記実行可能ファイルが前記プロセッサで実行されるのを防ぐステップと
を備えることを特徴とする方法。
【請求項２】
前記実行可能ファイルに関連付けられている前記署名は前記ファイルの少なくとも一部のダイジェストを含み、前記ダイジェストはプライベートキーを使用して暗号化され、前記ファイルの前記署名を確認する前記ステップは、
前記プライベートキーに対応するパブリックキーを使用して前記暗号化されたダイジェストを解読するステップと、
前記ファイルの前記少なくとも一部の確認ダイジェストを計算するステップであって、前記確認ダイジェストが暗号化された前記ダイジェストの生成に使用されるものと同じ方法を使用して生成されるステップと、
前記確認ダイジェストを前記解読されたダイジェストと比較するステップであって、前記確認ダイジェストおよび前記解読されたダイジェストが同じである場合、前記署名が確認されるステップと
を含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記実行可能ファイルはヘッダーおよび１つまたは複数のセクションを含み、前記暗号化されたダイジェストは前記ファイルの前記ヘッダーのダイジェストであり、前記ファイルの前記ヘッダーは、前記ファイルのそれぞれのセクションにそれぞれ対応する１つまたは複数のセクションダイジェストを含み、前記方法は、前記ファイルの前記１つまたは複数のセクションのそれぞれについて、
前記ファイルの前記ヘッダー内に前記対応するセクションダイジェストを生成するために使用されるものと同じ方法を使用して前記ファイルの前記セクションの確認ダイジェストを計算するステップと、
前記ファイルの任意のセクションについて、前記確認ダイジェストが前記ファイルの前記ヘッダー内の前記対応するセクションダイジェストに一致しない場合はプロセッサ上での実行が防止される前記ファイルの前記ヘッダー内の前記対応するセクションダイジェストと前記確認ダイジェストとを比較するステップと
をさらに備えることを特徴とする請求項２に記載の方法。
【請求項４】
前記マッピングステップは、前記ファイルの前記ヘッダーをロードするためのメモリの第１の部分をマッピングするステップと、前記ヘッダーの確認ダイジェストを計算する前記のステップを実行し、前記ヘッダーの前記確認ダイジェストと前記ヘッダーの前記解読されたダイジェストとを比較した後のみ、前記ファイルの前記１つまたは複数のセクションをロードするためのメモリの第２の部分をマッピングするステップとを含むことを特徴とする請求項３に記載の方法。
【請求項５】
前記確認ステップを実行する前にメモリの前記マッピングされた一部分を読み取り専用として指定するステップをさらに備えることを特徴とする請求項１に記載の方法。
【請求項６】
前記ファイルの前記少なくとも一部にハッシュアルゴリズムを適用することによって、暗号化された前記ダイジェストが生成され、確認ダイジェストを計算する前記ステップは、暗号化された前記ダイジェストの生成に使用された前記同じハッシュアルゴリズムを使用して前記確認ダイジェストを生成するステップを含むことを特徴とする請求項２に記載の方法。
【請求項７】
前記ハッシュアルゴリズムはＳＨＡ−１アルゴリズムを含むことを特徴とする請求項６に記載の方法。
【請求項８】
前記実行可能ファイルを実行できるようにする前記ステップは、前記実行可能ファイルを含むメモリの前記マッピングされた一部分を実行可能として指定し、前記メモリ内の前記実行可能ファイルのエントリポイントに分岐するステップを含むことを特徴とする請求項１に記載の方法。
【請求項９】
実行可能と指定されているメモリのマッピングされた一部分が書き込み可能とも指定されることを防ぐステップをさらに備えることを特徴とする請求項８に記載の方法。
【請求項１０】
書き込み可能と指定されているメモリのマッピングされた一部分が実行可能とも指定されることを防ぐステップをさらに備えることを特徴とする請求項９に記載の方法。
【請求項１１】
メモリの一部分をマッピングする前記ステップは、メモリの仮想ページをメモリの実ページにマッピングするステップを含むことを特徴とする請求項１に記載の方法。
【請求項１２】
各ステップは前記プロセッサの実モードで実行されることを特徴とする請求項１に記載の方法。
【請求項１３】
プロセッサおよびメモリを含むシステムで使用するプログラムコードを格納するコンピュータ読み取り可能な記録媒体であって、前記プロセッサは様々な特権レベルをサポートし、前記特権レベルのうちの第１のもので実行されるプログラムコードのみがメモリをマッピングし、前記マッピングされたメモリを読み取り専用、書き込み可能、および実行可能として指定することができ、前記プログラムコードは、前記１つの特権レベルで前記プロセッサによって実行されると、前記プロセッサに、
異なる特権レベルで実行される他のプログラムコードからの要求に応答して、実行可能ファイルをロードするためのメモリの一部分をマッピングするステップと、
前記実行可能ファイルがメモリの前記マッピングされた一部分にロードされた後、前記実行可能ファイルに関連付けられている署名を確認するステップと、
前記署名が確認されると、前記実行可能ファイルを前記特権レベルのうちの前記第１のもの以外の特権レベルで実行できるようにし、そうでなければ、前記実行可能ファイルが前記プロセッサで実行されるのを防ぐステップと
を実行させることを特徴とするコンピュータ読み取り可能な記録媒体。
【請求項１４】
前記実行可能ファイルに関連付けられている前記署名は前記ファイルの少なくとも一部のダイジェストを含み、前記ダイジェストはプライベートキーを使用して暗号化され、前記ファイルの前記署名を確認する前記ステップは、
前記プライベートキーに対応するパブリックキーを使用して前記暗号化されたダイジェストを解読するステップと、
前記ファイルの前記少なくとも一部の確認ダイジェストを計算するステップであって、前記確認ダイジェストが暗号化された前記ダイジェストの生成に使用されるものと同じ方法を使用して生成されるステップと、
前記確認ダイジェストを前記解読されたダイジェストと比較するステップであって、前記確認ダイジェストおよび前記解読されたダイジェストが同じである場合、前記署名が確認されるステップと
を含むことを特徴とする請求項１３に記載のコンピュータ読み取り可能な記録媒体。
【請求項１５】
前記実行可能ファイルはヘッダーおよび１つまたは複数のセクションを含み、前記暗号化されたダイジェストは前記ファイルの前記ヘッダーのダイジェストであり、前記ファイルの前記ヘッダーは、前記ファイルのそれぞれのセクションにそれぞれ対応する１つまたは複数のセクションダイジェストを含み、前記プログラムコードは、前記ファイルの前記１つまたは複数のセクションのそれぞれについて、前記プロセッサに
前記ファイルの前記ヘッダー内に前記対応するセクションダイジェストを生成するために使用されるものと同じ方法を使用して前記ファイルの前記セクションの確認ダイジェストを計算するステップと、
前記ファイルの任意のセクションについて、前記確認ダイジェストが前記ファイルの前記ヘッダー内の前記対応するセクションダイジェストに一致しない場合は前記プロセッサ上での実行が防止される前記ファイルの前記ヘッダー内の前記対応するセクションダイジェストと前記確認ダイジェストとを比較するステップと
をさらに実行させることを特徴とする請求項１４に記載のコンピュータ読み取り可能な記録媒体。
【請求項１６】
前記マッピングステップは、前記ファイルの前記ヘッダーをロードするためのメモリの第１の部分をマッピングするステップと、前記プログラムコードが前記ヘッダーの確認ダイジェストを計算する前記ステップ、および前記ヘッダーの前記確認ダイジェストと前記ヘッダーの前記解読されたダイジェストとを比較する前記ステップを実行した後のみ、前記ファイルの前記１つまたは複数のセクションをロードするためのメモリの第２の部分をマッピングするステップとを含むことを特徴とする請求項１５に記載のコンピュータ読み取り可能な記録媒体。
【請求項１７】
前記プログラムコードは、さらに、前記署名を確認する前に前記プロセッサにメモリの前記マッピングされた一部分を読み取り専用として指定させることを特徴とする請求項１３に記載のコンピュータ読み取り可能な記録媒体。
【請求項１８】
前記ファイルの前記少なくとも一部にハッシュアルゴリズムを適用することによって、暗号化された前記ダイジェストが生成され、確認ダイジェストを計算する前記ステップは、暗号化された前記ダイジェストの生成に使用された前記同じハッシュアルゴリズムを使用して前記確認ダイジェストを生成するステップを含むことを特徴とする請求項１４に記載のコンピュータ読み取り可能な記録媒体。
【請求項１９】
前記ハッシュアルゴリズムはＳＨＡ−１アルゴリズムを含むことを特徴とする請求項１８に記載のコンピュータ読み取り可能な記録媒体。
【請求項２０】
前記実行可能ファイルを実行できるようにする前記ステップは、前記プロセッサに前記実行可能ファイルを含むメモリの前記マッピングされた一部分を実行可能として指定させ、前記メモリ内の前記実行可能ファイルのエントリポイントに分岐させることを含むことを特徴とする請求項１３に記載のコンピュータ読み取り可能な記録媒体。
【請求項２１】
前記プログラムコードは実行可能と指定されているメモリの任意のマッピングされた一部分が書き込み可能とも指定されることを防ぐことを特徴とする請求項２０に記載のコンピュータ読み取り可能な記録媒体。
【請求項２２】
前記プログラムコードは書き込み可能と指定されているメモリの任意のマッピングされた一部分が実行可能とも指定されることを防ぐことを特徴とする請求項２０に記載のコンピュータ読み取り可能な記録媒体。
【請求項２３】
前記プログラムコードは前記実行可能ファイルをロードするために前記プロセッサにメモリの仮想部分をメモリの実部分にマッピングさせることを特徴とする請求項１３に記載のコンピュータ読み取り可能な記録媒体。
【請求項２４】
前記プログラムコードは前記プロセッサの実モードで実行されることを特徴とする請求項１３に記載のコンピュータ読み取り可能な記録媒体。
【請求項２５】
メモリと、
様々な特権レベルをサポートするプロセッサであって、前記特権レベルのうちの第１のもので実行されるプログラムコードのみがメモリをマッピングし、マッピングされた前記メモリを読み取り専用、書き込み可能、および実行可能として指定することができるプロセッサと、
前記特権レベルのうちの前記第１のもので前記プロセッサ上で実行される制御コードであって、異なる特権レベルで実行される他のプログラムコードからの要求に応答して、実行可能ファイルをロードするためのメモリの一部分をマッピングし、前記実行可能ファイルがマッピングされた前記メモリにロードされた後、前記実行可能ファイルに関連付けられている署名を確認する制御コードを備え、
署名が確認されると、前記制御コードは、前記実行可能ファイルを前記特権レベルのうちの前記第１のもの以外の特権レベルで前記プロセッサによって実行できるようにし、そうでなければ、前記実行可能ファイルが前記プロセッサで実行されるのを防ぐ
ことを特徴とするコンピュータシステム。
【請求項２６】
前記制御コードは、第１の制御コードを定義し、前記コンピュータシステムは、前記特権レベルのうちの前記第１のもの以外の特権レベルで実行される第２の制御コードをさらに備え、前記第２の制御コードは、前記第１の制御コードが前記実行可能ファイルをロードするためのメモリの前記一部分をマッピングするよう要求し、前記実行可能ファイルを前記マッピングされたメモリにロードし、前記第１の制御コードに前記署名を確認するよう要求することを特徴とする請求項２５に記載のコンピュータシステム。
【請求項２７】
前記実行可能ファイルに関連付けられている前記署名は前記ファイルの少なくとも一部のダイジェストを含み、前記ダイジェストはプライベートキーを使用して暗号化され、前記制御コードは、
前記プライベートキーに対応するパブリックキーを使用して前記暗号化されたダイジェストを解読し、
暗号化された前記ダイジェストの生成に使用されるものと同じ方法を使用して生成される、前記ファイルの前記少なくとも一部の確認ダイジェストを計算し、
前記確認ダイジェストを前記解読されたダイジェストと比較し、前記確認ダイジェストおよび前記解読されたダイジェストが同じである場合、前記署名が確認される
ことによって前記署名を確認することを特徴とする請求項２５に記載のコンピュータシステム。
【請求項２８】
前記実行可能ファイルはヘッダーおよび１つまたは複数のセクションを含み、前記暗号化されたダイジェストは前記ファイルの前記ヘッダーのダイジェストであり、前記ファイルの前記ヘッダーは、前記ファイルの前記１つまたは複数のセクションのそれぞれのものにそれぞれ対応する１つまたは複数のセクションダイジェストを含み、前記制御コードは、前記ファイルの前記１つまたは複数のセクションのそれぞれについて、
前記ファイルの前記ヘッダー内に前記対応するセクションダイジェストを生成するために使用されるものと同じ方法を使用して前記ファイルの前記セクションの確認ダイジェストを計算し、
前記ファイルの任意のセクションについて、前記確認ダイジェストが前記ファイルの前記ヘッダー内の前記対応するセクションダイジェストに一致しない場合はプロセッサ上での実行が防止される前記ファイルの前記ヘッダー内の前記対応するセクションダイジェストと前記確認ダイジェストとを比較する
ことを特徴とする請求項２７に記載のコンピュータシステム。
【請求項２９】
前記制御コードは、前記ファイルの前記ヘッダーをロードするためのメモリの第１の部分をマッピングし、次いで、前記ヘッダーの確認ダイジェストを計算し、前記ヘッダーの前記確認ダイジェストと前記ヘッダーの前記解読されたダイジェストとを比較した後のみ、前記ファイルの前記１つまたは複数のセクションをロードするためのメモリの第２の部分をマッピングすることを特徴とする請求項２８に記載のコンピュータシステム。
【請求項３０】
前記制御コードは、前記署名の確認の前にメモリの前記マッピングされた一部分を読み取り専用として指定することを特徴とする請求項２５に記載のコンピュータシステム。
【請求項３１】
前記ファイルの前記少なくとも一部にハッシュアルゴリズムを適用することによって、暗号化された前記ダイジェストが生成され、前記制御コードは、暗号化された前記ダイジェストの生成に使用された前記同じハッシュアルゴリズムを使用して前記確認ダイジェストを計算することを特徴とする請求項２７に記載のコンピュータシステム。
【請求項３２】
前記ハッシュアルゴリズムはＳＨＡ−１アルゴリズムを含むことを特徴とする請求項３１に記載のコンピュータシステム。
【請求項３３】
前記制御コードは、前記実行可能ファイルを含むメモリの前記マッピングされた一部分を実行可能として指定し、前記メモリ内の前記実行可能ファイルのエントリポイントに分岐することによって前記実行可能ファイルを実行できるようにすることを特徴とする請求項２５に記載のコンピュータシステム。
【請求項３４】
前記制御コードは実行可能と指定されているメモリの任意のマッピングされた一部分が書き込み可能とも指定されることを防ぐことを特徴とする請求項３３に記載のコンピュータシステム。
【請求項３５】
前記制御コードは書き込み可能と指定されているメモリの任意のマッピングされた一部分が実行可能とも指定されることを防ぐことを特徴とする請求項３３に記載のコンピュータシステム。
【請求項３６】
前記制御コードは前記実行可能ファイルをロードするためにメモリの仮想ページをメモリの実ページにマッピングすることを特徴とする請求項２５に記載のコンピュータシステム。
【請求項３７】
前記制御コードは前記プロセッサの実モードで実行されることを特徴とする請求項２５に記載のコンピュータシステム。
【請求項３８】
前記制御コードはそれ自体のコードおよびデータを仮想メモリにマッピングしないことを特徴とする請求項３７に記載のコンピュータシステム。
【請求項３９】
前記制御コードは前記プロセッサ内にある安全なＲＯＭ内に格納され、前記制御コードは前記プロセッサ内にある安全なＲＡＭで実行されることを特徴とする請求項２５に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に、デジタルデータの使用を可能にする前のその妥当性検査に関し、より詳細には、プロセッサで実行されるプログラムコードが適切に署名されていること、および修正されていないことを確実にするシステムおよび方法に関する。
【背景技術】
【０００２】
パーソナルコンピュータは、プログラミングに尽力を注ぐことを厭わない人が、プログラミング言語、動作環境、およびプログラムが実行されるハードウェアの制約のみによって制限される、ほぼすべての所望の機能を実行することができるプログラムを書くことができるプラットフォームを提供する。パーソナルコンピュータの製造業者、およびオペレーティングシステムおよびプログラミングツールの提供者は、ユーザがそれらの製品の使用をどのように選択するかにほとんど制限を加えていない。しかし、コンピューティング装置をどのように使用するかを制限することが重要となる場合がある。最も広い意味では、コンピューティング装置とは、何らかの機能を実行するために、メモリに格納されているプログラムコードを実行するプロセッサを含む任意の装置とすることができる。したがって、コンピューティング装置は、専用の機能を有することができ、または一般のパーソナルコンピュータがそうであるように、機能において極めて一般的である場合もある。本明細書で使用する場合、「コード」、「プログラムコード」、「制御コード」という用語は、コンピューティング装置のプロセッサなどのマシンによって実行される１組の命令を指す。
【０００３】
いくつかの点でパーソナルコンピュータと似ており、しかしその主な機能をより専門とする一種のコンピューティング装置に、マルチメディアコンソールがある。マルチメディアコンソールは、しばしば他の機能を実行することはできるが、主な機能は、マシン命令またはプログラムコードを実行して、１人または複数のユーザが、ビデオ、音声、ゲームなど様々なタイプのマルチメディアを再生することができるようにすることである。マルチメディアコンソールを製造する企業は、それらのコンソール上で実行される任意のマルチメディアソフトウェアの様々な側面を制御することにかなり興味をもっている。例えば、こうした企業は、マルチメディアソフトウェアの質が確実にいくつかの仕様を満たすことを望む。マルチメディアコンソールの製造業者は一般に、他の企業にそのマルチメディアコンソールで使用可能なマルチメディアソフトウェアを製造するライセンスを供与しているため、ライセンスされていないソフトウェアがそのコンソールで使用されるのを防ぐことが望ましい。ライセンスされていないソフトウェアがマルチメディアコンソール上で再生された場合にもたらされることになる収益の損失だけではなく、マルチメディアコンソールで再生されるソフトウェアにわたる品質管理の維持の問題もある。また、マルチメディアコンソールで使用するようにライセンス供与されたソフトウェアの配布が承認され、それが公にリリースされた後で変更されていないことを確実にすることは重要である。こうした制御が適用されていないと、ライセンスの制限を逃れるため、またはマルチメディアコンソールの製造業者からライセンス供与を受けてソフトウェア会社による配布が最初に承認されたときに許可されたソフトウェアに含まれていない特徴または機能を追加するために、マルチメディアソフトウェアが「ハッキング」されるかもしれない。
【０００４】
ゲームコンソールと呼ばれるマルチメディアコンソールの１つのクラスでは、ゲームソフトウェアの格納に使用されるソフトウェアプラグインカートリッジを認証するのに、これまではハードウェア関連技術が使用されていた。例えば、いくつかのゲームコンソールでは、異なる形状のカートリッジがレセプタクルに挿入されるのを防ぐために、承認されたソフトウェアゲームカートリッジのハウジングおよび対応するゲームコンソール内のレセプタクルが形成されている。さらに、一部のゲームカートリッジは、プロセッサ、およびカートリッジの認証に必要な特定のデータを格納する読み取り専用メモリ（ＲＯＭ）を含む。ゲームコンソール内のプロセッサおよびカートリッジ内のプロセッサによって実行される計算の結果が一致しない場合、ゲームコンソールは、カートリッジに格納されているゲームのソフトウェアがゲームコンソール上で実行できないようにする。
【０００５】
グラフィックが多く、現世代のマルチメディアコンソールで稼働するように設計されたゲームおよびマルチメディアコンテンツが複雑であるため、マルチメディアソフトウェアは、ＣＤ（compact disc）−ＲＯＭ（read-only memory）またはデジタル多用途ディスク（ＤＶＤ）などの光記憶媒体でより効率よく配布される。したがって、マルチメディアソフトウェアが存在する媒体の物理的な形状に依存しない別の手法を使用する必要がある。他のマルチメディアコンソールの製造業者がこの問題に対してどのような処理を選択したかを詳しく知ることは簡単ではない。明らかに、これらの媒体で配布されるソフトウェアが適切に署名されており、修正または変更されていないかどうかを判定するためのソフトウェアおよび方法が望まれる。
【０００６】
様々なコンピューティング装置で使用される多くのプロセッサは、プログラムコードの許可されていない実行に対するセキュリティの形として、コンピュータシステム内の異なる実行可能プログラムコードに様々なレベルの「特権」の割り当てることへのサポートを提供する。プログラムコードは、高レベルプログラミング言語、アセンブリ言語、またはマシン言語で書かれるソースコードを含むことができ、コードは、コンパイル済み形式で、またはインタープリタを介して実行することができる。様々な特権レベルをサポートするプロセッサでは、あるプログラムコードは、プロセッサ上で他のコードより高い特権レベルで実行することができる。一般に、「より高い」特権レベルで実行するプログラムコードは、プロセッサの命令セットのいくつかの部分、およびコンピューティング装置の他のハードウェアリソースへのアクセス権がより高い。
【０００７】
特権レベルは、「リング」と呼ばれることもあり、コンピューティング装置内のハードウェアおよびソフトウェアの論理分割として考えることができる。特権レベル（またはリング）は一般に、実行しているプログラムコードがそのプログラムコードの代わりにプロセッサによって実行することができるプロセッサの全命令セット内の命令の範囲にもアクセスすることができるメモリの全範囲を判定する。あるプログラムコードがその特権レベル以外でメモリ範囲またはプロセッサ命令にアクセスしようとすることによって、一般にプロセッサの障害がもたらされる。より高い特権レベル（またはリング）が与えられているプログラムコードは、一般により低い特権レベル（またはリング）が与えられている他のプログラムコードのものを含む特権を有する。プロセッサの中には、２つの特権レベルしかサポートしていないものも、３つ、４つ、またはそれ以上の特権レベルをサポートしているものもある。
【０００８】
例えば、Ｉｎｔｅｌ社によって製造されたｘ８６シリーズのプロセッサのアーキテクチャは、最も高い特権レベル「リング０」から最も低い特権レベル「リング３」の範囲に及ぶ４つの特権レベルを提供する。特定の特権レベルに割り当てられたプログラムコードは、同じかそれより低い特権レベルに割り当てられたデータおよび他のプログラムにしかアクセスできない。したがって、「リング２」に割り当てられたプログラムコードは、リング２に割り当てられた他のプログラムコード、およびリング３に割り当てられたプログラムコードを呼び出す（invoke、即ちcall）ことができ、しかし、リング１またはリング０のプログラムコードを直接呼び出すことはできない。別の例として、ＩＢＭ社、Ｍｏｔｏｒｏｌａ社、Ａｐｐｌｅ  Ｃｏｍｐｕｔｅｒ社によって共同開発されたＰｏｗｅｒＰＣ（登録商標）マイクロプロセッサアーキテクチャは、ハイパーバイザーモード（最高レベル）、スーパーバイザーモード、およびユーザモード（最低レベル）と呼ばれる３つの特権レベルをサポートする。
【０００９】
一般に、プロセッサがあるプログラムコードを実行する現在の特権レベルは、プロセッサ内のハードウェアレジスタの適切なビットまたはビットの組み合わせを設定することによって設定される。各レベルで提供される特権の詳細は実装に依存し、本発明の理解のために絶対に必要なものではない。
【００１０】
特権レベルの概念は、ほとんどの場合、アプリケーションプログラムによるコンピューティングリソースへのフルアクセスを防ぐために使用される。一般に、オペレーティングシステムの開発者は、最高特権レベルを、オペレーティングシステムカーネルなど、オペレーティングシステムのいくつかのキー部分に割り当て、しかし、他のオペレーティングシステムサービスおよびアプリケーションプログラムをより低い特権レベルに落とす。アプリケーションプログラムからは直接使用できないリソースを使用するサービスを取得するために、アプリケーションプログラムは、オペレーティングシステムインタフェースを介してオペレーティングシステムルーチンを呼び出す必要がある。次いでこれらのオペレーティングシステムルーチンは、必要なリソースにアクセスし、アプリケーションプログラムによって要求されたタスクを実行し、次いでプロセッサの特権レベルをより低いレベルに下げると同時にアプリケーションプログラムに制御を戻すために、プロセッサの現在の特権レベルをより高い特権レベルに上げることができる。特権レベルは、アプリケーションプログラムの代わりにいくつかの特権的な命令をプロセッサが実行するのを防ぐために使用することもできる。例えば、プロセッサ内のいくつかのレジスタの内容を変更する命令に特権を与え、その命令を、最高特権レベルで稼動するオペレーティングシステムルーチンの代わりにのみプロセッサによって実行することができる。一般に、制限された命令は、メモリ管理ユニット、および特殊なオペレーティングシステムデータ構造のレジスタなど、制御レジスタの内容を操作する命令を含む。
【００１１】
コンピューティング装置におけるデジタルデータまたはプログラムコードの許可されていない使用に対するセキュリティを提供するために多くのプロセッサが使用する別の機構は、コンピューティング装置のメモリの様々な位置に様々なアクセス許可を付与する能力である。アクセス許可は、時として、実メモリまたは仮想メモリでのメモリ「ページ」の割り振りをサポートするシステムにおけるメモリの「ページ」など、メモリ位置の範囲に提供されることもある。例えば、実メモリまたは仮想メモリを、４キロバイトなど、固定サイズのページに分割することができる。
【００１２】
多くのプロセッサは、ＲＥＡＤ許可、ＷＲＩＴＥ許可、およびＥＸＥＣＵＴＥ許可など、メモリの所与の位置または所与のページに適用することができるいくつかのタイプのメモリアクセス許可をサポートする。これらの許可の様々な組み合わせをメモリの所与の位置またはページに適用して、所望のレベルの保護を実施することができる。例えば、ＲＥＡＤ許可のみが割り当てられたメモリのページは、読み取り専用であり、ＲＥＡＤ許可およびＷＲＩＴＥ許可が割り当てられたメモリのページは、ページへの読み取りおよび書き込みのアクセス（すなわち「読み取り／書き込み」アクセス）を許可する。ＷＲＩＴＥ許可が割り当てられたメモリのページまたは部分は、「書き込み可能」と呼ばれる。ＥＸＥＣＵＴＥ許可（ＲＥＡＤ許可およびＷＲＩＴＥ許可に結合することができる）を有するメモリページは、実行されるメモリページに格納された任意のプログラムコードを実行可能にするために使用することができる。つまり、こうしたメモリページに格納されているプログラムコードは、プロセッサによる実行の許可を得ている。このメモリページは「実行可能」と呼ばれる。一般に、オペレーティングシステムまたはアプリケーションプログラムに割り振られている任意のメモリ位置に割り当てられた様々なアクセス許可を示すテーブルがプロセッサによって維持される。
【００１３】
特権レベルおよびメモリアクセス許可の概念は、コンピューティング装置内のデータおよびプログラムコードにいくつかの制限を加えるのに有用であるが、こうした概念のいずれも、適切に署名されたコードのみがプロセッサによって実行されること、およびこうしたプログラムコードが修正または変更されていないことを確実にするには十分ではない。
【００１４】
いくつかの文献に上述のような従来の技術に関連した技術内容が開示されている（例えば、特許文献１、２参照）。
【００１５】
【特許文献１】米国特許第６、７４５、３０７号明細書
【特許文献２】米国特許出願公開第２００５／００１６８４６号明細書
【発明の開示】
【発明が解決しようとする課題】
【００１６】
適切に署名されたプログラムコードのみがプロセッサ上で実行されること、およびこうしたプログラムコードが修正または変更されていないことを確実にするためのシステムおよび方法が望まれ続けている。この必要性に取り組むことが要望されている。
【００１７】
本発明は、このような状況に鑑みてなされたもので、その目的とするところは、プロセッサで実行されるプログラムコードが適切に署名されていること、および修正されていないことを確実にするプログラムコードの安全な実行のためのシステムおよび方法を提供することにある。
【課題を解決するための手段】
【００１８】
本発明は、（実行可能ファイルの形の）適切に署名されたプログラムコードのみがコンピューティング装置で実行されること、およびこうしたプログラムコードが実行前に修正または変更されていないことを確実にするためのシステムおよび方法を対象としている。本発明は、あるプロセッサにおける様々な特権レベルへのサポート、特に、メモリをマッピングし、マッピングされたメモリにアクセス許可を割り当てるプログラムコードの機能を特定の特権レベルに限定することへのサポートを利用する。本発明によれば、第１の制御コードのみがメモリの一部分をマッピングし、メモリのマッピングされた一部分を読み取り専用、書き込み可能、または実行可能として指定する（すなわちマッピングされたメモリにアクセス許可を割り当てる、または設定する）ことができる特権レベルでプロセッサ上で実行される第１の制御コードが提供される。第１の制御コードは、異なる特権レベル（メモリのマッピングまたはアクセス許可の割当を可能にしないもの）で実行される他のコードから、実行可能ファイルをロードするためのメモリの一部分をマッピングする旨の要求を受信する。一実施形態では、こうした要求は、メモリのマッピングまたはアクセス許可の割当を可能にしないより低い特権レベルで稼働する第２の制御コードから受信される。こうした要求に応答して、第１の制御コードは、他のコード（例えば第２の制御コード）の代わりに、実行可能ファイルをロードするためのメモリの一部分をマッピングする。次いで他のコードは、マッピングされたメモリに実行可能ファイルをロードするよう働く。実行可能ファイルがロードされると、次いで第１の制御コードは、実行可能ファイルに関連付けられている署名を確認する。本発明の一実施形態では、第１の制御コードは、例えば実行可能ファイルがメモリのマッピングされた一部分にロードされた後、メモリのマッピングされた一部分にＲＥＡＤ許可を設定することによって、メモリのマッピングされた一部分を読み取り専用として指定することができる。これによって、第１の制御コードが署名を確認する前に他のプログラムコードが実行可能ファイルを修正しようとするのを防ぐ。署名が確認される（ファイルの保全性も確認される）と、第１の制御コードは、実行可能ファイルを、第１の制御コードが実行されるレベルより低い特権レベルでプロセッサによって実行できるようにする。このように、第１の制御コードは、実行可能ファイル内の任意のプログラムコードを実行できるようにする前に、実行可能ファイルが適切に署名されていることを確実にし、実行可能ファイルの保全性を確認する。
【００１９】
本発明の他の特徴および利点は、以下から明らかになる。
【００２０】
上記の概要、および以下の本発明の詳細な説明は、添付の図面と併せ読めばよりよく理解できる。本発明の説明上、図面には本発明の構成例を示しているが、本発明は、開示した特定の方法および手段に限定されない。
【発明の効果】
【００２１】
本発明によれば、プロセッサで実行されるプログラムコードが適切に署名されていること、および修正されていないことを確実にすることができる。
【発明を実施するための最良の形態】
【００２２】
以下、図面を参照して本発明を適用できる実施形態を詳細に説明する。
【００２３】
本発明の一実施形態は、下記で、ポータブルの取外式コンピュータ可読媒体で配布されるマルチメディアソフトウェアを実行するように設計されたマルチメディアコンソールでの使用に関して説明する。本発明は、それだけには限定されないが一例として、衛星放送受信機、セットトップボックス、アーケードゲーム、パーソナルコンピュータ（ＰＣ）、ポータブル電話、ＰＤＡ（Personal Digital Assistant）、および他のハンドヘルド装置を含めて、適切に署名されたソフトウェアのみが装置上で実行されること、およびこうしたソフトウェアが使用前に修正されていないことを確実にすることが望まれる他の任意のコンピューティング装置でも実施できることを理解されよう。
【００２４】
コンピューティング環境例
図１は、本発明の様々な態様を実施できるマルチメディアコンソール１００の機能構成要素を示している。マルチメディアコンソール１００は、レベル１キャッシュ１０２、レベル２キャッシュ１０４、ＲＯＭ（読み取り専用メモリ）１０６、およびＲＡＭ（ランダムアクセスメモリ）１０９を有する中央処理装置（ＣＰＵ）（単に「プロセッサ」と呼ばれることもある）１０１を有する。キャッシュ１０２、１０４は、データを一時的に格納し、したがってメモリアクセスの数を低減させ、それによって処理速度およびスループットを向上させる。複数のコアを有し、したがって追加のレベル１およびレベル２のキャッシュ１０２および１０４を有するＣＰＵ１０１を提供することができる。ＲＯＭ１０６は、マルチメディアコンソール１００の電源がオンになるとブートプロセスの初期段階中にロードされる実行可能コードを格納することができ、ＲＡＭ１０９は、ＲＯＭ１０６内の実行可能コードの実行中に使用することができる。ＲＯＭ１０６およびＲＡＭ１０９は、プロセッサの外部の手段によって改変されたり変更されたりするおそれがないことが好ましい。つまり、ＲＯＭ１０６およびＲＡＭ１０９は、プロセッサの外部のハードウェアによってアクセスすることができない。プロセッサの外部ピン上の信号によって、ＲＯＭ１０６が読み取られる、またはＲＡＭ１０９が書き込まれたり、読み取られたりすることはない（すなわちプロセッサ１０１の内部の回路のみがＲＯＭ１０６およびＲＡＭ１０９に対する読み取りおよび／書き込みを行うことができる）。
【００２５】
プロセッサ１０１は、仮想メモリのサポートおよび管理を含めて、コンソール１００内のメモリのマッピングを管理し、サポートするメモリ管理ユニット（ＭＭＵ）１０７をさらに含み得る。
【００２６】
本実装形態では、プロセッサ１０１は、様々な特権レベル（「リング」と呼ばれることもある）のプログラムコードの実行をサポートする。本実施形態では、特権レベルの中の第１のもの、すなわち「最高の」もので実行されるプログラムコードのみが、メモリをマッピングし（すなわち仮想メモリのページを実メモリのページにマッピングする）、マッピングされたメモリにアクセス許可を割り当てる（すなわちマッピングされたメモリを読み取り専用または書き込み可能として、および実行可能かどうかとして指定する）ことができる。一実施形態では、プロセッサ１０１は、ＩＢＭ社から入手可能なＰｏｗｅｒＰＣ（登録商標）６４アーキテクチャを実装するが、これは本発明を実施するのに適したプロセッサアーキテクチャの一例にすぎず、本発明は決して任意の特定のプロセッサアーキテクチャに限定されないことを理解されたい。
【００２７】
一実施形態では、プロセッサは、ＲＥＡＤ許可、ＷＲＩＴＥ許可、ＥＸＥＣＵＴＥ許可など、様々な組み合わせのアクセス許可を、ページなどのメモリの一部に適用して、所望のレベルの保護を実施することができる。例えば、メモリのあるページを読み取り専用に指定するために、そのページにＲＥＡＤ許可のみを割り当てることができる。メモリのあるページへの読み取りおよび書き込みのアクセス（すなわち「読み取り／書き込み」アクセス）を可能にするために、そのページにＲＥＡＤ許可およびＷＲＩＴＥ許可を割り当てることもできる。ＷＲＩＴＥ許可が割り当てられたメモリのページは、「書き込み可能」として指定されると言われる。他の許可との組み合わせで、メモリページに格納された任意のプログラムコードを実行可能にするために、ＥＸＥＣＵＴＥ許可をメモリページに設定することもできる。つまり、こうしたメモリページに格納されているプログラムコードは、プロセッサによる実行の許可を得ている。このメモリページは「実行可能」として指定されると言われる。ＥＸＥＣＵＴＥ許可が設定されていない場合、プロセッサは、命令をそのページから実行することはできない。メモリの所与のページに割り当てられた様々な組み合わせのアクセス許可を示すテーブルがプロセッサによって維持される。異なるプロセッサはこうした様々な形のアクセス許可を異なるように実施することができることを理解されよう。例えば、別のプロセッサは、メモリのあるページを読み取り専用として指定するために「ＲＥＡＤ−ＯＮＬＹ」許可を実装し、ページを読み取り／書き込みアクセスを許可するものとして指定するために「ＲＥＡＤ／ＷＲＩＴＥ」許可を実装することができる。こうしたプロセッサでは、メモリのあるページを実行可能かどうかとして指定する機能は、代わりにＮＯ  ＥＸＥＣＵＴＥ許可によって実装することができる。この許可は、設定した場合は命令がそのページから実行されるのを防ぎ、設定していない場合は実行を許可する。本発明は所与のプロセッサにおけるこうした様々な形のアクセス許可の任意の特定の実装に決して限定されないことを理解されたい。
【００２８】
一実施形態では、プロセッサ１０１は、「ハイパーバイザー」モード、「スーパーバイザー」モード、および「ユーザ」モードとして指定される異なる３つの特権レベルをサポートする。これらの用語は、単に参照の目的で使用しているのであり、特権レベルを、単に同じく「特権レベル０」、「特権レベル１」、および「特権レベル２」、または別の例として「リング０」、「リング１」、「リング２」と呼ぶことができることを理解されたい。本実施形態では、ハイパーバイザーモードは最高特権レベル（最も特権的）であり、ユーザモードは最低特権レベルである。ハイパーバイザーモードで稼働する１つのプログラムコードは、メモリをマッピングし、マッピングされたメモリにアクセス許可を設定するために、リソースにアクセスすることができる。スーパーバイザーモードで実行されるプログラムコードは、コンソール１００のハードウェアの特徴のほとんどにアクセスすることはできるが、メモリをマッピングしたり、マッピングされたメモリにアクセス許可を設定したりする機能は有していない。ユーザモードで実行されるプログラムコードは、ハードウェアおよびいくつかのシステムのサービスへのアクセスを制限し、または限定している可能性がある。他の実施形態では、プロセッサ１０１は、異なる数のより少ないまたはより大きい特権レベルを有し得る。
【００２９】
画像処理ユニット（ＧＰＵ）１０８およびビデオエンコーダ／ビデオコーデック（コーダ／デコーダ）１１４は、高速、高解像度の画像処理のビデオ処理パイプラインを形成する。データは、バスを介して画像処理ユニット１０８からビデオエンコーダ／ビデオコーデック１１４に運ばれる。ビデオ処理パイプラインは、データをＡ／Ｖ（音声／ビデオ）ポート１４０に出力して、テレビまたは他のディスプレイに伝送する。メモリコントローラ１１０は、ＧＰＵ１０８に接続されて、それだけには限定されないがＲＡＭ（ランダムアクセスメモリ）１１２など、プロセッサの外部の様々なタイプのメモリへのプロセッサアクセスを容易にする。
【００３０】
マルチメディアコンソール１００は、Ｉ／Ｏコントローラ１２０、システム管理コンソーラ１２２、音声処理ユニット１２３、ネットワークインタフェースコントローラ１２４、第１ＵＳＢホストコントローラ１２６、第２ＵＳＢコントローラ１２８、およびフロントパネルＩ／Ｏサブアセンブリ１３０を含み、これらはモジュール１１８に実装されることが好ましい。ＵＳＢコントローラ１２６および１２８は、周辺コントローラ１４２（１）〜１４２（２）、無線アダプタ１４８、および外部メモリ装置１４６（フラッシュメモリ、外部ＣＤ／ＤＶＤ  ＲＯＭドライブ、取外式媒体など）のホストとして働く。ネットワークインタフェース１２４および／または無線アダプタ１４８は、ネットワーク（インターネット、ホームネットワークなど）へのアクセスを提供し、Ｅｔｈｅｒｎｅｔ（登録商標）カード、モデム、Ｂｌｕｅｔｏｏｔｈ（商標）モジュール、ケーブルモデムなどを含めて、多種多様な有線または無線のインタフェース構成要素のうちの任意のものでよい。
【００３１】
不揮発性メモリ１４３は、ブートプロセス中にロードできるアプリケーションデータを格納するために提供される。媒体ドライブ１４４が提供されており、媒体ドライブ１４４は、ＤＶＤ／ＣＤドライブ、ハードドライブ、またはそれだけには限定されないが、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光媒体、メモリカード、メモリスティック、磁気カセット、磁気テープ、磁気ディスク、または他の磁気媒体など、何らかの形の取外式またはポータブルの媒体を受ける他のドライブを含み得る。媒体ドライブ１４４は、マルチメディアコンソール１００の内部にあっても外部にあってもよい。実行可能ファイル（すなわち実行可能プログラムコードを含むファイル）を含むアプリケーションデータは、媒体ドライブ１４４を介してアクセスされて、マルチメディアコンソール１００によって例えば実行、再生などが行われる。媒体ドライブ１４４は、シリアルＡＴＡ（advanced technology attachment）バス、他の高速接続（ＩＥＥＥ（Institute of Electrical and Electronics Engineers）１３９４など）などのバスを介してＩ／Ｏコントローラ１２０に接続される。
【００３２】
システム管理コントローラ１２２は、マルチメディアコンソール１００の可用性の保証に関連する様々なサービス機能を提供する。音声処理ユニット１２３および音声コーデック１３６は、忠実度が高く、ステレオ処理を備える、対応する音声処理パイプラインを形成する。音声データは、音声処理ユニット１２３と音声コーデック１２６との間で通信リンクを介して運ばれる。音声処理パイプラインは、データをＡ／Ｖポート１４０に出力して、外部音声プレイヤまたは音声機能を有する装置によって再生できるようにする。
【００３３】
フロントパネルＩ／Ｏサブアセンブリ１３０は、電源ボタン１５０および取り出しボタン１５２、およびマルチメディアコンソール１００の外面に露出している任意のＬＥＤ（発光ダイオード）または他のインジケータの機能をサポートする。システム電源モジュール１３６は、マルチメディアコンソール１００の構成要素に電力を提供する。ファン１３８は、マルチメディアコンソール１００内の回路を冷却する。
【００３４】
ＣＰＵ１０１、ＧＰＵ１０８、メモリコントローラ１１０、およびマルチメディアコンソール１００内の他の様々な構成要素は、シリアルバスおよびパラレルバス、メモリバス、周辺バス、および様々なバス構造の任意のものを使用するプロセッサまたはローカルバスを含めて、１つまたは複数のバスを介して相互接続される。
【００３５】
マルチメディアコンソール１００の電源がオンになると、プログラムコードおよびデータは、不揮発性メモリ１４３からメモリ１１２および／またはキャッシュ１０２、１０４にロードされ、プロセッサ１０１上で実行され得る。アプリケーションプログラムコードは、マルチメディアコンソール１００で使用可能な様々な媒体タイプにナビゲートするとき、安定したユーザ体験を提供するグラフィックユーザインタフェースを表す。操作中、アプリケーションおよび／または媒体ドライブ１４４内に含まれる他の媒体は、媒体ドライブ１４４から起動され、または再生されて、マルチメディアコンソール１００に追加の機能を提供することができる。
【００３６】
マルチメディアコンソール１００は、単にシステムをテレビまたは他のディスプレイに接続することによって、スタンドアロンシステムとして操作することができる。このスタンドアロンモードでは、マルチメディアコンソール１００によって、１人または複数のユーザは、システムと対話する、映画を見る、または音楽を聴くことができる。しかし、ブロードバンド接続の統合をネットワークインタフェース１２４または無線アダプタ１４８を介して使用できるようにすると、マルチメディアコンソール１００を、より大きいネットワークコミュニティに参加するものとしてさらに操作することができる。
【００３７】
本発明のシステムおよび方法
本発明は、プロセッサ１０１における様々な特権レベルへのサポート、特に、適切に署名された実行可能ファイルのみをプロセッサ上で実行することができること、および実行前にこうした実行可能ファイルが改変されたり、修正されたりしないことを確実にするための機構を提供するために、メモリの仮想ページをメモリの実ページにマッピングし、マッピングされたメモリにアクセス許可を割り当てるプログラムコードの機能を特定の特権レベルに限定することへのサポートを利用する。本発明によれば、第１の制御コードのみがメモリの一部分をマッピングし、メモリのマッピングされた一部分を読み取り専用、書き込み可能、または実行可能として指定する（すなわちマッピングされたメモリにアクセス許可を設定する）ことができる特権レベルでプロセッサ上で実行される第１の制御コードが提供される。第１の制御コードは、異なる特権レベル（メモリのマッピングまたはアクセス許可の割当を許可しないもの）で実行される他のコードから、実行可能ファイルをロードするためのメモリの一部分をマッピングする旨の要求を受け取る。一実施形態では、こうした要求は、メモリのマッピングまたはアクセス許可の割当を可能にしないより低い特権レベルで稼働する第２の制御コードから受信される。こうした要求に応答して、第１の制御コードは、他のコード（例えば第２の制御コード）の代わりに、実行可能ファイルをロードするためのメモリの一部分をマッピングする（すなわち仮想メモリの一部分を実メモリの一部分にマッピングする）。次いで他のコードは、マッピングされたメモリに実行可能ファイルをロードするよう働く。一実施形態では、実行可能ファイルがロードされると、第１の制御コードは、例えば任意のＷＲＩＴＥ許可を削除し、（まだ適用されていない場合は）ＲＥＡＤ許可をメモリのマッピングされた一部分に設定することによって、メモリのマッピングされた一部分を読み取り専用として指定することができる。これによってその時点で他のプログラムコードが実行可能ファイルを修正しようとするのを防ぐ。第１の制御コードは、次いで実行可能ファイルに関連付けられている署名を確認する。署名が確認される（以下で詳述するようにファイルの保全性も確認される）と、第１の制御コードは、実行可能ファイルを、第１の制御コードが実行されるレベルより低い特権レベルでプロセッサによって実行できるようにする。このように、第１の制御コードは、実行可能ファイル内の任意のプログラムコードを実行できるようにする前に、実行可能ファイルが適切に署名されていることを確実にし、実行可能ファイルの保全性を確認する。
【００３８】
図２は、本発明の一実施形態に従ってコンソール１００などのコンピューティング装置例のメモリ空間２００内で実行されている第１の制御コード２０２および第２の制御コード２０４を示すブロック図である。第１の制御コード２０２、および第２の制御コード２０４は、上記の本発明の機能を実行する。そのために、第１の制御コード２０２は、第２の制御コード２０４が第１の制御コード２０２のサービスを呼び出す（call、即ちinvoke）ように、いくつかのアプリケーションプログラミングインタフェース（ＡＰＩ）を第２の制御コード２０４に公開する。
【００３９】
本実施形態では、第１の制御コード２０２は、プロセッサ１０１の実際のアドレッシングモードで稼働し、上述したように、メモリの仮想ページをメモリの実ページにマッピングし、メモリのマッピングされたページにアクセス特権を割り当てるのに必要なすべてのリソースへのアクセスを提供する特権レベルで実行される。例えば、図１のシステム例では、第１の制御コード２０２は、最高（最も特権的な）レベルであるプロセッサ１０１のハイパーバイザーリアル（実）モードで実行される。他の実施形態では、この特権レベルは、例えば「特権レベル０」または「リング０」と呼ぶことができる。その特権レベルによって、第１の制御コード２０２は、システム１００のメモリへのすべてに読み取り、書き込み、および実行アクセスすることができる。
【００４０】
本実装形態では、第１の制御コード２０２は、仮想メモリのページをメモリの実ページ（すなわち物理的なメモリ）にマッピングすることができ、この点で、仮想メモリマネージャとして働く。第１の制御コード２０２は、プロセッサのハイパーバイザーモードで稼働するため、プロセッサ１０１内の任意の仮想メモリページテーブルを排他的に制御する。従って、これは、システム１００において、実メモリ範囲に仮想メモリ範囲をマッピングする、または実メモリ範囲から仮想メモリ範囲プログラムコードをアンマッピングすることができる唯一のプログラムコードであり、マッピングされた仮想メモリページのアクセス許可（ＲＥＡＤ、ＷＲＩＴＥ、ＥＸＥＣＵＴＥなど）を変更することができる唯一のプログラムコードである。本実施形態では、単一のページテーブルエントリは、ページの仮想アドレスを実アドレスに変換する。ページテーブルエントリは、ページのアクセス許可を格納する。
【００４１】
さらに本実施形態によれば、第２の制御コード２０４は、第１の制御コード２０２によって実メモリにマッピングされた仮想アドレス空間にロードされ、そこから実行される。第２の制御コードは、他のシステムサービスを、例えばアプリケーションプログラムなど、システム上で稼働している他のプログラムコードに提供する。一実施形態では、第２の制御コード２０４は、割り込みハンドラ、オペレーティングシステムカーネル、装置ドライバ、ファイルシステム、ネットワークスタックなど、通常コンピューティング装置のオペレーティングシステムに関連付けられている様々なプログラムコードモジュールを含み得る。図２に示すように、第２の制御コード２０４は、第１の制御コード２０２の特権レベルより低い特権レベル（例えば「特権レベル１」または「スーパーバイザー仮想モード」など）で実行される。したがって第２の制御コード２０４は、仮想メモリのページを実メモリにマッピングする機能、またはアクセス許可をメモリのマッピングされたページに割り当てる機能を有していない。また、第２の制御コード２０４は、第１の制御コード２０２のプログラムコードまたはデータにアクセスできず、第１の制御コード２０２によって提供されるＡＰＩを介して第１の制御コード２０２のサービスを要求することができるだけであることが好ましい。
【００４２】
第２の制御コード２０４に加えて、以下で詳述するように、本実施形態では、適切に署名された実行可能ファイル２０６も仮想メモリに存在し、プロセッサ１０１のスーパーバイザーモード（「特権レベル１」）で実行され得る。あるいは、適切に署名された実行可能ファイルは、「ユーザモード」（「特権レベル２」）など、プロセッサのより低い特権レベルでさえ実行することができる。
【００４３】
本実施形態では、第１の制御コード２０２は、スーパーバイザーモードでロードされたコードおよびデータを有効に「サンドボックス」することは理解されよう。スーパーバイザーモードで実行しているプログラムコードは、ハイパーバイザーモードで存在する第１の制御コードまたはデータにアクセスすることができないことが好ましい。さらに、本発明の別の特徴によれば、第１の制御コード２０２は、実行可能として指定された任意の仮想メモリページが書き込み可能としても指定されるのを防ぎ、第１の制御コード２０２は、書き込み可能として指定された任意の仮想メモリページが実行可能としても指定されるのを防ぐ。つまり、第１のプログラムコード２０２によって、仮想メモリのあるページは、同時に書き込み可能および実行可能となることはできない。ページは、書き込み可能である場合は実行可能ではなく、実行可能である場合は書き込み可能ではない。さらに、第１の制御コード２０２のみ（スーパーバイザーモード以下の特権レベルで稼働している任意のプログラムコードではない）は、仮想メモリページのアクセス許可を変更することができる。
【００４４】
上述したように、本発明によれば、システムにロードされ、そこで実行される実行可能ファイルは、第１のプログラムコード２０２が確認するよう働く、実行可能ファイルに関連付けられている何らかの形式のデジタル署名を有することが好ましい。以下で詳述するように、こうしたファイルは、実行可能ファイル内のプログラムコードおよびデータの保全性の確認に使用できるファイルの内容の１つまたは複数のダイジェストも含む。一実施形態では、実行可能ファイルは、図４に示したフォーマットを有している。示したフォーマットによれば、実行可能ファイル４００は、ヘッダー４０４、および実行可能ファイルのプログラムコードおよび／またはデータを含む複数のセクション４０２を有する。ヘッダーは、所与のセクションが読み取り専用または読み取り／書き込みとして指定されているか、そのセクションが実行可能コードを含んでいるかを識別する情報を含む。システム１００の媒体ドライブ１４４に挿入することができるポータブル媒体での実行可能ファイルの配布の前に、各セクションのダイジェストが例えばハッシュアルゴリズムを使用して計算される。セクションダイジェスト４０６のそれぞれは、次いでファイルのヘッダーに格納される。次いでヘッダー４０４のダイジェスト（セクションダイジェストおよび他のヘッダー情報を含む）が計算され、ヘッダーダイジェストが暗号化される。次いで暗号化されたダイジェスト４０８もファイルに格納される。この実施形態では、ヘッダーダイジェスト４０８の暗号化に使用されるプライベートキーは、パブリックキー暗号化アルゴリズムによって生成されたプライベート／パブリックキーの対の一部である。したがって、暗号化されたヘッダーダイジェストは、実行可能ファイル４００に関連付けられているデジタル署名の形を表す。図１のマルチメディアコンソール例１００の場合、実行可能ファイル４００は、音声、ビデオ、またはゲームソフトウェアを含めてマルチメディアソフトウェアを含み得る。
【００４５】
図３は、ポータブル媒体で配布する前に、図４に示したフォーマットによる実行可能ファイルのプログラムコードおよびデータを安全にするために使用される方法を示すフローダイアグラムである。図示したように、ステップ３０４で、実行可能ファイルのセクションが識別され、ダイジェストがセクションごとに計算される。各ダイジェストは、セクションダイジェストと呼ばれる。セクションダイジェストが、国立標準技術研究所（ＮＩＳＴ）によって定義されたようなセキュアハッシュアルゴリズム（ＳＨＡ１）のバージョン１などのアルゴリズムで計算されることが好ましい。ＳＨＡ１に関するさらなる詳細情報は、http://www.itl.nist.gov/fipspubs/fipl80-1.htmで入手可能である。しかし、セクションダイジェストの計算に他のアルゴリズムを使用することもでき、本発明は、決して任意の特定のアルゴリズムに限定されないことを理解されたい。
【００４６】
ステップ３０６で、各セクションダイジェスト、およびファイルのヘッダーに含まれることが望ましい他の任意の情報を含むファイルのヘッダーが作成される。次いで、ステップ３０８で、ヘッダー全体のダイジェストが生成されて、ヘッダーダイジェストが生成される。ステップ３１０で、ヘッダーダイジェストは、プライベートキーで暗号化される。プライベートキーは、デジタルデータを安全にし、認証するためのデジタル署名アルゴリズムの一部であり、したがって対応するパブリックキーを使用して、データの認証性を確認し、データを解読することができる。デジタル署名アルゴリズムに関する追加の情報は、http://csrc.nist.gov/publications/fips/fipsl86 2/fips186 2.pdfで見ることができる。任意の適したデジタル署名アルゴリズムを使用することができる。
【００４７】
ヘッダーダイジェストが暗号化されると、ステップ３１２でファイルに挿入される。ステップ３１４で、次いで実行可能ファイルを配布のためにポータブル媒体または他の記憶装置に格納することができる。例えば、適切なマルチメディアコンソールを有するエンドユーザへの配布のために実行可能ファイルをＣＤ−ＲＯＭまたはＤＶＤに格納することができる。
【００４８】
図５、６、７、および８は、本発明による、上記の本発明のシステムの動作、および実行可能ファイルが適切に署名されたこと、および改変されていないことを確実にする方法の一実施形態を示すフローダイアグラムである。この方法は、図４に示した実行可能ファイルフォーマットの状況、および図１および図２に示したシステムの状況で図５から図８に示され、記載されている。しかし、本発明の方法は、示した実施形態に限定されないことを理解されたい。
【００４９】
図５を参照すると、本実施形態では、マルチメディアコンソール１００が正常にブートした（ステップ５００）後、第２の制御コード２０４は、コンソールのメモリ１１２にロードし、実行すべき実行可能ファイルを見つけ出す（ステップ５０２）。実行可能ファイルは、例えば、媒体ドライブ１４４に挿入されたポータブル媒体に存在し得る。次に、ステップ５０４で、第２の制御コード２０４は、（そのＡＰＩを介して）第１の制御コード２０２を呼び出して、実行可能ファイルのヘッダーおよび暗号化されたヘッダーダイジェストを保持するのに十分な仮想メモリが実メモリにマッピングされるよう要求する。第２の制御コード２０４は、このメモリが書き込み可能ページを含むよう要求する。次に、ステップ５０６で、第２の制御コードは、ヘッダーおよび暗号化されたヘッダーダイジェストを媒体からマッピングされたメモリ内の書き込み可能ページにコピーする。ステップ５０８で、次いで第２の制御コード２０４は、第１の制御コードを呼び出して、ヘッダーに関連付けられているデジタル署名を確認するよう要求する。この方法は単一の実行可能ファイルの文脈で説明しているが、図５から図８に示した方法のステップは複数のファイル上で同時に実行することができることを理解されたい。この場合、複数のヘッダー（およびそのそれぞれの暗号化されたヘッダーダイジェスト）は、メモリにロードされ、ともに確認される。
【００５０】
図６を参照すると、ステップ６００で、第１の制御コード２０２は、ヘッダーおよび暗号化されたヘッダーダイジェストが格納されるページのアクセス許可を書き込み可能から読み取り専用に変更する。これによってヘッダー情報の偶発的な、または悪意のある改変が防止される。他の実施形態では、後述する確認ステップ中にヘッダーが改変される危険性がない場合、このステップを後で実行することができる。しかし、このステップは、少なくとも下記のステップ６１２で第２の制御コード２０４に戻る前に実行すべきである。
【００５１】
ステップ６０２で、ファイルのヘッダーダイジェストの暗号化に使用されるプライベートキーに対応するパブリックキーは、暗号化されたヘッダーダイジェストの解読に使用される。ステップ６０４で、元のヘッダーダイジェストの作成に使用された同じアルゴリズム（ＳＨＡ１など）を使用してヘッダーのダイジェスト（セクションダイジェストおよび他のヘッダー情報を含み、しかし暗号化されたヘッダーダイジェストの任意の部分は含まない）が計算される。計算されたダイジェストは、確認ダイジェストを定義する。ステップ６０６で、確認ダイジェストは解読されたダイジェストと比較される。ダイジェストが一致しない場合、第１の制御コード２０２は、ヘッダーを含むメモリのページを消去し、アンマッピングし（ステップ６０８）、第２の制御コード２０４にエラーコードを戻す。したがって、実行可能ファイルをロードしようとする試行は失敗する。しかし、ダイジェストが一致する場合、第１の制御コード２０２は、第２の制御コード２０４に成功コードを戻す。
【００５２】
次に図７を参照すると、ヘッダーが正常に確認されたことを前提に、ステップ７００から７０６がファイルのセクションごとに実行される。代替実施形態では、これらのステップは、「プレロード」とマークされたいくつかのセクションについてのみ実行することができる。プレロードセクションは、ソフトウェアがそれ自体を初期化するのに必要なものである。こうした実施形態では、プレロードセクションを最初にロードするだけでよい。次いで他のセクションが必要に応じてロードされる。
【００５３】
ステップ７００で、ロードされるファイルのセクションが媒体で見つけ出される。ステップ７０２で、第２の制御コード２０４は、第１の制御コード２０２を呼び出して、セクションをロードするのに十分な書き込み可能仮想メモリページが実メモリにマッピングされるよう要求する。次に、ステップ７０４で、第２の制御コード２０４は、セクションを媒体からマッピングされたページにコピーする。ステップ７０６で、第２の制御コード２０４は、第１の制御コード２０２を呼び出して、ロードされたセクションを確認するよう要求する。このプロセスは、ロードされるセクションごとに繰り返される。
【００５４】
図８は、セクションを確認するために第１の制御コード２０２によって実行されるステップを示している。ステップ８００で、実行可能ファイルのヘッダーがセクションは読み取り専用または実行可能のためのものであることを示す場合、第１の制御コード２０２は、そのセクションを含むマッピングされたページのアクセス許可を読み取り専用に変更する。ステップ８０２で、第１の制御コード２０２は、実行可能ファイルのヘッダー内のセクションダイジェストの計算に使用される同じアルゴリズムを使用してそのセクションの確認ダイジェストを計算する。ステップ８０４で、確認ダイジェストは、ヘッダーに含まれるセクションダイジェストと比較される。比較が失敗すると、第１の制御コード２０２は、ロードされた任意のセクションページを消去し、アンマッピングし（ステップ８０６）、第２の制御コード２０４にエラーを戻す。したがって、実行可能ファイルのロードは失敗する。
【００５５】
しかし、比較が成功した場合はセクションが確認されている。つまり、比較の成功は、セクションがポータブル媒体に格納された時のその状態と同じであり、変更または改変されていないことを示す。ステップ８１２で、セクションが実行可能プログラムコード（データのみに対して）を含んでいる場合、第１の制御コード２０２は、そのセクションを含むページのアクセス許可を、ＥＸＥＣＵＴＥ許可を含み、ＷＲＩＴＥ許可を除くように変更する。ステップ８１４で、第１の制御コード２０２は、第２の制御コード２０４に成功コードを戻す。
【００５６】
再度図７を参照すると、セクションのすべてが確認され、適切にロードされると、第２の制御コ―ド２０４は、ステップ７１０で実行可能のプロセス状態を初期化し、次いでステップ７１２で、プロセッサの命令の実行を、正常にロードされたファイルの実行可能プログラムコードのエントリポイントに分岐させる。本実施形態では、実行可能ファイルのプログラムコードは、スーパーバイザー仮想モード（特権レベル１）で実行される。したがって、この方法は、適切に署名された実行可能ファイルのみがシステムにロードされ、そこで実行されること、および実行前にファイルが修正または改変されていないことを確実にする。
【００５７】
上記の説明からわかるように、本発明のシステムおよび方法のすべてまたは一部は、ハードウェア、ソフトウェア、またはその両方の組み合わせに組み込むことができる。ソフトウェアに組み込まれた場合、本発明の方法および装置、またはいくつかの態様またはその一部は、プログラムコード（すなわち命令）の形で組み込むことができる。このプログラムコードは、コンピュータ可読媒体に格納することができ、プログラムコードがコンピュータまたはコンソール１００などのマシンにロードされ、それによって実行されると、そのマシンは本発明を実施する装置になる。コンピュータ可読媒体には、それだけには限定されないが、ＲＡＭ（random access memory）、ＲＯＭ、ＥＥＰＲＯＭ（Electronically Erasable and Programmable Read Only Memory）、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光ディスク記憶装置、メモリカード、メモリスティック、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶装置、または情報の格納に使用でき、コンソール４００からアクセスできる他の任意の媒体などがある。プログラムコードは、高レベル手続き型またはオブジェクト指向型のプログラミング言語で実施することができる。あるいは、プログラムコードは、アセンブリ言語またはマシン言語で実施することができる。いずれの場合も、プログラムコードは、コンパイル済み形式で、またはインタープリタを介して実行することができる。
【００５８】
上記に示すように、本発明は、適切に署名されたプログラムコードのみがシステム上で実行されること、および実行前にプログラムコードが修正または変更されていないことを確実にするためのシステムおよび方法を対象としている。本発明の広範な発明の概念から逸脱することなく上述した実施形態に変更を加えることができることを理解されたい。例えば、本発明をマルチメディアコンソールで具体化されるように上記で説明してきたが、本発明を、それだけには限定されないが一例として衛星放送受信機、セットトップボックス、アーケードゲーム、パーソナルコンピュータ（ＰＣ）、ポータブル電話、ＰＤＡ、および他のハンドヘルド装置を含めて他の多くのタイプのコンピューティング装置で具体化することができることを理解されたい。したがって、本発明は、シミュレーション、画像、ビデオ、音声、テキスト、ゲーム、オペレーティングシステム、アプリケーションプログラム、または他の任意の形のソフトウェアなど、様々な形のデジタルデータおよびプログラムコードに適用することができる。さらに、本発明の方法およびシステムは、ほとんどすべてのタイプのネットワークを介したデジタルデータおよびプログラムコードへのアクセスの制御に適用し、またはその使用のために変更したり、ほとんどすべてのタイプの媒体で、またはそれだけには限定されないが例えば無線周波数伝送（ｒａｄｉｏ  ｆｒｅｑｕｅｎｃｙ  ｔｒａｎｓｍｉｓｓｉｏｎｓ）および光信号などを含むほとんどすべてのタイプの伝播媒体を介して配布したりすることが容易にできる。したがって、本発明は開示した特定の実施形態に限定されるものではなく、添付の特許請求の範囲によって定義された本発明の意図および範囲内に含まれるすべての変更をカバーするものとすることを理解されたい。
【図面の簡単な説明】
【００５９】
【図１】本発明を具体化できるマルチメディアコンソール例を示すブロック図である。
【図２】図１のマルチメディアコンソール例での本発明のシステムの一実施形態を示す図である。
【図３】本発明の一実施形態による本発明の方法の態様を示すフローダイアグラムである。
【図４】本発明の一実施形態による図３で示した方法を使用して作成されたファイル構成を示す図である。
【図５】本発明の一実施形態による本発明の方法の追加の態様を示すフローダイアグラムである。
【図６】本発明の一実施形態による本発明の方法の別の態様を示すフローダイアグラムである。
【図７】本発明の一実施形態による本発明の方法のさらに別の態様を示すフローダイアグラムである。
【図８】本発明の一実施形態による本発明の方法のさらに別の態様を示すフローダイアグラムである。
【符号の説明】
【００６０】
２００  メモリ空間
２０２  第１の制御コード
２０４  第２の制御コード
２０６  適切に署名された実行可能ファイル
【図１】
2006065847.tif 000003
【図２】
2006065847.tif 000004
【図３】
2006065847.tif 000005
【図４】
2006065847.tif 000006
【図５】
2006065847.tif 000007
【図６】
2006065847.tif 000008
【図７】
2006065847.tif 000009
【図８】
2006065847.tif 000010