コンピュータシステムの広範囲にわたる使用は、電子的コンピュータシステムに基く情報処理の著しい増大を招き、極めて大量のデジタルデータの創出、配布及び処理を伴うものとなってきている。データ記憶容量及び高速化された処理速度を考慮したコンピュータシステム資源の増大に伴い、オーディオデータ、映画等の大容量のデータセットの複製がますます多くの人々にとって利用可能になってきており、電子的な形態で提供されるデータの多くに関連するであろういかなる保護的権利の存在にもかかわらず、そのような複製はしばしば実行される。このように、電子データの不法な複製、保管及び再配布により、甚大なる経済的損害が生じる可能性がある。また、インターネット等の広範囲に及ぶネットワークを介したアプリケーションプログラムの配布は、悪意のあるソフトウエアアプリケーションを配布する可能性をももたらすかもしれず、それらは次いでデータ及び/又は該当するコンピュータプラットフォームの構成を操作するために使用されかねない。例えば、私的環境において、また、特に産業界においては、例えば、記憶されたデータ等のソフトウエアファイルを操作し、プラットフォームの実際の使用者が知らないうちにインターネットを介して情報を通信し、サービス拒否攻撃(denial of service attack)を開始し、それによりプラットフォームの特定の状態を必要とする専用のアプリケーションに対して場合によってはプラットフォームをもはや使用不可能な状況にしてしまいかねないソフトウエアアプリケーションを導入することによって、著しい損害が生じる可能性がある。
これらの理由により、コンピュータプラットフォームの完全性を高め、例えば悪意のあるソフトウエア、サービス拒否攻撃、データ傍受(sniffing)、なりすまし(spoofing)等の形をとる外部攻撃の「成功」の蓋然性を低減し、また、コンピュータプラットフォームの内部操作に関するデータ完全性をも高めるためのメカニズムの開発について多大な努力がなされている。例えば、データの伝送及び記憶の間における第三者によるデータの改ざん(tampering)に対して高度な耐力を有するデータ交換を可能にする対称又は非対称な暗号化/復号化技術のような多くの暗号化技術が利用可能である。例えば、非対称暗号化技術では、私的鍵及び公開鍵の対が、それらの鍵の一方によりデータを暗号化するために、またそれらの鍵の他方によりそのデータを復号化するために用いられてよく、それらの鍵の一方には公然とアクセス可能である。これらの技術はデータ伝送及びデータ記憶において完全性を高めるであろうが、特にコンピュータの安全性を高めることが意図された多くのアプリケーションは、信頼されたプラットフォーム構成(trusted platform configuration)に頼っているであろうから、考慮対象となるコンピュータプラットフォームの実際の構成は、それでもなお多くの攻撃の可能性をもたらすであろう。
信頼されたコンピュータプラットフォームは、ハードウエア構成の他にソフトウエアアプリケーションも専用の構成にあるであろうことが仮想されるコンピュータシステムと考えることができる。しかしながら、安全なプラットフォーム構成は、信頼されたプラットフォームレベルの「連鎖」を確立することによってのみ成立させることができ、後続のレベルの完全性がすでに照合されている場合にのみ各後続のレベルは先行するレベルによって初期化することができる。従って、システムレベルでの完全性は完全性照合の連鎖を通して維持することができ、認証ステップの連鎖のルートは、最上位レベル、即ちユーザアプリケーションのレベルを初期化した後のシステムの完全性に関する高い信頼性を達成するために、高度な耐改ざん性を備えていなければならないであろう。
典型的なコンピュータプラットフォームでは、例えば、中央処理ユニット(CPU)を初期化し、通常はCPUの外部に設けられるシステムメモリを初期化し、外部の大容量記憶デバイスからシステムメモリにオペレーティングシステムを読み込み、最後にユーザアプリケーションを実行することに関して、システムの初期化は種々の程度の抽象化(abstraction)を必要とする。このように、オペレーティングシステムは、「疑わしい」処理によって呼び出されるかもしれず、それによりハードウエア及びソフトウエアの構成要素を改変して基本プラットフォーム構成を操作する機会を与えることがあるから、システム全体の総合的な完全性を高めることを考慮すると、オペレーティングシステムを読み込むのに先立つ種々のシステム活動がオペレーティングシステム及びユーザアプリケーションの完全性に依存して安全であると考えられてよいとの仮定は、十分でないかもしれない。従って、システムメモリ等のコンピュータシステムの種々のハードウエア構成部品を初期化する処理及び、より高位のシステムレベルを初期化するためのそこに含まれる命令の実行は、ブートストラップ(boot strapping)又はブーティング(booting)と称されることもあり、強化されたシステム全体の完全性を提供するために信頼性の連鎖に組み込まれねばならないであろう。
電源投入後又はリセットイベント後にコンピュータシステムを初期化するための典型的な起動シーケンスは、CPUの「電源投入自己診断」をもたらし、そこでは、プロセッサもまた、プロセッサのリセットベクタ(reset vector)によって示される専用の入力アドレスにて命令の実行を開始する。即ち、最初のプロセッサ自己診断の後、命令の実行は典型的にはソフトウエアルーチンのアドレスであってよいエントリーポイントにて開始されてよく、しばしばBIOS(基本入出力システム(basic input/output system))と称されるそのソフトウエアルーチンは、コンピュータプラットフォームの専用外部不揮発性メモリに記憶されていてよい。BIOSの制御の下、残りの自己診断が実行されてよく、また、プラットフォームのハードウエア構成が決定又は「測定」されてよい。その後、例えばコンピュータシステムのハードディスク、ディスク、CD−ROM、拡張カード等の大容量記憶デバイスのような起動可能デバイスの探索が実行されてよく、そこから主要な起動ブロックがシステムメモリに読み込まれてよく、次いで制御はその主要な起動ブロックに移されて、オペレーティングシステムがシステムメモリに読み込まれてよい。
種々の例示的な実施形態が以下に説明される。明瞭のために、実際の実装の全ての特徴は本明細書において説明されていない。言うまでもなく、そのようないかなる実際の実施形態の開発においても、一つの実装と他とで異なるものになるであろうシステム関連及びビジネス関連の制約の遵守のような開発者の特定の目標を達成するために、多くの実装固有の決定がなされなければならないことは理解されるであろう。また、そのような開発努力は得てして複雑で時間のかかるものになろうが、この開示の利益を享受する当業者にとっては経常的業務であろうことが理解されよう。
添付図面を参照して本主題を説明する。種々の構成、システム及び装置が、説明のみを目的とし且つ当業者に周知の詳細と相まって本開示を不明確にすることのないように、図面内に模式的に描かれている。それでもなお、本開示の例示的な実例を説明するために添付図面が含まれているものである。ここで用いられている語句(words and phrases)は、関連分野も含めた当業者によるそれらの語句の理解と矛盾しないように理解され且つ解釈されるべきである。用語又は句(term or phrase)の特別な定義、即ち当業者によって理解されるような通常の慣例的な意味とは異なる定義は、ここでの用語又は句の一貫した用法によって暗示されることを意図したものではない。用語又は句が特別な意味、即ち当業者によって理解される以外の意味を有することが意図される限りにおいて、そのような特別の定義は、用語又は句に対する特別な定義を直接的に且つ明白に提供する方法で明細書中に明示的に記載されるであろう。
概して、本開示は、起動又はリセットあるいはシステムの初期化を必要とする他の動作状態に際して、命令を実行し、中央処理ユニットの一部として動作する不揮発性メモリに記憶されたデータを用いて、その不揮発性メモリに収容されている一連のデータを操作する可能性を著しく減少させるためのシステム及びメカニズムを提供する。従って、不揮発性メモリの内容は、CPUの電源投入又はリセットの場合に第1の命令が不揮発性メモリから確実に取り込まれるようにすることによって、CPU及びコンピュータシステム全体の初期化の間に測定のための信頼性の静的ルートとして用いられてよい。このように、そこに収容されている一連のデータは、起動前又はBIOS前構成要素(pre-boot or pre-BIOS component)として機能してよく、それらは、動作データ状の変数やBIOSソフトウエアの一部を実行するためのスタック(stack)及び情報を記憶するのに用いられてよい内部ランダムアクセスメモリのような更なるシステム構成要素の初期化を可能にするであろう。例えば、ランダムアクセスメモリの一部としてのデータキャッシュ、及び命令キャッシュは、内部不揮発性メモリの起動前データによって初期化されてよく、そこに収容されているデータへの初期化処理の間における外部アクセスの可能性を十分に回避することができる。つまり、ランダムアクセスメモリ領域、即ちデータキャッシュ及び命令キャッシュは、CPU内部構成部品であり、特に外部システムメモリがこの段階で初期化されていないときに、好ましからざる操作を極めて困難なものにすることができる。BIOS完全性を考慮した一つ以上の署名の照合が、ランダムアクセスメモリ内において、命令キャッシュに適合するサイズを有するように構成される第1の部分に対して実行され得るように、BIOSルーチンは、ランダムアクセスメモリの記憶容量に応じて二つ以上の部分に分割されていてよい。このように、起動情報のこの部分は、その完全性を照合した後に、ランダムアクセスメモリから直接的に実行されてよい。従って、起動前命令を実行することによるランダムアクセスメモリの初期化及び起動情報の一部分の読み込みの間は、起動前情報は外部からアクセスされなくてすみ、第1の署名照合処理のいかなる操作をも実質的に回避することができる。幾つかの例示的な実施形態では、例えばBIOS改訂版(upgrade veisions)等の完全性を評価するための復号化鍵にアクセスすることを目的とした外部アプリケーションによる署名照合の後に、起動前情報がアクセスされてよい。
従って、起動情報の第1の部分の署名照合の後、フロー制御はこの部分に移ってよく、システムメモリを初期化し且つ残りの起動情報を複写する一方で起動情報の更なる部分の完全性も照合することによって、更なる起動処理が継続されてよい。それ故、CPUの一体化部分として提供される不揮発性メモリに収容されるデータ、即ち命令及びデータ値は、測定のための信頼性の静的コアルートとして用いられてよく、それにより耐改ざん性ハードウエア及びソフトウエア構成を達成し得るコンピュータプラットフォームの提供が可能になる。特に、BIOSチップの交換のような攻撃を考慮すると、ここに開示される実施形態のメカニズムは、信頼できるコンピュータプラットフォームの必要性に基くであろう金融取引又はデジタル著作権管理のコンテキストにおいてプラットフォームを使用する典型的な実用上のアプリケーションに対して強化された安全性を提供することができる。
図1aは測定のための信頼性のコアルート(CRTM)が高度な耐改ざん性(tamper resistance)で実装された例示的な実施形態に従う中央処理ユニット(CPU)100を模式的に示している。CPU100は、算術演算、論理演算等を実行するようなデータ処理のための構成要素を含んでよいCPUコア102を備えていてよい。CPUコア102は、CPU100の全般的な構成に適合するように、複数のスタティックRAMセル等を備えていてよいランダムアクセスメモリ101に機能的に接続されている。一つの例示的な実施形態では、RAM101は、データキャッシュ101Aとしても示される第1のメモリ部分と命令キャッシュ101Bとして示される第2の部分とを備えていてよい。例えば、RAM101は、高性能な集積回路において典型的に求められるような、CPU100の全体的な性能を高めるための高速メモリ技術によって実現され得る。しかしながら、CPU100の初期化の間における外部からのアクセスの可能性なしにCPUコア102を介したメモリ101の直接制御が達成可能である限りにおいて、任意の適切なメモリ技術がメモリ101に対して使用可能であることは理解されるべきである。
また、CPU100は、任意の適切なメモリ技術において、例えばフラッシュメモリの形態で又は任意の他のリードオンリメモリ技術において提供され得る不揮発性メモリ103を備えていてよく、不揮発性メモリ103は、メモリ103の内容を改変するための外部アクセスを可能にしなくてよい。それ故に、メモリ103は安全なメモリ領域(secure memory area)とみなしてよく、従ってその内容は信頼性の静的ルートを提示することができる。この目的のために、CPUコア102により実行可能な命令及びそれら命令のオペランド等を表すデータ値として理解されるべき一連のデータ103Aが、メモリ103の少なくとも一部分、すなわちメモリ103の当該部分が一旦プログラムされたら新たなデータで上書きすることのできない部分に設けられている。一連のデータ103Aが収容されているメモリ103は、電源投入又はリセットに際してメモリの規定アドレスへのジャンプが実行されるように、バスシステム104によってCPUコア102に接続されていてよい。従って、CPUコア102のリセットベクタのための「ハードウエア組み込み」目標(“hard-wired” target)が、少なくとも電源投入イベント及びリセットイベントに対して命令の実行が安全なメモリ103から開始されることを確実にするために設けられていてよい。
CPU100のための特定のデバイスアーキテクチュアに従ってトランジスタ要素、キャパシタ、抵抗等を形成可能なCMOSプロセス等のような考慮中の技術に基いて形成される複数の回路要素を、半導体基板等の適切なキャリア材質で支えることができる高度な半導体製造技術に基いて、CPU100が形成可能であることは理解されるべきである。従って、ここで例示される実施形態では、CPU100の種々の構成部品は、共通の製造処理フローを経て共通の基板上に形成することができ、それによりメモリ101及び103は、デバイス100の内部の又は一体的な構成部品として提供され得る。例えば、それぞれの製造技術は十分に確立されており、揮発性且つ高速のメモリセルは、CPUコア102で必要とされるであろう不揮発性メモリセル及び高性能論理ゲートと共に形成可能である。また、一連のデータ103Aが収容されるメモリ103又は少なくともその一部をプログラミングした後には、データビットを変更するためのそれ以降のアクセスを阻み、データセット103Aのための保護された環境が提供され得るように、適切なメカニズムが設けられていてよい。
図1bは既に説明したような一連のデータ103Aのための保護された環境を提供するCPU100を備えたコンピュータシステム150を模式的に示しており、図示された実施形態では、CPU100はデータキャッシュ101A及び命令キャッシュ101Bの形態にあるランダムアクセスメモリ101を備えていてよく、ランダムアクセスメモリ101(データキャッシュ101A)は、起動情報の一部に適合し且つデータセット103Aの命令を実行するときに「システムRAM」として作動するように例えば64kBのサイズを有していてよい。同様に命令キャッシュ101Bは64kBのサイズで設けられていてよく、照合処理の間メモリ101から実行されることになる起動情報の該当する部分のサイズに適合する他の適切なメモリサイズが用いられてよいことは理解されるべきである。同様に、内部不揮発性メモリ103は、コンピュータシステム150用の測定のための信頼性のコアルートを提示するデータ103Aに対する要求に適合するように、任意の適切なサイズ、例えば32kを備えていてよい。例えば、一連のデータ103Aは、照合処理を実行するのに起動情報の該当する部分を内部メモリ101に取り込む(load)ための安全なロードルーチンを提示する命令及びデータ値を備えていてよい。また、一連のデータ103Aは、起動情報の署名された部分をメモリ101内で照合可能にするために、非対称暗号化/復号化アルゴリズムの公開鍵を提示する一つ以上の復号鍵を備えていてよい。データセット103Aにおける公開鍵の数が、例えば高度な完全性等を有するそれぞれの鍵ペアを提供するための適切な基盤を維持することを考慮した安全性の考察に従って選択されてよいことは理解されるべきである。
コンピュータシステム150は、ダイナミックRAMセル等のランダムアクセスメモリセルを含む例えば任意の適切なメモリデバイスの形態のシステムメモリ110を更に備えていてよい。システムメモリ110のサイズは、性能及び記憶能力を考慮したシステム150の要求に適合していてよい。また、システム150は、BIOS情報とも称される情報を収容することができるフラッシュメモリ等の不揮発性メモリ120を備えていてよく、少なくともその一部は署名部分であり、即ち、署名部分は暗号化メカニズムと組み合わされる適切なハッシュ(hash)アルゴリズムに基いて得られる署名を備えていてよく、そのために、前述したように一つ以上の適切な暗号鍵が一連のデータ103Aに含まれていてよい。
一つの例示的な実施形態では、不揮発性メモリ120は二つの部分、即ち第1の部分及び第2の部分に分割される起動情報を収容していてよく、第1の部分は、システムメモリ110等の他のシステム構成要素を初期化するためのデータ及び命令を備えていてよく、他のシステム構成要素は、起動情報の第2の部分を収容可能であって、CPU100により提供される保護された環境に基いて第1の部分がひとたび照合されたら第2の部分を実行するためのものである。不揮発性メモリ120内の起動情報の更に詳細な構成は、図1c及び1dを参照しながら後で説明する。
コンピュータシステム150は、システムメモリ110及び不揮発性メモリ120をCPU100と動作的に接続するように構成されたインタフェースシステム140を更に備えていてよい。一つの例示的な実施形態では、システム150は、例えば起動ソース及び関連するパラメータに関するプラットフォーム固有の情報を収容可能な1回書き込み可能メモリ130を更に備えていてよい。例えば、図示されるように、1回書き込み可能メモリ130は、内部メモリ103から起動するか否かをCPU100に対して示すために、起動オプションに関する情報を備えていてよい。また、メモリ130内に設けられたセキュリティビットは、リセット後のCPU100の初期命令取り込み(initial instruction fetch)が何処に根ざしているかを決定する個別のビットを含んでいてよい。例えば、このビットが「1」にセットされると、実行は内部メモリ103に移され、それにより安全な起動処理が可能になる。幾つかの例では、開発/デバッグの目的のために安全な起動機能を無効にすることが望ましいことがある。他の例では、プラットフォームの要求に応じて、信頼されたプラットフォームセキュリティ特性を無効にし又はバイバスすることが望ましいこともある。この場合、このビットの状態の変化が安全な起動処理の間に許容可能でなくてよい。この目的のために、全てのデバッグモード(JTAG、…)は少なくとも起動時の間は無効にされる。それぞれのデバッグモードを無効にした後に安全な起動処理は実行されてよく、そのことは後で更に詳しく説明する。同様にメモリ130は安全な起動処理の間にデバッグ特性を制御するためのビットを含んでいてよく、それにより開発期間には有利なものとなるが、製品においてはデバッグ特性の当該制御は無効にされることとなる。これらのセキュリティビットに加えて、メモリ130は、他の情報、例えばデジタル著作権管理アプリケーション等に使用可能であろう製造供給元識別又は任意の固有番号を備えていてよい。他の例示的な実施形態では、1回書き込み可能メモリ130は、省略されてよく又は開発及び実際の適用に際しての安全な起動処理を制御する他の情報を収容するように設けられてよいことが理解されるべきである。
図1cは不揮発性メモリ120に記憶されていてよい起動情報121の構成を模式的に示している。図1cに示される実施形態では、BIOSとも称されることのある起動情報121は、前述したようにメモリ101のサイズに適合するサイズを有する命令及びデータ値を含む一連のデータを表してよい第1の部分121Aを備えていてよい。例えば、RAM領域101A、101Bの各々のための上述した例示的な所定値64kBに対して、第1の部分121Aの最大サイズは概ね32kBに制限されてよい。しかしながら、RAM101の範囲内における利用可能な記憶容量に応じて第1の部分121Aの他の適切なサイズが適用可能であることは理解されるべきである。また、典型的な起動ルーチンは数百kByte以上のサイズを有することがあるので、起動情報121がメモリ101のサイズを超えてしまい起動処理の全部がメモリ101に基いて実行することができなくなるような起動情報121に対して第1の部分121Aを備えることが必要になり得ることも理解されるべきである。他の例では、十分な記憶スペースが利用可能である場合には、起動情報121全体が安全な起動処理の間に用いられてよく、このことは後で更に詳細に論ずる。
このように、図1cに示されるように第1の部分121Aが設けられている場合には、第1の部分121Aは第2の部分121Bに対する初期BIOS「ローダ」(BIOS “loader”)として機能し、第1の部分121Aはその内部に第2の部分121Bについて得られたハッシュ値を含んでいてよい。第2の部分121Bについてのハッシュ値もまた、第1の部分121Aに含まれる署名によって、第1の部分121Aに対して得られたハッシュ値に基いて保護されていてよく、そのハッシュ値は専用の信頼性センター(trust center)において得られたものであってよい。このように、第2の部分のハッシュ値の暗号化は必要でないかもしれない。第1の部分121Aに対するハッシュ値の署名は、安全な起動処理の間に第1の部分121Aを照合するために用いられてよい。従って、第1の部分121Aは、必要とされるプラットフォーム初期化活動、例えばメモリ制御器等の初期化を実行するように構成されてよく、その初期化に次いで第2の部分121Bはメモリ120から初期化されたシステムメモリ110へと隠される。
第1の部分121Aの実行に際しては、システムメモリ110に複写されたイメージ121Bに対してもハッシュ値が計算されてよく、そのハッシュ値は次いで第1の部分121Aに当初含まれていたハッシュ値と比較されてよい。このように、第2の部分121Bの完全性は、第1の部分121Aに含まれるハッシュ値に基いて照合することができ、それにより完全性の信頼された連鎖が提供される。従って、図1cに示されるように、第1の部分121Aは、適切な信頼できる環境に基き適切な信頼性センターにおいて遂行され得る署名を得るように処理されてよい。この目的のために、安全なハッシュアルゴリズムを適用して、例えばhash0、hash1、hash2と示される一つ以上のハッシュ値を適切な制御データと共に提供することができる。その後、任意の適切な暗号化技術、例えば適切な私有鍵を利用したRSA(リベスト(Rivest)、シャミア(Shamir)、エーデルマン(Adelman))アルゴリズムが用いられてよく、それにより図1cの右側に示されるように暗号化されたハッシュ値を得ることができる。前述したように、適切な数の公開鍵がデータセット103Aに含まれていてよく、それにより図1cに示されるシーケンスの間に創出された署名又は暗号化されたハッシュ値の復号化が可能になる。
図1dは、システム150の起動時にデータセット103Aに基いて実行されてよい、第1の部分121Aに含まれる署名の照合のためのシーケンスを模式的に示している。照合は、例えば公開鍵を用いるRSAアルゴリズムに基いて達成可能であり、それによりhash0、hash1、hash2等の最初に創出されたハッシュ値を得ることができる。それらの最初に創出されたハッシュ値は、次いで、RAMメモリ101に複写されている第1の部分121Aについて適切なハッシュアルゴリズムを適用することにより得られるであろうそれぞれのハッシュ値と比較されてよい。もし算出されたハッシュ値が図1dの左側に示されるように第1の部分121Aにおける署名を復号化して得られた最初に生成されたハッシュ値と一致すれば、第1の部分121Aは照合されたとみなしてよい。
図1e及び1fを参照して、例示的な実施形態に従うシステム150の動作を安全な起動処理の間について更に詳細に説明する。前述したように、安全なプラットフォームを提供することを考慮すると、考慮中のコンピュータシステムの電源投入又はリセット後におけるオペレーティングシステムの安全な起動を可能にするためには、信頼性の静的ルートが実装されていなければならないであろう。この目的のために、いかなる外部操作に対しても十分な耐性のある信頼された一連のデータ103Aに基いて少なくとも第1の部分121Aを照合することにより、信頼されたBIOS情報121の規定の実行が達成され得る。このように、システムが起動するたびに安全な起動処理が開始され、暗号化法を用いることによって、当初のハードウエア及びソフトウエアの構成についての完全性の照合を達成することができる。従って、起動情報121、即ち図示された実施形態では部分121A、121Bの完全性を照合するときに、起動処理の全体の完全性を確認することができ、それにより、次いで安全性に敏感なアプリケーションを実行するために用いられるであろうオペレーティングシステムの信頼に足る初期化が可能になる。一方、例えば部分121A又は121Bの照合の間における完全性の試験が不合格であれば、例えばシステムにより提供されるサービスを制限し、あるいは他の例示的な実施形態では起動処理を実際上無効にするような適切な指針が適用される。
このように、ここで開示される安全な起動アーキテクチャは、与えられたセキュリティシステムのあらゆる状況に対して作用する攻撃として理解されるべき「クラスブレイク(class breaks)」から保護することができる。例えば、外部ソースで生成された一片のソフトウエアが、インストールが容易で且つセキュリティ/保護の測定の回避を可能にし、それによりプラットフォームの権限のない使用を可能にしてしまうクラスブレイクであると考えられることがある。デジタル著作権管理(DRM)の環境においては、DRM保護されたデータファイルが一旦破られればクラスブレイクは既に与えられている可能性があり、保護されていないファイルの再配布が可能になってしまう。そこで、ここに開示されているメカニズム及びシステムによれば、CPUそれ自体の内部の集積化部分に基いて保護された環境を得ることができ、それによりCPUそれ自体の操作を必要とし、あるいは起動情報を署名し秘密鍵を維持するための基盤におけるそれぞれの欠陥を必要とし、いずれの場合においても時間的金銭的に多大なる労力が必要になるであろうから、クラスブレイクに関する安全性の強化が可能になる。
図1eはシステム150の動作について説明するためのフローダイアグラムを模式的に示している。ステップS100では、システム150がリセットされてよく、あるいは電力がシステム150に供給されてよく、あるいは安全な起動処理を必要とするであろう他のイベントが生じてよい。その結果、適切な自己診断(self-test)がCPUコア102によって実行されてよく、レジスタ等のそれぞれの部品が初期化されてよい。幾つかの実施形態では、安全な起動処理が有効にされずにオペレーティングシステムの動作状態がシステム150の管理下に留まっていてよいことは理解されるべきである。ステップS110では、内部不揮発性メモリ103を対応するリセットベクタアドレスにマッピング(mapping)することで取得可能な第1の命令が内部不揮発性メモリ103から取り込まれる。その結果、リセットベクタへのジャンプが任意の外部イベントに起因する場合にはいつでもCPU100は安全なデータセット103Aに基いて実行を開始する。ステップS120では、データセット103Aに含まれる命令の実行により内部ランダムアクセスメモリ101が初期化されてよい。ステップS130では、起動情報121の少なくとも一部、例えばその署名を含む第1の部分121Aが内部ランダムアクセスメモリ101に読み込まれてよい。ステップS140では、データセット103A内に含まれる復号化鍵を用いることにより、起動情報121又はその第1の部分121Aの完全性が照合されてよい。
即ち、メモリ101を初期化した後に起動情報121又は少なくとも第1の部分121Aに対する署名チェックが開始される。この目的ために、幾つかの実施形態では、起動情報121又はその第1の部分121Aに対する一つ以上の署名がスキップされ得るSHA1等の安全なハッシュアルゴリズムに基いてハッシュ値が計算されてよい。更に、1回書き込み可能メモリ130に収容される製造供給元識別のような付加的情報が場合によっては用いられてよく、また一つ以上のハッシュ値を計算するために含まれていてよい。一つ以上の計算されたハッシュ値は、次いで、図1bを参照して既に説明したように、データ121又は121Aの専用の場所に含まれる一つ以上のハッシュ値と比較されてよい。そのために、一つ以上の署名からのハッシュ値が、当初のハッシュ値を得るために、データセット103Aに含まれる公開復号化鍵を用いて検索(retrieve)されてよい。計算されたハッシュ値及び当初のハッシュ値の両方が一致する場合には、起動情報121又はその第1の部分121AはステップS150で信頼できるものとみなされ、起動処理はステップS160で継続される。ステップS150で完全性チェックが不合格の場合には、ステップS170において対応する起動障害が表示されてよく、一つの実施形態では、起動処理を終了すること及び対応するエラーコードを発行することを伴ってよい。
上述した実施形態では、起動情報121又はその第1の部分121Aでの実行に移る前に、安全な起動処理、即ちステップS100乃至S150で表される処理フローは、システム150のどの構成部品に対してもいかなるリセット手続きをも適用しないので、システム150のハードウエア構成の信頼できる「測定」が可能である。
図1fは他の例示的な実施形態に従う安全な起動処理を模式的に示している。図示されるように、ステップS101では、安全な起動処理が有効にされているか否かが決定されてよい。メモリ130に含まれるそれぞれのセキュリティビットをセットすることにより、該当する表示が得られる。ステップS100により、前述したように不揮発性メモリ103から実行が開始される。ステップS102では、例えば出力ポートを適切に設定するために状態情報が供給されてよい。例えばステップS102では、内部自己診断の間に安全な起動処理が開始されることが表示されてよい。ステップS120では、システム150と特にCPU100とが初期化されてよく、ステップS120は例えば一つ以上のステップS121乃至S129を備えていてよい。例えばステップS121では、本当に最初の命令が確実にメモリ103から取り込まれるようにするために、メモリ103のアドレスが適切に再配置されてよい。ステップS122では起動ソースが検出されてよく、起動ソースはステップS123で初期化されてよい。また、メモリ101、即ちデータキャッシュ101A及び命令キャッシュ101BはステップS124、S125において初期化されてよく、ステップS126ではデータキャッシュのための非現実(unreal)モードがセットアップされてよい。更に、起動情報121又はその第1の部分121Aのイメージがデータキャッシュ101Aに複写されてよく、ステップS128ではデータキャッシュ101Aにおける変数に対して記憶スペースが割り当てられてよい。最後にもし必要であればステップS129において製造供給元識別が検索されてよい。
ステップS141において起動情報121又はその第1の部分121Aが読まれ、ステップS142においては、最初のハッシュ値を得るために該当するハッシュアルゴリズムが実行されてよい。ステップS143では、前回読まれたデータブロックが最後のブロックであったか否かが決定される。もし否であれば、処理フローはステップS141に戻り更なるデータブロックが読み込まれ、続いてステップS142でハッシュ値が計算されると共に前回得られた値が更新される。ステップS143で最後のブロックが読まれると、ステップS144では算出されたハッシュ値が記憶され、ステップS145にてデータ121又は121Aの関連する部分が読まれて、そこに含まれる署名が得られる。例えば、この目的のために情報121又はその部分121Aのヘッダブロックが用いられてよい。ステップS146では一つ以上の署名が読み出され、ステップS147では、ステップS146で得られた署名を復号化するために一つ以上の公開鍵が適用される。ステップS150では、ステップS144で記憶された単一又は複数のハッシュ値がステップS147を実行して得られた元のハッシュ値と比較され、それによりデータ121又は121Aが信頼に値するものか否かを決定することができる。
ステップS150でハッシュ値が一致すれば、前回初期化された命令キャッシュは起動データ121又は121Aで更新されてよく、それらはデータキャッシュ101Aにその時点で収容されているものであるから、その内部の起動データが照合される。ステップS162では安全な起動処理の状態が表示されてよく、最終的にはステップS163において命令キャッシュからの命令を実行することで起動が継続されてよく、その命令には、例えば、システムメモリ110の初期化と、起動データ121の任意の残りの部分、例えば第2の部分121Bを検索することと、それらの完全性を、ハッシュ値を算出し算出されたハッシュ値を第1の部分121Aに含まれる元のハッシュ値と比較することにより照合することとが含まれる。ステップS150で完全性が確認されない場合には、ステップ171で対応する状態情報(例えば0xCD)が提供されてよく、一つの実施形態ではステップS172において実行が終了してよい。
その結果、ここに開示されるシステム及びメカニズムは、不揮発性メモリに収納される起動前ルーチンであって、不揮発性メモリにデータが一旦プログラムされたら上書きすることのできない起動前ルーチンに基いて、安全な起動処理を提供することによって、コンピュータプラットフォームの強化された完全性を提供する。不揮発性メモリはCPUそれ自体の一部であるから、署名された起動情報又は少なくとも起動情報の署名された部分に適用されてよい適切な復号化鍵をも収容するその不揮発性内部メモリに記憶された起動前情報に基いて、システムの初期化を完遂することができる。起動情報又はその一部に対する適切なハッシュ値を算出するための処理及び起動情報内に暗号化された形態で記憶されている当初創出された値との比較は、CPUの内部ランダムアクセスメモリを用いて達成することができるので、外部からのアクセスの可能性、ひいてはシステム構成の操作の可能性を阻むことが可能になる。従って、内部に記憶された起動前情報は、システム初期化の間に測定のための信頼性のコアルートとして用いることができる。
以上開示された特定の実施形態は例示にすぎず、本発明は改変されてよく、また、ここでの示唆の利益を享受する当業者に明らかな、均等であるが異なるやり方で実施されてよい。例えば、上述した処理ステップは異なる順序で実行されてよい。また、以下の特許請求の範囲に記載されていることを除き、ここで示されている構成又は設計の詳細に限定することは意図されていない。従って、以上開示された特定の実施形態が変更され又は修正されてよく、そのような全ての変形が本発明の精神及び範囲内にあるものとみなされることは明らかである。従って、ここでの保護の対象は以下の特許請求の範囲に記載された通りである。