(57)【要約】【課題】データ処理システムで実行されるアプリケーションが、信用できる供給源だけに由来することを確実にするための方法、コンピュータ・プログラム製品、およびデータ処理システムを開示する。【解決手段】ある好適な実施形態において、安全オペレーティング・カーネルは、信用できるソフトウエア供給元に対応するキーを包含する「キー・ホルダ」を維持する。該安全カーネルは、供給元キーを使って、所与のアプリケーションが承認された供給元によって署名されていることを検証する。オプションとして、管理者ユーザは、ユーザが独立ソフトウエア開発者からのソフトウエアを実行できるようにするため、前述の供給元キー検証を無効化することができる。【選択図】図８
2010541084.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ実行のデータ処理の方法であって、
前記方法は、
コンピュータによって、初期化ハードウエアを使い、プロセッサ・データパスがアクセス可能なメモリに格納されるセキュア・カーネルの暗号化コピーを復号するステップと、
前記コンピュータによって、前記メモリから読み出された前記セキュア・カーネルを実行するステップと、
を含み、
前記セキュア・カーネルはセキュア・カーネル暗号キーを包含し、
前記セキュア・カーネルを実行するステップは、
前記セキュア・カーネル暗号キーを使って、供給元関連の暗号キーのデジタル署名の正当性確認をするステップと、
前記供給元関連の暗号キーを使って、アプリケーション関連の暗号キーのデジタル署名の正当性確認をするステップと、
を含み、
前記供給元関連の暗号キーはソフトウエア供給元に関連付けられており、
前記アプリケーション関連の暗号キーはソフトウエア・アプリケーションに関連付けられている、
前記方法。
【請求項２】
前記アプリケーション関連の暗号キーは、前記ソフトウエア・アプリケーションに併合して格納される、請求項１に記載の方法。
【請求項３】
前記初期化ハードウエアは、前記プロセッサ・データパスから独立して作動する、請求項１または２に記載の方法。
【請求項４】
前記アプリケーション関連の暗号キーが正当性確認に合格したかどうかを判定するステップと、
前記アプリケーション関連の暗号キーが正当性確認に合格したことの判定を受けて、前記セキュア・カーネルに関連付けられた暗号キーによる署名を使って、前記アプリケーション関連の暗号キーの新規署名を生成するステップと、
をさらに含む、請求項１、２、または３に記載の方法。
【請求項５】
前記署名に使う暗号キーは、前記セキュア・カーネル暗号キーがその対応公開キーとなる、キー・ペアの秘密キーである、請求項４に記載の方法。
【請求項６】
前記アプリケーション関連の暗号キーを使って前記ソフトウエア・アプリケーションのデジタル署名を検証するステップをさらに含む、請求項１から５のいずれかに記載の方法。
【請求項７】
前記供給元関連の暗号キーを使った、前記アプリケーション関連の暗号キーの前記デジタル署名の前記正当性確認が合格した場合においてだけ、前記ソフトウエア・アプリケーションを実行するステップをさらに含む、
請求項１から６のいずれかに記載の方法。
【請求項８】
プロセッサ・データパスおよび専用の初期化ハードウエアを有するコンピュータで実行するための、有形のコンピュータ可読媒体中のコードのコンピュータ・プログラム製品であって、
前記コンピュータ・プログラム製品コードは、
暗号化されたカーネルを含み、前記暗号化カーネルは、前記専用初期化ハードウエアによって復号形式に復号され、前記復号形式が前記プロセッサ・データパスによって実行されるようになされており、
前記暗号化カーネルは、
セキュア・カーネル暗号キーと、
前記セキュア・カーネル暗号キーを使って供給元関連の暗号キーのデジタル署名の正当性確認をするための命令であって、前記供給元関連の暗号キーはソフトウエア供給元に関連付けられている、前記命令と、
前記供給元関連の暗号キーを使って、アプリケーション関連の暗号キーのデジタル署名の正当性確認をするための命令であって、前記アプリケーション関連の暗号キーは、ソフトウエア・アプリケーションに関連付けられている前記命令と、
を含む、前記コンピュータ・プログラム製品。
【請求項９】
前記アプリケーション関連の暗号キーは、前記ソフトウエア・アプリケーションに併合して格納されている、請求項８に記載のコンピュータ・プログラム製品。
【請求項１０】
前記初期化ハードウエアは、前記プロセッサ・データパスから独立して作動する、請求項８または９に記載のコンピュータ・プログラム製品。
【請求項１１】
前記アプリケーション関連の暗号キーが正当性確認に合格したかどうかを判定するための命令と、
前記アプリケーション関連の暗号キーが前記正当性確認に合格したことの判定を受けて、前記セキュア・カーネルに関連付けられた暗号キーによる署名を使って、前記アプリケーション関連の暗号キーの新規署名を生成するための命令と、
をさらに含む、請求項８、９、または１０に記載のコンピュータ・プログラム製品。
【請求項１２】
前記署名に使う暗号キーは、前記セキュア・カーネル暗号キーがその対応公開キーとなる、キー・ペアの秘密キーである、請求項１１に記載のコンピュータ・プログラム製品。
【請求項１３】
前記アプリケーション関連の暗号キーを使って前記ソフトウエア・アプリケーションのデジタル署名を検証するステップをさらに含む、請求項８から１２のいずれかに記載のコンピュータ・プログラム製品。
【請求項１４】
前記供給元関連の暗号キーを使った、前記アプリケーション関連の暗号キーの前記デジタル署名の前記正当性確認が合格した場合においてだけ、前記ソフトウエア・アプリケーションの実行を開始するための命令をさらに含む、請求項８から１３のいずれかに記載のコンピュータ・プログラム製品。
【請求項１５】
初期化ハードウエアと、
プロセッサ・データパスと、
前記プロセッサ・データパスおよび前記初期化ハードウエアがアクセス可能なメモリと、
一つ以上のセンシティブな部分を有するセキュア・カーネルの暗号化されたコピーを包含する不揮発性記憶装置と、
を含むデータ処理システムであって、
前記初期化ハードウエアは前記暗号化コピーを前記メモリ中に復号し、前記プロセッサ・データパスは前記メモリ中の前記セキュア・カーネルを実行して、
前記セキュア・カーネル暗号キーを使って、供給元関連の暗号キーのデジタル署名の正当性確認をするステップと、
前記供給元関連の暗号キーを使って、アプリケーション関連の暗号キーのデジタル署名の正当性確認をするステップと、
を含む処置を遂行し、
前記供給元関連の暗号キーはソフトウエア供給元に関連付けられており、
前記アプリケーション関連の暗号キーはソフトウエア・アプリケーションに関連付けられている、
前記データ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的に、データ処理システムにおける安全なソフトウエア実行に関する。具体的には、本発明は、データ処理システムにおいて実行されるアプリケーションが、信用できる供給源だけに由来することを確実にする方法を対象とする。
【背景技術】
【０００２】
オペレーティング・システムまたはランタイム環境にとって基本的なタスクの一つは、コンピュータ・システムの安全および安定を維持することである。理想的には、オペレーティング・システムまたはランタイム環境は、システムの安全および安定が危険にさらされないとの証明が可能な、「安全」なアプリケーションだけが実行を許されることを確実にすべきである。残念な現実は、計算可能性理論の分野におけるコンピュータ科学者および数学者が長年にわたって存知しているように、前もって、ある所与のプログラムが「安全」だと間違いなく予知するのは非常に困難であり、多くの場合不可能だということである。このため、もっと実際的な解決法では、安全に実行可能だと信用できるアプリケーションだけを許可するようにしている。
【０００３】
この「信用」は２つのやり方で確立できる。一つは、コード自体を検査し、安全性問題の特定の徴候を検知することである。これは、ウィルス・スキャン・ソフトウエアが取り入れているアプローチであり、既知のウィルスの形跡をスキャンする。また、この技法は、ＪＡＶＡ（Ｒ）仮想マシンのバイトコード検証スキームにも採用されており、危険な、または破損したコードを示すパターンを探索する。ＪＡＶＡは、カリフォルニア州サンタクララのＳｕｎＭｉｃｒｏｓｙｓｔｅｍｓ，Ｉｎｃ．によって開発された、オブジェクト指向のプログラミング言語およびランタイム環境規格である。
【０００４】
もう一つのやり方は、「信用できる」アプリケーション、すなわち信用できる供給源から得たアプリケーションだけを実行許可することである。ＪＡＶＡ仮想マシンは、この第二の方法にも同様に対応していて、ＪＡＶＡは、デベロッパがＪＡＶＡコードにデジタル署名を添えることができるようにしており、ＪＡＶＡ仮想マシンが該署名を実行時に検証することができる。ＪＡＶＡ仮想マシンは、特定のセキュリティ・センシティブなオペレーションを、信用できる供給源がデジタル署名したＪＡＶＡコードだけに実施させるように設定することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＪＡＶＡバイトコードは、仮想マシン中で実行されるので、該仮想マシンが、所与のオペレーションに関連する潜在的安全リスクについて、有害な可能性があるバイトコードがまさに実行されんとする時に「オンザフライ（実行時に）」でランタイム判定を行うことができる。この能力は有利であるが、一部のアプリケーションにおいては、仮想マシンを使うことにより課される付加的な複雑性および計算コストが不利点となる。さらに、仮想マシンはソフトウエアなので、（それがデジタル署名を検証するため使用する）自分の暗号キー群を、ソフトウエアがアクセス可能な記憶装置内に格納しておかなければならない。これらのキーがかく格納されるという事実は、これらが、他の一切のデータと同様に変更や置き換えにさらされていることを意味する。従って、格納されているキー一式を単に変更することによって、ＪＡＶＡ仮想マシンが課す安全規制を迂回することが可能である。
【０００６】
従って、必要とされるのは、信用できるコードだけがコンピュータ・システムで実行されることを確実にする、効率的でありながら高い安全性のある方法である。本発明は、この問題およびその他の問題に対する解決法を提供し、従来の手法に優れる他の利点を提供する。
【課題を解決するための手段】
【０００７】
上記に鑑み、本発明は、データ処理システムで実行されるアプリケーションが、信用できる供給源だけに由来することを確実にするための方法、コンピュータ・プログラム製品、およびデータ処理システムを提供する。ある好適な実施形態において、セキュアな初期化ハードウエアが、メモリ中にセキュア・カーネルをロードして復号し、該セキュア・カーネルは内蔵暗号キー・ペアを包含する。該セキュア・カーネルとは別に、信用できるソフトウエア・ベンダに対応するキー群を包含する「キー・ホルダ（ｋｅｙｒｉｎｇ）」が維持され、その各キーには、該内蔵暗号キー・ペアの秘密キーを使ってデジタル署名がされている。セキュア・カーネルによって、アプリケーションが実行のためメモリ中にロードされると、該セキュア・カーネルは、その内蔵暗号キー・ペアの公開キーを使って、自分のキー・ホルダ中のベンダ・キーを検証する。ベンダ・キーの正当性を確証したならば、次いで、そのベンダ・キーを使って、該アプリケーションに関連付けられた公開キーの正当性を検証する。しかる後、このアプリケーションの公開キーを使って、アプリケーション・イメージの完全性を検証する。ユーザが、独立ソフトウエア・デベロッパ（自分に対するベンダ・キーを持たないデベロッパ）からのソフトウエアを実行できるようにするため、オプションとして、前述のベンダ・キー検証機能を無効にすることもできる。
【０００８】
上記は要約であって、従い、必然的に単純化、一般化、および細部の省略が含まれている。それ故、該要約が説明のためだけのものであり、決して限定を意図したものでないことを当業者はよく理解していよう。本発明の他の特徴、発明的特質、および利点は請求項だけによって定義され、これらは以下に記載する非限定的な詳細説明の中で明確になろう。
【０００９】
当業者は、添付の図面を参照することにより、本発明をより良く理解し、その数々の目的、特質および利点を明らかにすることができよう。
【図面の簡単な説明】
【００１０】
【図１】本発明の好適な実施形態を実行可能な、典型的データ処理システムのブロック図である。
【図２】本発明の好適な実施形態による、二次処理ユニットのブロック図である。
【図３】本発明の好適な実施形態により作製されたデータ処理システム中のメモリ使用状況を示す、メモリ・マップである。
【図４】本発明の好適な実施形態により作製されたデータ処理システム中で使用するアプリケーション４００のメモリ図である。
【図５】本発明の好適な実施形態による、セキュア・カーネルの基本的実行フローのフローチャート表現である。
【図６】本発明の好適な実施形態による、セキュア・カーネルの基本的実行フローのフローチャート表現である。
【図７】本発明の好適な実施形態による、セキュア・カーネルの基本的実行フローのフローチャート表現である。
【図８】本発明の好適な実施形態における、アプリケーション・コードの信用性の検証を確実にするためのスキームを示す図である。
【図９】本発明の好適な実施形態における、アプリケーション・コードの信用性を検証するプロセスのフローチャート表現である。
【図１０】本発明の好適な実施形態における、信用できるアプリケーションの事前正当性確認をするプロセスのフローチャート表現である。
【図１１】本発明の好適な実施形態における、厳格基準モードを無効化する別のプロセスのフローチャート表現である。
【発明を実施するための形態】
【００１１】
以下の記載は、本発明の一例の詳細な説明を提示することを意図したものであって、発明自体を限定するものと取るべきではない。それどころか、その変形は数を問わず本発明の範囲に含めることができ、本明細書の後に添付された請求項中に定義されている。
【００１２】
図１は、本発明の好適な実施形態を実行可能な、典型的データ処理システム１００のブロック図である。データ処理システム１００は、単一の集積回路にいくつかのプロセッサ・コアを包含するモノリシック・マルチプロセッサ１０１を含む。モノリシック・マルチプロセッサ１０１は、内部バス１０４で連結された、汎用一次処理エレメント１０２と、もっと特殊化された計算集約的機能を実施するためのいくつかの二次処理ユニット（二次処理ユニット１１０、１１２、および１１４）とを含む。モノリシック・マルチプロセッサ１０１の外部にある外部バス１０５は、モノリシック・マルチプロセッサ１０１を、主メモリ１０６および二次記憶装置１０８、並びに他の周辺機器（図示せず）に結合している。
【００１３】
二次処理ユニット１１０、１１２、および１１４の各々は、主メモリ１０６に加えて、それ自体のローカル・メモリを包含する。これにより、二次処理ユニット１１０、１１２、および１１４は、分離モードにおいて一次処理エレメント１０２から独立して作動することが可能になり、該モードでは、個別の二次処理ユニットが、そのローカル・メモリを用いて、一次処理エレメント１０２からの干渉なしに計算を実施する。分離モードでないときは、二次処理ユニット１１０、１１２、および１１４は、一次処理エレメント１０２がそれらのそれぞれのローカル・メモリ空間にアクセスすることができるようにすればよい。この好適な実施形態において、一次処理エレメント１０２は、（主メモリ１０６中の）メモリ保護のためのハードウエア・サポートを含むが、二次処理ユニット１１０、１１２、および１１４は、分離モードの間、二次処理ユニット内のローカル・メモリへの不適切なメモリ・アクセスを防止するためのメモリ保護ハードウエアを含有していない。
【００１４】
本発明の好適な実施形態による、二次処理ユニット１１０のさらに詳細な描写が、図２に示されている。二次処理ユニット１１０は、（モノリシック・マルチプロセッサ１０１の内部の）内部バス１０４に結合されているが、それ自体の内部にある自分のイントラユニット・バス２２２も含有する。二次処理ユニット１１０は、二次処理ユニット１１０内で格納された命令プログラムを実行するため用いる、制御ロジック、レジスタ、および機能ユニットを含む主データパス２２０を包含する。二次処理ユニット１１０は、主データパス２２０に加え、それ自体のローカル・ランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍａｃｃｅｓｓ ｍｅｍｏｒｙ）２２４、および、各稼動セッション間で持続的に情報を格納しておくための持続記憶メモリ２２８（これは、フラッシュ・メモリなどの不揮発性メモリ技術を含むものとも含まないものともすることができる）を包含する。
【００１５】
二次処理ユニット１１０の起動は、セキュアな初期化ハードウエア２２６によって取り扱われ、該ハードウエアは、主データパス２２０からは独立している。なお、この文脈において、「初期化」という用語は、二次処理ユニット１１０の初期化を言及するため大まかに用いられ、データ処理システム１００全体の初期化と同時に行われる必要はない。本発明のある好適な実施形態において、二次処理ユニット１１０の初期化は、二次処理ユニット１１０が分離モードにされる都度実施され、例えば、実際のシステムの再初期化と再初期化との間に何回も実施されればよい。従って、この文脈において、「初期化ハードウエア」とは、セキュア・カーネルを実行するため使われる特定の処理ユニットまたはデータパス（本明細書で説明する好適な実施形態の場合には、これは二次処理ユニット１１０である）を初期化するため用いられるハードウエアをいう。
【００１６】
しかしながら、用語「初期化」のこういった使用が、本発明の範囲を、該好適な実施形態の特定のハードウエアに対する初期化に限定するものと理解すべきではない。例えば、本発明の暗号ベースの保護スキームは、単一データパス・プロセッサ（ないしユニ・プロセッサ）に適用することも可能で、この場合、セキュアな初期化ハードウエアによる単一データパスの初期化は、データ処理システム全体の「ウォーム初期化」または「リセット」と基本的には同じことになるであろう。
【００１７】
セキュアな初期化ハードウエア２２６は、二次処理ユニット１１０の初期化中に主データパス２２０をリセットし有効化する機能に加え、該初期化プロセスの一部として、システム・カーネルの暗号マスタ・コピー（マスタ・コピー２３０）をローカルＲＡＭ２２４中に復号するための復号ハードウエアをも包含する。マスタ・コピー２３０を復号するための復号キーは、セキュアな初期化ハードウエア２２６中に内蔵されており、主データパス２２０からは（付言すればイントラユニット・バス２２２からも）これを読み取ることはできない。これは、該キーを、セキュアな初期化ハードウエア２２６の内部の不揮発性メモリに安全に格納するか、あるいは、復号キーを格納するのでなく、セキュアな初期化ハードウエア２２６のロジック中に復号プロセスを実体配線して、該復号ロジック中に非明示的に組み込むことによって、達成することができる。システム・カーネルが復号されたならば、セキュアな初期化ハードウエア２２６は、主データパス２２０をトリガし、復号されたセキュア・カーネルの実行を開始させる。次に、復号されたセキュア・カーネルは、公開キー暗号法とデジタル署名の検証との組み合わせを用いて、二次処理ユニット１１０に対してローカルであって分離モードにおいて使用可能なソフトウエア・ベースの保護構造を提供する。
【００１８】
公開キー暗号法には、暗号化および復号化のため別のキーが使われる。各当事者は２つのキー、暗号化に使われる「公開キー」と、該公開キーを使って暗号化されたメッセージを復号するのに使われる「秘密キー」とを有する。当事者の公開キーは、その当事者が、その公開キーを、該当事者に暗号メッセージを送信したい一切の人が利用できるようにしているという意味で「公開」されており、一方、秘密キーは秘密に保たれている。複数の当事者が同一の公開キーを所有することはできても、その公開キーで暗号化されたメッセージは、秘密キーを使ってだけ復号することができる。言い換えれば、秘密キーを持たない限り、公開キーで暗号化されたメッセージを復号するのは計算的に実行不可能である。これが、暗号化と復号化の双方に同じ秘密キーを使う従来の秘密キー暗号システムと大きく違う点である。おそらく、最もよく知られもっと広く用いられている暗号システムは、リベスト−シャミア−アドルマンないしＲＳＡ（Ｒｉｖｅｓｔ−Ｓｈａｍｉｒ−Ａｄｌｅｍａｎ）暗号システムであり、これは、米国特許第４，４０５，８２９号に記載されている。公開キー暗号法は、第三者による傍受を防止できるので、インターネットを介して安全な取引を行うため広く使われている。
【００１９】
公開キー暗号法は、情報を秘密に保つには非常に有用であるが、公開キー暗号法は、偽造されたまたは破損した情報に対する保護はしない。公開キーは、他の人に配布することができ、公開キーを有するものは誰でも、メッセージを秘密キーを使ってだけ読むことが可能なように暗号化できるので、公開キー暗号法は、メッセージの受信者が、受信されたメッセージが本物か、自称された発信源から来たものかどうかを知るいかなる方法も備えていない。このため、公開キー暗号法は、多くの場合、通信の信頼性を証明しメッセージの完全性を検証するため使用可能な他の暗号化技法と併せて使われる。デジタル署名は、メッセージの発信者の身元を検証するために使用可能な、公開キー暗号法に対するうってつけの補完技法である。デジタル署名の場合、メッセージの送信者は公開／秘密キーのペアを有する。送信者がメッセージを送信するとき、その送信者は、自分の秘密キーとメッセージ自体のテキストとを使って、該メッセージに添付可能なコードを計算する。このコードをデジタル署名という。メッセージの受信者は送信者の公開キーを有しており、これを使って、特定のメッセージに添付されたデジタル署名が当該公開キーに対応する送信者の秘密キーを使って署名されたことを検証することができる。最初期のデジタル署名スキームは、リベスト−シャミア−アドルマンないしＲＳＡデジタル署名スキームで、これもＲＳＡ公開キー暗号システムと同様、米国特許第４，４０５，８２９号に記載されている。
【００２０】
本発明のある好適な実施形態は、公開キー暗号法およびデジタル署名の双方を広範に使用し、データの秘密性を提供し、データの全体性を保持し、不当な処置を防止する。しかしながら、本発明の実施が、いかなる特定の種類の暗号システムまたはデジタル署名スキームの使用にも依存していないことを当業者は認識しよう。本発明の実施形態には、現在既知のまたは将来開発される、任意の暗号システムまたはデジタル署名スキームを利用することができる。
【００２１】
図３は、本発明のある好適な実施形態により作製されたデータ処理システム中のメモリ使用状況を示す、メモリ・マップである。該システム中で一番の特権ソフトウエア・ピースは、セキュア・カーネル３０２であり、その主要機能は、カーネル拡張域３０４に所在するカーネル拡張群を含め、他のソフトウエア・ピースの正当性確認をし信頼性証明をすることである。カーネル拡張群は、システム・ソフトウエアの主たる機能性を提供し、必要に応じまたは所望により、これらを更新、置き換え、または追加することができる。他方、セキュア・カーネル３０２は、最低限の機能性を与えられており、データ処理システムの寿命期間、同一のままであるよう意図されている。セキュア・カーネル３０２は、そのセンシティブな内在部分が、データ処理システム中に存在する他のプログラムによる検査またはアクセスから保護されており、「安全」になっている。後記で示すように、この安全性は、秘密情報の選択的削除と、暗号技法の注意深い使用との組み合わせによって維持される。セキュア・カーネル３０２内に収納された内部情報のセンシティブなピース群のうちには、セキュア・カーネル３０２の当該特定コピーだけに固有の秘密キーがある。本発明のある好適な実施形態において、セキュア・カーネル３０２の秘密キーは、当該特定チップだけに固有なものである（同一製造者の同一の種類の同一バージョンの別のチップであっても、違った秘密キーを有することになる）。また、セキュア・カーネル３０２は、その秘密キーに対応する公開キーを有するが、公開キーは（これは公開のキーなので）秘密にする必要はない。セキュア・カーネル３０２に収納された情報の他のセンシティブなピース群には、他の暗号キー、および特別に許可されるものと見なされるオペレーションを実施するための命令群が含まれる。
【００２２】
セキュア・カーネル３０２は、二次処理ユニット１１０がセキュアな初期化ハードウエア２２６によって初期化される都度、マスタ・コピーからメモリ中にロードされる。このマスタ・コピーは、暗号形式で格納される。マスタ・コピーを復号するため必要な復号キーは、セキュアな初期化ハードウエア２２６（図２）中に組み込まれており、ソフトウエアがアクセスすることはできない。従って、セキュア・カーネル３０２は、セキュアな初期化ハードウエア２２６が起動されているときにだけ（前述のように、二次処理ユニット１１０の初期化中に）メモリにロードすることができる。これにより、セキュア・カーネル３０２のセンシティブな部分を秘密に保つだけでなく、メモリにロードされるとき、セキュア・カーネル３０２が本物で、改ざんされていないことを確実にする。
【００２３】
アプリケーション・ソフトウエアは、アプリケーション域３０６にロードされ、そこから実行される。本発明のある好適な実施形態には、ハードウエアのメモリ保護スキームが存在しないので、アプリケーション域３０６から実行されるアプリケーションは、カーネル拡張域３０４およびセキュア・カーネル域３０２を含めた、メモリ空間の他の部分に自由にアクセスすることができる。しかしながら、アプリケーション域３０６に所在するアプリケーションに制御を渡す前に、セキュア・カーネル域３０２およびカーネル拡張域３０４からセンシティブな情報を削除してしまい、カーネル拡張コードの呼び出しが必要なときには、セキュアな初期化ハードウエアを使ってセキュア・カーネル３０２と任意のカーネル拡張とを再ロードすることによって、メモリ保護の効果が達成される。
【００２４】
アプリケーション域３０６に所在するアプリケーションがカーネルのサービスを使うためには、該アプリケーションが、まずメールボックス域３０８に情報を書き込む。この情報は、要求される特定のカーネル・サービスに関する情報と、コールバック・アドレスなど、制御をアプリケーションに戻すために必要な情報とを含むことになる。この情報がメールボックス域３０８に書き込まれた後、該アプリケーションは、セキュアな初期化ハードウエア２２６をトリガし、二次処理ユニット１１０を再初期化させる。これにより、一切のカーネル・サービスが実施される前に、セキュア・カーネル３０２の新しいコピー（そのセンシティブな部分も含む）がロードされる。メールボックス域３０８に残された命令に従って、制御をアプリケーションに戻す前に、セキュア・カーネル３０２のセンシティブな部分および一切のカーネル拡張が削除される。
【００２５】
また、カーネル拡張に対しても同様なメカニズムが使われ、特定のカーネル拡張がセキュア・カーネル３０２の秘密全てにアクセスすることを防止する。カーネル拡張がタスクを履行するのに必要としない、セキュア・カーネル３０２のセンシティブな部分は、制御をそのカーネル拡張に渡す前に、セキュア・カーネル３０２によって削除される。このようなやり方で、セキュア・カーネル３０２は、その権限および責任の全体または一部だけを所与のカーネル拡張に移譲することができる。カーネル拡張を使ってほとんどのシステム・ソフトウエア・タスクを実施させることによって、セキュア・カーネル３０２を変更する必要なしに、システム・ソフトウエアを更新することができる。これにより、セキュアな初期化ハードウエア２２６に組み込まれた回復不可能な復号キーを使って、セキュア・カーネル３０２のマスタ・コピーを復号することができる。他のシステム・ソフトウエアが更新または置換されても、セキュア・カーネル３０２は決して変わることはないので、復号キー（または、キーが別の場合は対応する暗号化キー）を、セキュアな初期化ハードウエアの外部のどの場所にも保管する必要がなく、復号プロセスがハードウエアのロジック中に配線されている場合は、全くいかなる場所にも保管しておく必要がない。
【００２６】
さらに、アプリケーションが持続的データを格納できる持続記憶域３１０が設けられる。持続的データは、一つ以上のアプリケーションの呼び出しの間にも格納され続けるデータである。持続的データの例には、データベース、またはビデオ・ゲーム機の場合は、ゲームの高得点のリストなどがあろう。
【００２７】
前述のように、セキュア・カーネル３０２は、アプリケーションおよびカーネル拡張を含め、データ処理システム中のソフトウエアの他のピースの完全性を証明し正当性を確認する。図４は、本発明の好適な実施形態によって製作されたデータ処理システムで使われるアプリケーション４００のメモリ図である。アプリケーション４００は、実際に実行可能なコード自体（コード・イメージ４０２）に加え、アプリケーション４００のデジタル署名４０６を検証するために使用可能な公開キー４０４を含む。本発明のある好適な実施形態において、公開キー４０４は、特定のアプリケーション・タイトルに固有のものではあるが、そのアプリケーションの特定のバージョンに固有なものではなく、同じアプリケーションの複数のバージョンが同一の公開キー４０４を有する。
【００２８】
さらに、アプリケーション４００の完全性を検証可能なように、コード・イメージ４０２に対して計算された暗号ハッシュ値４０８が設けられる。ハッシュ値は、データのより大きなブロックを限定された数のビットにマップする関数の計算結果の数値である。暗号ハッシュ値は、一方向性関数（ＯＷＦ：ｏｎｅ−ｗａｙｆｕｎｃｔｉｏｎ）を使って計算され、これは、該関数の逆向き計算が計算的に至難な関数である。暗号ハッシュ値の一例として、米連邦政府関係機関である米国標準技術局（ＮＩＳＴ：ＮａｔｉｏｎａｌＩｎｓｔｉｔｕｔｅ ｏｆ Ｓｔａｎｄａｒｄｓ ａｎｄ Ｔｅｃｈｎｏｌｏｇｙ）により開発された、有名なＳＨＡ−１アルゴリズム（Ｓｅｃｕｒｅ Ｈａｓｈ Ａｌｇｏｒｉｔｈｍ１（セキュア・ハッシュ・アルゴリズム１））がある。他の暗号ハッシュ・アルゴリズム（ＳＨＡ−２５６、ＭＤ５［Ｍｅｓｓａｇｅ Ｄｉｇｅｓｔ ５（メッセージ・ダイジェスト５）］などおよび他に多数）が当該分野で知られており、本発明の範囲および精神から逸脱することなく制限なしに本発明に適用することができる。アプリケーション４００の完全性を検証するため、セキュア・カーネル３０２によって、コード・イメージ４０２の暗号ハッシュ値を計算し、アプリケーションの一部として格納された暗号ハッシュ値４０８と対比することができる。２つのハッシュ値が合致すれば、該アプリケーションの完全性が損なわれていない（すなわち、コード・イメージ４０２は改ざんされたり、破損したりしていない）。
【００２９】
本発明の一つの実施形態において、暗号ハッシュ値は（暗号ハッシュ値４０８のように）直接アプリケーション４００に格納されるのでなく、代わりにデジタル署名４０６中にコード化される。さらに具体的には、この特定の実施形態では、デジタル署名４０６は、コード・イメージ４０２に対して計算された暗号ハッシュ値の暗号化されたコピーである。この場合、公開キー４０４を使い、デジタル署名４０６を復号して暗号ハッシュ値を得、次に、その値を、コード・イメージ４０２に対して計算された計算暗号ハッシュ値と対比することができる。
【００３０】
署名４０６を検証するため公開キー４０４が使われるので、該公開キー４０４が偽造キーでないことが重要である。従って、公開キー４０４に対して計算されたデジタル署名（公開キー署名４１０）もアプリケーション４００中に含められる。この署名は、セキュア・カーネル３０２に既知の一つ以上の所定公開キーを使い、セキュア・カーネル３０２によって検証することができる。
【００３１】
最後に、アプリケーション固有およびアプリケーション・バージョン固有の秘密の生成のためにさらなる記憶スペース４１２が設けられる。アプリケーションが、当該アプリケーションの他のバージョンまたは該アプリケーションの同一バージョンの他のインスタンスだけが見ることのできる情報を格納または伝達したいことがある。本発明のある好適な実施形態において、セキュア・カーネル３０２は、アプリケーション４００などのアプリケーションがロードされると、アプリケーション固有の秘密、およびアプリケーションのバージョン固有の秘密を生成し、これらは記憶域４１２に格納される。このアプリケーション固有の秘密は、セキュア・カーネル３０２の秘密キー（これはセキュア・カーネル３０２の当該のコピーに固有のものである）と、該アプリケーションに固有の（だがバージョン固有ではない）公開キー４０４と、の一方向性関数を計算することによって生成され、しかして、セキュア・カーネル３０２の該特定のコピーの下に実行される該アプリケーションの一切のバージョンのあらゆるインスタンスは、セキュア・カーネル３０２から、同一のアプリケーション固有秘密を受け取ることになる。
【００３２】
他方、アプリケーション・バージョン固有の秘密は、セキュア・カーネル３０２の秘密キーとアプリケーション・イメージの暗号ハッシュ値（ハッシュ値４０８と同一の可能性はあるが必然ではない）との一方向性関数を計算することによって生成される。これは、アプリケーション・タイトルとセキュア・カーネルのインスタンスとに固有なばかりでなく、そのアプリケーション自体の特定のバージョンにも固有な秘密となる。
【００３３】
これらのアプリケーション固有およびアプリケーション・バージョン固有の秘密は、特定のアプリケーション・タイトルまたはアプリケーションの特定のバージョンだけが理解可能な情報の秘密キー（対称キー）暗号に（例えば、不揮発性記憶域３１０に格納されて）用いることができる。さらに、これら秘密はセキュア・カーネル３０２の特定のコピーだけが知っている秘密キー情報を使って計算されるので、（セキュア・カーネル３０２の、相異なる秘密キーを有する２つの異なったコピーを実行する）２つの異なるプロセッサは、違ったアプリケーション固有およびアプリケーション・バージョン固有の秘密を算出することになり、しかして、全体的な暗号スキームの暗号破りをいっそう難しくしている。ロード時に、セキュア・カーネル３０２にこれらの秘密を計算させるさらなる利点は、これら秘密自体を恒久的に保存しておく必要がないことである。セキュア・カーネル３０２は、アプリケーションが次回に実行されるとき（同じ値を有する）秘密を再計算するので、アプリケーションが終了したときその秘密を安全に削除することができる。
【００３４】
カーネル拡張は、それらもデジタル署名を含む点でアプリケーションと似ているので、これらも図４のアプリケーション４００とほぼ同様なやり方で編成することができる。但し、カーネル拡張とアプリケーションとの重要な違いは、カーネル拡張は、セキュア・カーネル３０２の秘密キーを使ってだけ復号が可能なように、暗号化された形式で格納され、該キー自体が（セキュアな初期化ハードウエアによる）安全初期化に引き続き、セキュア・カーネル３０２がロードされ実行されるときにだけ利用可能なことである。公開キー暗号法によって、セキュア・カーネル３０２の秘密きーが危険にさらされることなく、カーネル拡張を更新、置換、または追加することが可能である。セキュア・カーネル３０２の当該コピー（それ独自の秘密キーを有する）だけが新規カーネル拡張を復号することができるようにこの新規のカーネル拡張を暗号化するためには、カーネル拡張の供給源（製造者、発行者、ディストリビュータなど）は、該セキュア・カーネル３０２の公開キー（秘密キーと違って秘密ではない）を供給してもらう必要があるだけである。
【００３５】
前述のように、セキュア・カーネル３０２は、その権限／責任の一つ以上をカーネル拡張に委譲することができる。このことを、セキュア・カーネル３０２は、カーネル拡張に制御を引き渡す際に、特定の特権タスクを実行するために必要なセキュア・カーネル３０２のセンシティブな部分を維持する（すなわち、削除しない）ことによって実施する。セキュア・カーネル３０２は、該カーネル拡張のデジタル署名の正当性確認をするため使われる公開キーを点検することによって、どの部分を維持するかを決定する。セキュア・カーネル３０２は、カーネル拡張に署名するため使われた所定の一連の「特権公開キー」を認識する。各特権公開キーは、ある特定の特権レベルと関連付けられている。すなわち、各特権公開キーは、セキュア・カーネル３０２が該特権公開キーによって署名されたカーネル拡張に制御を引き渡す際に、維持されことになるセキュア・カーネル３０２の一つ以上のセンシティブな部分に対応している。しかして、カーネル拡張は、カーネル拡張の公開キーによって規定された特権レベルに従い、セキュア・カーネル３０２の秘密／特権のすべてまたは一部だけの委譲を受けることができる。
【００３６】
図５〜７は、併せて、本発明の好適な実施形態により作製されたあるセキュア・カーネルの実行の基本フローを複数頁に亘ってフローチャート表現したものである。図５〜７は、ある好適な実施形態のさまざまな暗号機能が、いかにして、セキュア・カーネルの命令の下に協働し、専用保護ハードウエアを使用しないで、特権および非特権プログラム・コードのシステムを生成するかを例示する。なお、最初に図５〜７の明細に入る前のことわりとして、デジタル署名およびハッシュ値の検証の各々は、本来、これら動作の各々が正当性確認または検証が合格であるか不合格であるかの判定を伴うものではあるが、表現の簡明化のため、本明細書では判定ステップ（ダイヤモンド形）でなく処理ステップ（矩形）で表している。以下の説明全体を通して、図５〜７中の一切の検証または正当性確認動作の不合格は、図５〜７に表された通常の実行フローを中断するエラーまたは例外状態をトリガすることになるのを理解すべきである。従って、後記で説明する各正当性確認または検証は、該正当性確認または検証の不合格の場合、エラー状態へと分岐する判定ステップを暗黙のうちに含むことも理解すべきである。
【００３７】
ここで、図５を参照すると、（前述のように）セキュアな初期化ハードウエア２２６が二次処理ユニット１１０を初期化または再初期化するとき、該セキュアな初期化ハードウエアは、二次処理ユニット１１０の主データパスが命令処理を開始するに先立って、セキュア・カーネルを、暗号化されたマスタ・コピーからプロセッサ・アクセス可能なメモリ中に復号する（ブロック５００）。セキュア・カーネルが復号されると、セキュアな初期化ハードウエアは、データ処理システムの主データパスを起動し、次いで該パスがセキュア・カーネルの実行を開始する（ブロック５０１）。
【００３８】
このとき、セキュア・カーネルは、メールボックス域３０８を確認し、特定のカーネル拡張をロード／実行するあるいはウォーム初期化をトリガしたアプリケーションに制御を戻すなど、初期化後に取るべき動作を決定する（ブロック５０２）。さらに、セキュア・カーネルは、メールボックス域３０８をチェックすることにより、ウォーム初期化またはコールド初期化が実施されたかどうかを判断することができる。次に、カーネル拡張をロードすべきかどうかの決定が行われる（ブロック５０４）。ロードする場合（ブロック５０４がＹｅｓ）、セキュア・カーネルは、所望のカーネル拡張を、該セキュア・カーネルの秘密キーを使ってプロセッサ・アクセス可能なメモリ中に復号する（ブロック５０６）。セキュア・カーネルは、該セキュア・カーネルに既知の（すなわち、該セキュア・カーネルの「キー・ホルダ」に格納された）所定の公開キーを使って、該カーネル拡張に併せて供給された公開キーのデジタル署名の正当性確認をする（ブロック５０７）。次いで、セキュア・カーネルは、カーネル拡張の公開キーを使って該カーネル拡張自体のデジタル署名の正当性を確認する（ブロック５０８）。次に、セキュア・カーネルは、カーネル拡張のハッシュ値を計算し、計算されたハッシュ値を該カーネル拡張に併せて供給された値と対比することによって、カーネル拡張の完全性を検証する（ブロック５１０）。
【００３９】
カーネル拡張がこれらの正当性確認／検証の各々に合格した場合、該カーネル拡張に制御を渡す前に、セキュア・カーネルのどのセンシティブな部分も削除し、どの部分を維持すべきかについての決定が行われる（ブロック５１２）。前述したように、この決定は、カーネル拡張に署名するのにどういった公開キーが使われたかに基づいて行われ、各公開キーは、その公開キーを使って署名されたカーネル拡張に制御を渡す際に、維持しておくべき一連のセンシティブ部分に対応（または、同じことであるが、どのセンシティブな部分を削除すべきかに対応）している。セキュア・カーネルのどのセンシティブな部分を維持すべきかの決定が行われたならば、セキュア・カーネルの残りのセンシティブな部分は削除され（ブロック５１４）、セキュア・カーネルは制御をロードされたカーネル拡張に渡す（ブロック５１６）。
【００４０】
（ブロック５１６の後、）ロードされたカーネル拡張の実行からセキュア・カーネルの実行に戻ったならば、あるいはどのカーネル拡張もロードされなかった場合（ブロック５０４がＮｏ）、実行のために新しいアプリケーション・コードをメモリ中にロードすべきかどうかの決定が行われる（ブロック５１８）。ロードする場合（ブロック５１８がＹｅｓ）、該アプリケーション・コードは、プロセッサ・アクセス可能なメモリにロードされる（ブロック５２０）。このとき、新しくロードされたアプリケーション・コードの公開キーの署名が、セキュア・カーネルに既知の所定の公開キーを使って正当性確認される（ブロック５２１）。次いで、アプリケーションの正当性確認がされた公開キーを使って、アプリケーション自体の署名が正当性確認される（ブロック５２２）。次に、該アプリケーションのハッシュ値を計算し、計算されたハッシュ値をアプリケーションと併せて供給された値と対比することによって、該アプリケーションの完全性が検証される（ブロック５２４）。
【００４１】
アプリケーションが正当性確認され検証されたならば、セキュア・カーネルは、セキュア・カーネルの秘密キーとアプリケーションの公開キーとから一方向性関数を計算することによって、該アプリケーション固有の秘密を生成する（ブロック５２６）。また、セキュア・カーネルは、セキュア・カーネルの秘密キーとアプリケーション自体のバイトから計算されたハッシュ値とから一方向性関数を計算することによって、アプリケーション・バージョン固有の秘密も生成する（ブロック５２８）。これらの秘密は、ロードされたアプリケーションがアクセス可能なように、セキュア・カーネルによってメモリに（例えば、該アプリケーションの秘密スペース４１２中に）格納される。
【００４２】
セキュア・カーネルによって、アプリケーション固有およびアプリケーション・バージョン固有の秘密が計算された後、セキュア・カーネルは、（その秘密キー、特権コード部分、および該セキュア・カーネルの他の一切の秘密を含め）それ自体のセンシティブな部分を削除する（ブロック５３０）。次いで、セキュア・カーネルは、アプリケーションに制御を全面的に移管（分岐）する（ブロック５３２）（次の安全初期化まで、該セキュア・カーネルによってさらなる処理が行われることはない）。新しいアプリケーションがロードされない場合（ブロック５１８がＮｏ）の場合、次にセキュア・カーネルは、それ自体のセンシティブな部分を削除し（ブロック５３４）、次いで、メールボックス域３０８に指示されたアプリケーション・コード・アドレスに（すなわち、該セキュア・カーネルの実行をトリガするウォーム初期化を起動したアプリケーションに）制御を渡す（ブロック５３６）。
【００４３】
図５〜７のフローチャート様式に図示されたプロセスは、ロードされたアプリケーションの正当性および完全性の検証を含むが、図示されるように、そのアプリケーションが実際に信用できる供給源からきたことを確実にするメカニズムを何ら含んでいない。この目的を達成するための追加メカニズムが図８に記載されている。
【００４４】
図８において、セキュア・カーネル８００が、内蔵のカーネル固有公開キー８０２（上記のブロック５２１に関連して言及したのと同じキー）を保有しているのが示されている。内蔵公開キー８０２に加え、セキュア・カーネル８００は、いくつかの供給元関連公開キー（キー８０４、８０６、および８０８）へのアクセスも有し、これらキーはセキュア・カーネル中に内蔵はされていないが、該カーネルがアクセス可能である。公開キー８０４、８０６、および８０８の各々は、（キー８０２がキー８０４、８０６、および８０８の署名を正当性確認できるように）内蔵のカーネル固有公開キー８０２に対応する埋め込み秘密キーを使って署名されている。例えば、キー８０４は、署名８１２と関連付けられており、該署名は、セキュア・カーネルの公開キー８０２を使って正当性確認をすることができる。公開キー８０４、８０６、および８０８は、信用できるソフトウエア供給元に対応している。これら信用できる供給元の一つからのアプリケーション（例、アプリケーション８１６）は、それ自体のアプリケーション固有キー（例、アプリケーション固有キー８１８）を包含することになる。これは、上記でブロック５２２に関連して言及したのと同じアプリケーション固有キーである。アプリケーション８１６は、公開キー８０４に対応する信用できる供給元に関連しているので、アプリケーション固有キー８１８は、公開キー８０４に関連付けられた秘密キー（当該供給元が保有）を使って署名される。従って、この署名（署名８２０）は、供給元固有の公開キー８０４を使って正当性確認をすることができる。よって、セキュア・カーネル８０２からアプリケーション・キー８１８への「信用の連鎖」が存在する。
【００４５】
他方、信用できない供給源からのアプリケーションの場合、セキュア・カーネル８００は、該アプリケーションのキーの正当性を確認するために使用可能な、対応する供給元固有キーを持たないことになる。しかして、信用できないアプリケーションのアプリケーション固有キーの正当性確認は不合格となる。これにより、セキュア・カーネル８００を、信用できる供給元に由来するアプリケーションだけを実行することが可能な「厳格基準」に設定することができる。ある好適な実施形態では、この「厳格基準」をオプションとして有効化するようにでき、そのため、無効にした場合、セキュア・カーネル８００は、セキュア・カーネルのキー８０２を使って、アプリケーション固有キーの署名の正当性確認をする。当然ながら、これには、アプリケーション固有キーが、供給元のキー・ペアでなく、該セキュア・カーネルのキー・ペアを使って署名されていることが必要である。
【００４６】
図９は、本発明のある好適な実施形態における、アプリケーション・コードの信用性を検証する基本的プロセスのフローチャート表現である。「厳格基準」が有効化される場合（ブロック９００がＹｅｓ）、セキュア・カーネルは、まず、自分の公開キーを使って、アプリケーションの供給元に関連付けられた供給元キーの署名の正当性確認をする（ブロック９０２）。これに合格した場合、次にその供給元キーを使って、アプリケーション自体に抱き合わされたアプリケーション固有キーの署名の正当性確認をする（ブロック９０４）。最後に、図５〜７に示すように、正当性確認されたアプリケーション固有キーを使ってアプリケーション自体の完全性を実行前に検証する（ブロック９０６）。
【００４７】
他方、厳格基準が無効にされた場合（ブロック９００がＮｏ）、このときは、アプリケーションの完全性を検証する（ブロック９０６）のに先立って、該カーネルの公開キーを使って、アプリケーション固有キーが直接に正当性確認される（ブロック９０８）。アプリケーションを最初にインストールするとき、常に「事前正当性確認」の技法を用いることにより、この正当性確認プロセスに関連する計算のオーバーヘッドの一部を回避することができる。図１０は、本発明のある好適な実施形態による、事前正当性確認を実施するプロセスのフローチャート表現である。アプリケーションが最初にデータ処理システムにインストールされるとき、セキュア・カーネルは、自分の公開キーを使って該アプリケーションの供給元に関連する供給元キーの署名の正当性確認をする（ブロック１００２）。これが合格の場合、次にその供給元キーを使って、アプリケーション自体に抱き合わされたアプリケーション固有キーの署名の正当性確認をする（ブロック１００４）。最後に、これら両方の正当性確認が合格の場合、セキュア・カーネルは、それ自体のキー・ペアを使って、該アプリケーション固有キーに再署名する（ブロック１００６）。
【００４８】
この事前正当性確認が実施された後は、あたかも厳格基準が無効化されているように、各アプリケーションのアプリケーション固有キーは、セキュア・カーネルの公開キーを直接使って正当性確認される。（言い換えれば、図９のブロック９０８と９０６との実行が必要なだけである。）これにより、アプリケーションがロードされる都度実施しなければならない、個々の署名正当性確認の回数が削減される。
【００４９】
可逆的「厳格基準」オプションの実施に代わる方法が、図１１のフローチャート様式に記載されており、これは、図９に示されたような、「厳格」規準モードと「非厳格」（または「オープン」）基準モードとに対する別個の正当性確認プロセスの必要性を排除している。この方法では、明示された「汎用キー・ペア」（図８の汎用公開キー８０８を参照）が定義されている。これにおいては、該汎用キー・ペアの公開キーと秘密キーとの双方が公に入手可能である。このスキームにおいて、供給元固有キーに関連付けられていない、全てのアプリケーション固有公開キーは、この汎用キーを使って署名される。例えば、図８において、アプリケーション８２２（これは、例えば、フリーウエアまたはオープン・ソース・ソフトウエアなどとすることができよう）は、汎用公開キー８０８に対応する秘密キーを使って署名された（署名８２４）アプリケーション固有キー８２４を有する。
【００５０】
次いで、図１１に示されるように、「厳格基準」モードの有効化および無効化が実施される。「厳格基準」モードが有効化される場合（ブロック１１００）、セキュア・カーネル８００の供給元固有キーのキー・ホルダから、汎用公開キー８０８が除去される（ブロック１１０２）。他方、「厳格基準」が無効化される（しかして、「オープン基準」モードが有効にされる）場合、このときは、セキュア・カーネル８００の供給元固有キーのキー・ホルダに汎用公開キー８０８が加えられる（ブロック１１０４）。図１１に示されたプロセスが実行された後、あたかも「厳格基準」モードにおけるように、引き続く全ての正当性確認（すなわち、図９のブロック９０２、９０４、および９０６）が実施される。自分に関連付けられた供給元固有キーを持たないアプリケーションは、汎用公開キー８０８を使って正当性確認されることになり、一方、供給元固有キーがあるアプリケーションは、その供給元固有キーによって正当性確認をされることになる。
【００５１】
本発明の好適な実施形態の一つは、例えばコンピュータのランダム・アクセス・メモリ中に常駐可能な、コンピュータ・プログラムすなわち一連の命令（プログラム・コード）、または、他の、コード・モジュール中の機能的な記述的材料である。一連の命令は、コンピュータが必要とするまで、例えば、ハード・ディスク・ドライブなど別のコンピュータ・メモリ、あるいは、光ディスク（最終的にはＣＤ−ＲＯＭで使用するため）またはフレキシブル・ディスク（最終的にはフレキシブル・ディスク・ドライブで使用するため）などのリムーバブル・メモリに格納しておくこともできるし、インターネットまたは他のコンピュータ・ネットワークを介してダウンロードすることもできる。このように、本発明は、コンピュータで使用するコンピュータ・プログラム製品として実装することもできる。さらに、説明したさまざまな方法は、ソフトウエアによって選択的に作動されるか再設定された汎用コンピュータで便利に実施できるが、当業者は、これらの方法が、必要な方法ステップを遂行するよう構築されたハードウエア、ファームウエア、または、もっと専用化された装置で実施できることも認識していよう。機能的な記述的材料とは、マシンに機能を付与する情報である。機能的な記述的材料には、以下に限らないが、コンピュータ・プログラム、命令、規準、事実、計算可能な関数の定義、オブジェクト、およびデータ構造が含まれる。
【００５２】
本発明の特定の実施形態を提示し説明してきたが、当業者にとって、本発明およびそのより広い態様から逸脱することなく、本明細書の教示に基づき、変形および変更を加えるのが可能なことは自明であろう。従って、添付の請求項は、かかる全ての変形および変更を、本発明の実質的精神および範囲内にあるものとして、その請求範囲に包含するものである。さらに、本発明は、添付の請求項によってだけ定義されることを理解すべきである。当業者は、提示された請求項の構成要素に特定の数が意図されている場合、かかる意図は、請求項に明示で記載され、かかる記載のない場合はそういった制限が存在しないことを理解していよう。制限のない例を挙げれば、後記の添付請求項は、理解のための補助として、請求項の構成要素を提示するための導入句「少なくとも一つの」および「一つ以上の」の使用を包含する。しかしながら、かかる語句の使用によって、不定冠詞「ａ」または「ａｎ」による請求項の構成要素の提示が、かかる提示の請求項の構成要素を包含するいかなる特定の請求項に対しても、たとえ同じ請求項に、導入句「少なくとも一つの」または「一つ以上の」と「ａ」または「ａｎ」などの不定冠詞とが含まれているとしても、その請求項をかかる構成要素を一つだけ含む発明に限定することを示唆すると解釈されるべきではなく、請求項中の定冠詞の使用についても同様である。請求項中に「または」という語が使われている場合、それは包括的意味（すなわち、「Ａ、Ｂのどちらか一方」とは対照的に「ＡまたはＢあるいはＡおよびＢの両方」）で使われている。
【図１】
2010541084.tif 000003
【図２】
2010541084.tif 000004
【図３】
2010541084.tif 000005
【図４】
2010541084.tif 000006
【図５】
2010541084.tif 000007
【図６】
2010541084.tif 000008
【図７】
2010541084.tif 000009
【図８】
2010541084.tif 000010
【図９】
2010541084.tif 000011
【図１０】
2010541084.tif 000012
【図１１】
2010541084.tif 000013
【国際調査報告】
2010541084.tif 000014
2010541084.tif 000015
2010541084.tif 000016