(57)【要約】【課題】信頼だけでなくソフトウェア機能においても連続性を提供するように、信頼されるソフトウェアを更新または変更する改良された方法を提供する。【解決手段】本発明にかかるコンピュータプラットフォームの状態の証拠を提供する方法は、プラットフォームの状態の第１のデータ構造体を測定して提供することと、プラットフォームの状態の証拠として第１の測定された状態を使用することと、プラットフォームにおいて第１のデータ構造体を第２のデータ構造体と交換することと、プラットフォームの状態を、第２のデータ構造体によって交換された第１のデータ構造体で測定し、第２の測定された状態を提供することと、第２の測定された状態が第１の測定された状態と同様に信頼できることを検証することと、コンピュータプラットフォームの状態の証拠として、第１の測定された状態の代わりに第２の測定された状態を用いることとを含む。【選択図】  図７
2008535049.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータプラットフォームの状態の証拠を提供する方法であって、
前記コンピュータプラットフォームの状態を測定することであって、前記コンピュータプラットフォームの第１のデータ構造体の測定を含み、第１の測定された状態を提供することと、
前記コンピュータプラットフォームの前記状態の証拠として、前記第１の測定された状態を使用することと、
前記コンピュータプラットフォームにおいて、前記第１のデータ構造体を第２のデータ構造体と交換すること、
前記コンピュータプラットフォームの前記状態を、前記第２のデータ構造体によって交換された前記第１のデータ構造体で測定し、第２の測定された状態を提供することと、
前記第２の測定された状態が前記第１の測定された状態と同様に信頼できることを検証することと、
前記コンピュータプラットフォームの状態の証拠として、前記第１の測定された状態の代わりに前記第２の測定された状態を用いることと
を含む方法。
【請求項２】
前記コンピュータプラットフォームは、
破壊から保護されているトラステッドデバイス
を備え、前記測定するステップ、
前記検証するステップおよび前記代わりに用いるステップは、前記トラステッドデバイスによって実行される
請求項１に記載の方法。
【請求項３】
前記トラステッドデバイスは、１つ以上のプラットフォーム構成レジスタであって、
現在のプラットフォーム構成レジスタ値を測定データと連結し、その結果をハッシュし、前記現在のプラットフォーム構成レジスタ値を前記ハッシュされた結果と交換することにより測定値が置かれる１つ以上のプラットフォーム構成レジスタ
を備え、
前記第１の測定された状態は、前記第１のデータ構造体のプラットフォーム構成レジスタ値から導出され、
前記第２の測定された状態は、前記第１のデータ構造体を前記第２のデータ構造体によって交換した後のプラットフォーム構成レジスタ値から導出され、
前記検証するステップは、
前記第１のデータ構造体の前記プラットフォーム構成レジスタ値が、該第１のデータ構造体を前記第２のデータ構造体によって交換した後の前記プラットフォーム構成レジスタ値に関係していることを判断すること
を含む
請求項２に記載の方法。
【請求項４】
前記第１の測定された状態および前記第２の測定された状態それぞれは、
複数のプラットフォーム構成レジスタから導出された値
を備え、
前記検証するステップは、
前記第１の測定された状態値が前記第２の測定された状態値に関係していることを判断すること
を含む
請求項３に記載の方法。
【請求項５】
前記値は、前記複数のプラットフォーム構成レジスタの前記値を連結してハッシュすることにより、それらのプラットフォーム構成レジスタから導出される
請求項４に記載の方法。
【請求項６】
前記トラステッドデバイスは、プラットフォーム構成レジスタ値の或るシーケンスが、プラットフォーム構成レジスタ値の別のシーケンスと同等の信頼性を有することを確立する
請求項３に記載の方法。
【請求項７】
前記証拠は、
前記コンピュータプラットフォームの前記測定された状態の現在の値が前記測定された値に対応する場合にのみ、前記測定された状態から導出された値に対してシールされている（seal）データにアクセスできるように、前記測定された状態から導出された値に対してシールされているデータ
を備える
請求項１〜６いずれかに記載の方法。
【請求項８】
前記第２のデータ構造体は、複数のデータ構造体である
請求項１〜７のいずれかに記載の方法。
【請求項９】
前記第２のデータ構造体はヌルデータ構造体である
請求項１〜７のいずれかに記載の方法。
【請求項１０】
前記第１のデータ構造体および前記第２のデータ構造体それぞれは、
共通の機能上の目的で提供される第１のソフトウェアおよび第２のソフトウェア
を備える
請求項１〜９のいずれかに記載の方法。
【請求項１１】
前記第２のソフトウェアは、前記第１のソフトウェアよりも信頼性が高い
請求項１１に記載の方法。
【請求項１２】
前記第１の測定された状態および前記第２の測定された状態は、前記第１のソフトウェアのダイジェストおよび前記第２のソフトウェアのダイジェストそれぞれを備えるか、または、前記第１のソフトウェアのダイジェストおよび前記第２のソフトウェアのダイジェストそれぞれから導出されるかし、
前記検証するステップは、
前記第２のソフトウェアの前記ダイジェストが前記第１のソフトウェアの前記ダイジェストに関係していることを判断すること
を含む
請求項１０または１１に記載の方法。
【請求項１３】
前記第１のソフトウェアの前記ダイジェストと前記第２のソフトウェアの前記ダイジェストとの間の前記関係は、トラステッドソフトウェアプロバイダによって構成証明された（attest）ステートメントにより提供され、
前記検証するステップは、
前記ステートメントを検証すること
を含む
請求項１２に記載の方法。
【請求項１４】
前記第１のデータ構造体および前記第２のデータ構造体それぞれは、
共通の目的で提供される第１の鍵および第２の鍵
を備える、
請求項１〜９のいずれかに記載の方法。
【請求項１５】
前記第１のデータ構造体および前記第２のデータ構造体それぞれは、
共通の目的で提供される第１の鍵および第２の鍵
を備え、
前記共通の目的は、前記トラステッドデバイスの構成証明（attestation）鍵としての目的である
請求項２に記載の方法。
【請求項１６】
破壊から保護されているトラステッドデバイスを備えるコンピュータプラットフォームであって、このコンピュータプラットフォーム上のデータ構造体を測定して保証し、
前記トラステッドデバイスは、前記コンピュータプラットフォーム上の第１のデータ構造体が、第２のデータ構造体により交換されるときに、前記第２のデータ構造体が前記第１のデータ構造体と同様に信頼できることを判断する
コンピュータプラットフォーム。
【請求項１７】
前記トラステッドデバイスは、前記第１のデータ構造体または前記第２のデータ構造体に関する測定を含む測定から、前記コンピューティングプラットフォームの状態を測定する
請求項１６に記載のコンピュータプラットフォーム。
【請求項１８】
前記トラステッドデバイスは、
現在のプラットフォーム構成レジスタ値を測定データと連結し、その結果をハッシュし、前記現在のプラットフォーム構成レジスタ値を前記ハッシュされた結果と交換することにより測定値が置かれる１つ以上のプラットフォーム構成レジスタ
を備え、
前記トラステッドデバイスは、前記第１のデータ構造体に関する測定を含む測定によって求められたプラットフォーム構成レジスタ値により表される第１のプラットフォーム状態が、前記第２のデータ構造体に関する測定を含む測定によって求められたプラットフォーム構成レジスタ値により表される第２のプラットフォーム状態と同等であるときを判断する
請求項１７に記載のコンピュータプラットフォーム。
【請求項１９】
前記トラステッドデバイスは、プラットフォーム状態の証拠を提供する
請求項１７または１８に記載のコンピュータプラットフォーム。
【請求項２０】
前記トラステッドデバイスは、測定されたプラットフォーム状態から導出された値に対してデータをシールして、前記プラットフォーム状態の現在の値が前記測定された値に対応するときにのみ、前記データにアクセスできる
請求項１７〜１９のいずれかに記載のコンピュータプラットフォーム。
【請求項２１】
前記第１のデータ構造体は、
第１のソフトウェア
を備え、
前記第２のデータ構造体は、
第２のソフトウェア
を備え、
前記第１のソフトウェアおよび前記第２のソフトウェアそれぞれは、共通の機能上の目的で提供され、これらの機能は一致している
請求項１６〜２０のいずれかに記載のコンピュータプラットフォーム。
【請求項２２】
前記トラステッドデバイスは、トラステッドソフトウェアプロバイダによって構成証明されたステートメントを検証することにより、前記ステートメントから、機能的な一致および信頼を判断する
請求項２１に記載のコンピュータプラットフォーム。
【請求項２３】
識別されたソフトウェアのアップグレード品または交換品を提供する方法であって、
前記アップグレード品または交換品について、前記ソフトウェアの性質を示すステートメント、および、前記アップグレード品または交換品が前記識別されたソフトウェアと同様に信頼できることの証明を判断することと、
前記アップグレード品または交換品に前記ステートメントを提供することと
を含む方法。
【請求項２４】
前記証明は、
前記アップグレード品または交換品のトラステッドプロバイダからの構成証明
を含む
請求項２３に記載の方法。
【請求項２５】
前記証明は、
前記識別されたソフトウェアに関するステートメントのリンクリストの一部として前記ステートメントを識別すること、および、前記リンクリストが有効なリンクリストであることを検証すること
を含む
請求項２３または２４に記載の方法。
【請求項２６】
第２のステートメントを提供すること
をさらに含み、
前記ステートメントは、
前記アップグレードソフトウェアまたは交換ソフトウェアの１つ以上のダイジェスト、または、ダイジェストから導出されたデータ
を含み、
前記第２のステートメントは、
前記１つ以上の第１のダイジェストを除く前記ソフトウェアの性質の同じ表示および前記アップグレード品または交換品が前記識別されたソフトウェアと同様に信頼できることの証明
を前記ステートメントとして有する
請求項２３〜２５のいずれかに記載の方法。
【請求項２７】
データ構造体タイプの識別情報と、
前記データ構造体タイプの２つ以上のインスタンスが互いに同様に信頼できることの証明と
を備えるデータ構造体。
【請求項２８】
前記証明は、
前記アップグレード品または交換品のトラステッドプロバイダからの構成証明
を含む
請求項２７に記載のデータ構造体。
【請求項２９】
前記証明は、
前記識別されたデータ構造体タイプに関するステートメントのリンクリストの一部として前記ステートメントの識別情報
を備える
請求項２７または２８に記載のデータ構造体。
【請求項３０】
前記データ構造体は、
前記データ構造体タイプのインスタンスの１つ以上のダイジェスト、または、ダイジェストから導出されたデータ
をさらに備える
請求項２７〜２９のいずれかに記載のデータ構造体。
【請求項３１】
前記データ構造体は、
前記データ構造体タイプのインスタンスのダイジェストおよびダイジェストから導出されたデータ以外
を備える
請求項２７〜３０のいずれかに記載のデータ構造体。
【請求項３２】
一対のデータ構造体であって、
前記データ構造体それぞれは、
前記データ構造体タイプのインスタンスのダイジェストおよびダイジェストから導出されたデータ以外の前記データ構造体タイプのインスタンスの１つ以上のダイジェスト、または、ダイジェストから導出されたデータ
を備え、
前記データ構造体は、
データ構造体タイプの同じ識別情報と、
前記データ構造体タイプの２つ以上のインスタンスが互いに同様に信頼できることの証明と
を有する
一対のデータ構造体。
【請求項３３】
請求項２７〜３２のいずれか１項に記載のデータ構造体または一対のデータ構造体であって、
前記データ構造体タイプは、同等の機能のソフトウェアである
データ構造体または一対のデータ構造体。
【請求項３４】
請求項２７〜３２のいずれか１項に記載のデータ構造体または一対のデータ構造体であって、
前記データ構造体タイプは鍵である
データ構造体または一対のデータ構造体。
【請求項３５】
破壊から保護されているトラステッドデバイスを備えるコンピューティングプラットフォーム上の完全性メトリックを提供する方法であって、
請求項２７〜３４のいずれかに記載のデータ構造体の少なくとも一部を測定することと、
前記測定を前記トラステッドデバイスに記録することと
を含む方法。
【請求項３６】
前記トラステッドデバイスは、
１つ以上のプラットフォーム構成レジスタであって、現在のプラットフォーム構成レジスタ値を測定データと連結し、その結果をハッシュし、前記現在のプラットフォーム構成レジスタ値を前記ハッシュされた結果と交換することにより測定値が置かれる、１つ以上のプラットフォーム構成レジスタ
を備え、
前記トラステッドデバイスは、プラットフォーム構成レジスタ値の或るシーケンスが、プラットフォーム構成レジスタ値の別のシーケンスと同等の信頼性を有することを確立する
請求項３５に記載の方法。
【請求項３７】
前記データ構造体は、データ構造体のリンクリストの一部を形成し、
前記測定するステップは、
前記リンクリストの最初のデータ構造体および最後のデータ構造体について、前記データ構造体の少なくとも一部を測定すること
を含む
請求項３５または３６に記載の方法。
【請求項３８】
データ構造体の部分的なリンクリストを提供することと、
前記部分的なリンクリストがデータ構造体の全リンクリストと同等の信頼性を有することを実証することと
をさらに含む請求項３７に記載の方法。
【請求項３９】
前記データ構造体が、
そのデータ構造体タイプの２つ以上のインスタンスが互いに同様に信頼できることの有効な証明であることの検証が成功したか否かを別々に記録すること
をさらに含む
請求項３５〜３８のいずれかに記載の方法。
【請求項４０】
コンピューティングプラットフォームによって使用されるソフトウェア状態を決定する方法であって、
前記コンピューティングプラットフォームにソフトウェア状態の表示を要求することと、
ソフトウェアプロバイダによって構成証明され、前記コンピューティングプラットフォームによって検証されたソフトウェアタイプの１つ以上の表示を受信することと
を含む方法。
【請求項４１】
ソフトウェアタイプの表示について、前記ソフトウェアタイプのインスタンスの複数のダイジェストまたはダイジェストの導出物を受信することによって、プライバシーが保護される
請求項４０に記載の方法。
【請求項４２】
ソフトウェアタイプの表示について、前記ソフトウェアタイプのインスタンスの複数のダイジェストも該ソフトウェアタイプのインスタンスから直接導出された他の資料も受信しないことによって、プライバシーが保護される
請求項４０に記載の方法。
【請求項４３】
コンピューティングプラットフォームがソフトウェア状態を報告するための方法であって、
前記コンピューティングプラットフォームのソフトウェア状態の表示の要求を受け取ることと、
ソフトウェアプロバイダによって構成証明され、前記コンピューティングプラットフォームによって検証されたソフトウェアタイプの１つ以上の表示を受信することと
を含む方法。
【請求項４４】
ソフトウェアタイプの表示について、前記ソフトウェアタイプのインスタンスの複数のダイジェストまたはダイジェストの導出物を提供することによって、プライバシーが保護される
請求項４３に記載の方法。
【請求項４５】
ソフトウェアタイプの表示について、前記ソフトウェアタイプのインスタンスのダイジェストも前記ソフトウェアタイプのインスタンスから直接導出された他の資料も提供しないことによって、プライバシーが保護される
請求項４３に記載の方法。
【請求項４６】
仮想トラステッドコンピューティングプラットフォームを第１のトラステッドコンピューティングプラットフォームから、第２のトラステッドコンピューティングプラットフォームへマイグレーションする方法であって、
前記第１のトラステッドコンピューティングプラットフォームおよび前記第２のトラステッドコンピューティングプラットフォームはそれぞれ、
破壊から保護されているトラステッドデバイス
を備え、
前記トラステッドコンピューティングプラットフォームのコンピューティング環境の態様を測定し、
前記仮想トラステッドコンピューティングプラットフォームは、
仮想トラステッドデバイスと、
前記仮想トラステッドデバイスが保護される仮想コンピューティング環境と
を備え、
前記仮想トラステッドプラットフォームの信頼は、前記仮想トラステッドプラットフォームをホスティングする前記トラステッドプラットフォームの前記トラステッドデバイスに起源を有し、
前記方法は、
前記第２のトラステッドコンピューティングプラットフォームがトラステッドコンピューティングプラットフォームであることを判断する、前記第１のトラステッドコンピューティングプラットフォームにおける第１のマイグレーションプロセスと、
前記仮想トラステッドプラットフォームのデータ構造体を、前記第２のトラステッドコンピューティングプラットフォームの特性で更新する前記第１のマイグレーションプロセスと、
前記仮想トラステッドプラットフォームの機密を、前記第１のトラステッドコンピューティングプラットフォームから前記第２のトラステッドコンピューティングプラットフォームへマイグレーションする前記第１のマイグレーションプロセスと、
前記仮想トラステッドを前記第２のトラステッドコンピューティングプラットフォームへ転送して、前記仮想トラステッドプラットフォームのオペレーションを再開することと
を含む方法。
【請求項４７】
前記第１のトラステッドコンピューティングプラットフォームおよび前記第２のトラステッドコンピューティングプラットフォームの少なくとも一方は、それ自体が仮想トラステッドコンピューティングプラットフォームである
請求項４６に記載の方法。
【請求項４８】
前記仮想トラステッドプラットフォームのデータ構造体を更新する前記プロセスは、請求項３５〜３９のいずれか１項に記載の方法に従って実行される、
請求項４６または４７に記載の方法。
【請求項４９】
コンピュータプラットフォームの状態の証拠を提供する方法であって、
前記コンピュータプラットフォーム上に存在する１つまたは２つ以上のデータ構造体を検証して、前記検証の証拠を取得することと、
前記１つ以上のデータ構造体の前記検証の前記証拠を、前記コンピュータプラットフォームの前記状態の証拠として提供することと
を含む方法。
【請求項５０】
前記１つ以上のデータ構造体は、
前記コンピュータプラットフォーム上で実行される１つ以上のプログラム
を備える
請求項４９に記載の方法。
【請求項５１】
前記１つ以上のデータ構造体は、
前記コンピュータプラットフォーム上で保持される１つまたは２つ以上のプログラム
を備える
請求項４９に記載の方法。
【請求項５２】
前記コンピュータプラットフォームは、破壊から保護されているトラステッドデバイスを備えるトラステッドコンピュータプラットフォームであり、
前記トラステッドデバイスは、データ構造体の前記検証並びに証拠の前記取得および提供を行う
請求項４９〜５１のいずれかに記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、少なくとも１つのトラステッドエンティティ（trusted entity）がデータを保証する準備ができているという意味で、信頼されるデータに関する。
本発明は、詳細には、ソフトウェアを備えるデータ（データ構造体や実行可能命令等）に関連し、実施の形態では、コンピューティングデバイスにおけるソフトウェアの更新または交換に関連している。
【背景技術】
【０００２】
コンピューティングエンティティ間の相互作用において考慮すべき重要な事項は、信頼である。
すなわち、異種コンピューティングエンティティが、信頼でき且つ予想可能な方法で振る舞うか否か、または、破壊を受けることがある（若しくはすでに受けている）か否かである。
破壊から少なくとも論理的に保護されているコンポーネントを含むトラステッドシステムは、トラステッドコンピューティンググループ（ＴＣＧ）を形成する企業によって開発されてきた。
この団体は、この分野の仕様を開発しており、このような仕様は、たとえば、Siani Pearsonによって編集された「Trusted Computing Platforms − TCPA Technology in Context」（2003, Prentice Hall PTR）に解説されている。
トラステッドシステムの暗黙的なトラステッドコンポーネントは、トラステッドシステムの測定を可能にし、さらに、トラステッドシステムとの相互作用を望む適切なエンティティに、完全性メトリックの形でこれらの測定を提供することができる。
受信エンティティは、その後、測定された完全性メトリックが既知の値または予測された値と一致することから、トラステッドシステムが予想通りに動作していると判断することができる。
【０００３】
完全性メトリックは、通常、トラステッドシステムによって使用されるソフトウェアの測定値を含む。
これらの測定は、通常、トラステッドシステムの状態、すなわちトラステッド状態（trusted state）を示すのに組み合わせて使用することができる。
トラステッドコンピューティンググループの仕様では、特定のプラットフォーム状態に対してデータを「シール」するためのメカニズムが教示されている。
これは、シールされているデータを暗号化して、プラットフォーム上のソフトウェアの測定値から少なくとも部分的に導出される値を含む不可解な「オペークブロブ（opaque blob）」にするという結果を有する。
ダイジェスト値は、ソフトウェアに対するあらゆる修正において変化するので、測定値は、ソフトウェアのダイジェストを備える。
このシールされているデータは、トラステッドコンポーネントが現在のプラットフォーム状態を測定し、現在のプラットフォーム状態がオペークブロブにおける値と同じ値によって表されることが分かった場合にのみ回復することができる。
【０００４】
ソフトウェアのどの変更によっても、この特定のプロセスおよびより一般的にはソフトウェアの測定がコンピュータシステムの状態を表すものとみなされる場合の双方に関して、多数の問題が引き起こされることが十分理解されよう。
ソフトウェアに対する変更がどんなに小さくても、測定の有効な形（ダイジェスト等）は、異なる値を与える。
上記「シール」の例では、これは、ソフトウェアに対する変更−これは、たとえば、機能の改良、または、バグおよび弱点の除去に全く望ましい場合がある−が、シールされているデータへの継続したアクセスを妨げるという不利な点を有することを意味する。
これは、１つの例示的な問題にすぎない。
しかしながら、新たなソフトウェアまたは交換ソフトウェアにおいて元のソフトウェアが有していたのと同じ信頼性を有することは、一般に困難である。
この一般的な困難さは、その信頼性に基づいて機能を維持することの実際的な付随した困難さを有する。
【特許文献１】米国特許出願公開第２００３／０３７２３１号
【特許文献２】米国特許出願公開第２００３／０５６１０２号
【特許文献３】米国特許出願公開第２００３／１９６０８３号
【非特許文献１】TRUSTED COMPUTING GROUP他, 「TCG Specification Architecture Overview passage」 TCG SPECIFICATION ARCHITECTURE OVERVIEW, TRUSTED COMPUTING GROUP, US, no. revision  12, 2004年4月28日 page complete, XP002352046
【発明の開示】
【発明が解決しようとする課題】
【０００５】
信頼だけでなくソフトウェア機能においても連続性を提供するように、信頼されるソフトウェアを更新または変更する方法を見つけることが望ましい。
【課題を解決するための手段】
【０００６】
一態様では、本発明は、データ構造体タイプの識別情報を含むデータ構造体、および、そのデータ構造体タイプの２つまたは３つ以上のインスタンスが互いに同様に信頼できるものであるという証明を提供する。
【０００７】
次に、添付図面に関して、本発明の好ましい実施の形態を専ら例としてのみ説明する。
【発明を実施するための最良の形態】
【０００８】
本発明の実施形態を説明する前に、本発明の実施形態を実行するのに一般に適しているタイプのトラステッドコンピューティングプラットフォームを図１〜図４に関して説明することにする。
トラステッドコンピューティングプラットフォームのこの説明は、その構成およびオペレーションの一定の基本要素を説明する。
この文脈における「ユーザ」は、リモートコンピューティングエンティティ等のリモートユーザとすることができる。
トラステッドコンピューティングプラットフォームは、２０００年２月１５日に出願された本出願人の「Trusted Computing Platform」という発明の名称の国際特許出願第ＰＣＴ／ＧＢ００／００５２８号にさらに説明されている。
この国際特許出願の内容は、参照により本明細書に援用される。
本発明は、そのオペレーションについて、以下で説明するようなトラステッドコンピューティングプラットフォームの使用に正確に依拠しないことが当業者に十分理解されよう。
すなわち、本発明の実施形態は、このようなトラステッドコンピューティングプラットフォームに関して説明されるが、本発明の態様は、トラステッドコンピューティンググループのトラステッドコンピューティングプラットフォームの機能のすべての態様を使用する必要がない異なるタイプのコンピュータプラットフォームと共に使用できることが当業者には十分理解されよう。
【０００９】
本明細書で説明する種類のトラステッドコンピューティングプラットフォームは、トラステッドデバイスが組み込まれるコンピューティングプラットフォームである。
このトラステッドデバイスの機能は、プラットフォームのアイデンティティを、プラットフォームの１つまたは２つ以上の完全性メトリックを提供する確実に測定されたデータにバインドすることである。
アイデンティティおよび完全性メトリックは、プラットフォームの信頼性を保証する準備ができているトラステッドパーティ（ＴＰ）によって提供される予測値と比較される。
一致する場合、それが意味するものは、プラットフォームの少なくとも一部が、完全性メトリックの範囲に応じて正常に動作しているということである。
【００１０】
ユーザは、他のデータをプラットフォームと交換する前にプラットフォームの正常なオペレーションを検証する。
ユーザは、トラステッドデバイスに、そのアイデンティティおよび１つまたは２つ以上の完全性メトリックを提供するように要求することによってこれを行う（オプションとして、トラステッドデバイスは、自身でプラットフォームの正常なオペレーションを検証できなかった場合にアイデンティティの証拠の提供を拒否する）。
ユーザは、アイデンティティの証明および１つまたは複数のアイデンティティメトリックを受信し、それらを、ユーザが真正であると信じる値と比較する。
それらの適切な値は、ＴＰまたはユーザによって信頼されている別のエンティティにより提供される。
トラステッドデバイスによって報告されるデータがＴＰによって提供されるデータと同じである場合、ユーザはプラットフォームを信頼する。
これは、ユーザがエンティティを信頼するからである。
エンティティは、前もって、アイデンティティを確認し、プラットフォームの適切な完全性メトリックを判断したので、プラットフォームを信頼する。
【００１１】
ユーザは、プラットフォームのトラステッドオペレーションを確立すると、他のデータをプラットフォームと交換する。
ローカルユーザの場合、この交換は、プラットフォーム上で実行される或るソフトウェアアプリケーションとの対話によるものとすることができる。
リモートユーザの場合、この交換は、安全なトランザクションを伴うことができる。
いずれの場合も、交換されたデータは、トラステッドデバイスによって「署名」される。
その後、ユーザは、データが、その振る舞いを信頼できるプラットフォームと交換されているというより大きな確信を有することができる。
交換されるデータは、コンピュータプラットフォーム上で実行されるソフトウェアの一部または全部に関する情報とすることができる。
既存のトラステッドコンピューティンググループのトラステッドコンピュータプラットフォームは、プラットフォーム上のソフトウェアのダイジェストを提供するように適合されている。
これらのダイジェストは、既知のソフトウェアの既知のダイジェストの公に利用可能なリストと比較することができる。
一方、これは、トラステッドコンピューティングプラットフォーム上で実行される特定のソフトウェアの識別情報を提供する。
これは、トラステッドコンピューティングプラットフォームの所有者にとってプライバシーの理由から望ましくない場合がある。
後述するように、本発明の態様は、トラステッドコンピューティングプラットフォームの所有者のこのプライバシーの立場の態様を改善するのに使用することができる。
【００１２】
トラステッドデバイスは、暗号プロセスを使用するが、必ずしも、それらの暗号プロセスへの外部インターフェースを提供しない。
トラステッドデバイスは、他のエンティティから論理的に保護されるべきである。
他のエンティティには、トラステッドデバイス自体がその一部であるプラットフォームの他の部分が含まれる。
また、最も望ましい一実施態様は、機密を他のプラットフォーム機能に対してアクセス不能にすることにより機密を保護し、認可されていない変更に対して実質的に影響を受けない（すなわち、物理的および論理的の双方で保護される）環境を提供するように、トラステッドデバイスをタンパープルーフにすることである。
タンパープルーフは不可能であるので、最も良い近似は、耐タンパ性を有するトラステッドデバイスまたはタンパリングを検出するトラステッドデバイスである。
したがって、トラステッドデバイスは、好ましくは、耐タンパ性を有する１つの物理コンポーネントから成る。
耐タンパ性に関連する技法は、セキュリティの当該技術分野の当業者に既知である。
これらの技法には、タンパリングに影響されない方法（トラステッドデバイスの適切なカプセル化等）、タンパリングを検出するための方法（指定電圧の範囲外の検出、Ｘ線の検出、またはトラステッドデバイスのケーシングにおける物理的な完全性の喪失の検出等）、およびタンパリングが検出される時にデータを削除するための方法が含まれる。
【００１３】
トラステッドプラットフォーム１０を図１の図に示す。
コンピュータプラットフォーム１０は、外見は、完全に従来通りである。
コンピュータプラットフォーム１０は、キーボード１４、マウス１６、および視覚表示ユニット（ＶＤＵ）１８の標準的な特徴を関連付けている。
これらの標準的な特徴は、プラットフォームの物理的な「ユーザインターフェース」を提供する。
【００１４】
図２に示すように、トラステッドコンピューティングプラットフォーム１０のマザーボード２０は、（他の標準コンポーネントの中でも特に）メインプロセッサ２１、メインメモリ２２、トラステッドデバイス２４、データバス２６および各制御ライン２７およびライン２８、プラットフォーム１０および入出力（ＩＯ）デバイス２３のＢＩＯＳプログラムを含むＢＩＯＳメモリ２９を含む。
入出力デバイス２３は、マザーボードのコンポーネントと、キーボード１４、マウス１６、およびＶＤＵ１８との間の相互作用を制御する。
メインメモリ２２は、通常、ランダムアクセスメモリ（ＲＡＭ）である。
動作時に、プラットフォーム１０は、たとえばＷｉｎｄｏｗｓ（登録商標）  ＸＰといったオペレーティングシステムをハードディスク（図示せず）からＲＡＭにロードする。
加えて、動作時に、プラットフォーム１０は、プラットフォーム１０が実行できるプロセスまたはアプリケーションをハードディスク（図示せず）からＲＡＭにロードする。
【００１５】
通常、パーソナルコンピュータでは、業界全体の標準に従って、ＢＩＯＳプログラムは、特別な予約メモリエリアである、システムメモリの最初の１メガバイトの上位６４Ｋ（アドレスＦ０００ｈ〜ＦＦＦＦｈ）に配置され、メインプロセッサは、このメモリロケーションを最初に見るように構成されている。
このプラットフォームと従来のプラットフォームとの間の大きな相違は、リセット後、メインプロセッサが、最初に、トラステッドデバイスによって制御され、次に、トラステッドデバイスが、制御をプラットフォーム特有のＢＩＯＳプログラムに引き渡し、次に、プラットフォーム特有のＢＩＯＳプログラムが、すべての入出力デバイスを通常通り初期化するということである。
ＢＩＯＳプログラムが実行された後、制御は、通常通り、ＢＩＯＳプログラムによってＷｉｎｄｏｗｓ（登録商標）  ＸＰ等のオペレーティングシステムプログラムに引き渡される。
オペレーティングシステムプログラムは、通常、ハードディスクドライブ（図示せず）からメインメモリ２１２にロードされる。
メインプロセッサは、最初は、トラステッドデバイスによって制御される。
その理由は、トラステッドプラットフォームコンピューティングにおいて実行される最初の測定を信頼することが必要だからである。
この最初の測定の測定エージェントは、測定の信頼ルート（root of trust of measurement）（ＲＴＭ）と呼ばれ、その出所が信頼されているので、通常、少なくとも部分的に信頼される。
実用的に有用な一実施態様では、ＲＴＭはプラットフォームである一方、メインプロセッサはトラステッドデバイスの制御下にある。
簡単に後述するように、ＲＴＭの１つの役割は、他の測定エージェントが使用されてそれらの測定値が信頼される前に、これらの他の測定エージェントを測定することである。
ＲＴＭは、信頼チェーンの基本である。
ＲＴＭおよび後続の測定エージェントは、後続の測定エージェントを検証する必要がなく、単に、それらの後続の測定エージェントが実行される前にそれらの後続の測定エージェントを測定して記録する必要があるだけである。
これは、「認証されたブートプロセス（authenticated boot process）」と呼ばれる。
測定エージェントのダイジェストを有効な測定エージェントのダイジェストのリストと比較することによって有効な測定エージェントを認識することができる。
リストに列挙されていない測定エージェントは認識されず、それらの測定エージェントによって行われた測定および後続の測定エージェントは疑わしい。
【００１６】
トラステッドデバイス２４は、図３に示すように、複数のブロックを備える。
システムリセット後、トラステッドデバイス２４は、認証されたブートプロセスを実行して、プラットフォーム１０の動作状態が安全な方法で確実に記録されるようにする。
認証されたブートプロセスの期間中、トラステッドデバイス２４は、コンピューティングプラットフォーム１０の完全性メトリックを取得する。
また、トラステッドデバイス２４は、自身とスマートカードとの間で暗号化／解読および署名／検証を介して、安全なデータ転送、および、たとえば認証も行うことができる。
また、トラステッドデバイス２４は、ユーザインターフェースのロック等、さまざまなセキュリティ制御ポリシーを安全に実施することもできる。
特に好ましい構成では、コンピューティングプラットフォームの表示ドライバは、トラステッドデバイス２４内に配置され、その結果として、ローカルユーザは、トラステッドデバイス２４によってディスプレイに提供されるデータの表示を信頼することができる。
これは、２０００年５月２５日に出願された本出願人の「System for Providing a Trustworthy User Interface」という発明の名称の国際特許出願第ＰＣＴ／ＧＢ００／０２００５号にさらに説明されている。
この国際特許出願の内容は、参照により本明細書に援用される。
【００１７】
具体的には、この実施形態のトラステッドデバイスは、コントローラ３０、測定機能３１、暗号機能３２、認証機能３３、およびインターフェース回路部３４を備える。
コントローラ３０は、トラステッドデバイス２４の全体オペレーションを制御し、且つ、トラステッドデバイス２４の他の機能およびマザーボード２０の他のデバイスと相互作用するようにプログラミングされている。
測定機能３１は、直接的な測定を介して、或いは、プラットフォームのメインプロセッサで実行される実行可能命令を介して間接的にプラットフォーム１０から第１の完全性メトリックを取得する。
暗号機能３２は、指定されたデータの署名、暗号化、または解読を行う。
認証機能３３は、スマートカードを認証する。
インターフェース回路部３４は、トラステッドデバイス２４を、マザーボード２０のデータバス２６、制御ライン２７、およびアドレスライン２８にそれぞれ接続するための適切なポート（３６、３７、および３８）を有する。
トラステッドデバイス２４のブロックのそれぞれは、トラステッドデバイス２４の適切な揮発性メモリエリア４および／または不揮発性メモリエリア３に（通常はコントローラ３０を介して）アクセスすることができる。
加えて、トラステッドデバイス２４は、既知の方法で、耐タンパ性を有するように設計されている。
【００１８】
性能の理由から、トラステッドデバイス２４は、特定用途向け集積回路（ＡＳＩＣ）として実装される場合がある。
しかしながら、柔軟性のために、トラステッドデバイス２４は、好ましくは、適切にプログラミングされているマイクロコントローラである。
ＡＳＩＣおよびマイクロコントローラの双方は、マイクロエレクトロニクスの当該技術分野で既知であり、本明細書では、これ以上詳細に検討しないことにする。
【００１９】
トラステッドデバイス２４の不揮発性メモリ３に記憶されている１つのデータアイテムは証明書３５０である。
証明書３５０は、トラステッドデバイス２４の少なくとも公開鍵３５１、および、トラステッドパーティ（ＴＰ）によって測定されるプラットフォーム完全性メトリックの認証値３５２を含む。
証明書３５０は、トラステッドデバイス２４に記憶される前に、ＴＰの私有鍵を使用してＴＰにより署名される。
後の通信セッションにおいて、プラットフォーム１０のユーザは、証明書のＴＰの署名を検証することによって、公開鍵がトラステッドデバイスに属することを推論することができる。
また、プラットフォーム１０のユーザは、取得された完全性メトリックを真正な完全性メトリック３５２と比較することによってプラットフォーム１０の完全性を検証することもできる。
一致する場合、ユーザは、プラットフォーム１０が破壊されていないことを確信することができる。
ＴＰの一般に利用可能な公開鍵を知ることによって、証明書３５０の簡単な検証が可能になる。
不揮発性メモリ３５は、識別（ＩＤ）ラベル３５３も含む。
ＩＤラベル３５３は、或る状況において一意である、たとえばシリアル番号といった従来のＩＤラベルである。
ＩＤラベル３５３は、一般に、トラステッドデバイス２４に関連するデータのインデックスおよびラベルに使用されるが、それ自体では、信頼されている状況下でプラットフォーム１０のアイデンティティを証明するには不十分である。
【００２０】
トラステッドデバイス２４は、関連付けられているコンピューティングプラットフォーム１０の完全性メトリックを確実に測定または取得する少なくとも１つの方法を備えている。
本実施形態では、第１の完全性メトリックは、ＢＩＯＳメモリにおけるＢＩＯＳ命令のダイジェストの生成を伴うプロセスで、測定機能３１によって取得される。
取得されたこのような完全性メトリックは、上述したように検証される場合、プラットフォーム１０がハードウェアレベルまたはＢＩＯＳプログラムレベルにおいて破壊されていないという高レベルの確信をプラットフォーム１０の見込みユーザに与える。
たとえば、ウィルスチェッカといった他の既知のプロセスは、通常、オペレーティングシステムおよびアプリケーションプログラムコードが破壊されていないことを所定の位置でチェックすることである。
【００２１】
測定機能３１は、トラステッドデバイス２４のハッシュプログラム３５４および私有鍵３５５を記憶するための不揮発性メモリ３、並びに、取得された完全性メトリックを記憶するための揮発性メモリ４にアクセスすることができる。
トラステッドデバイスが有するメモリは限られているが、多数の完全性メトリック測定値に関する情報を記憶することが望ましい場合がある。
これは、トラステッドコンピューティンググループにより説明されているようなトラステッドコンピューティングプラットフォームでは、プラットフォーム構成レジスタ（Platform Configuration Register）（ＰＣＲ）８ａ〜８ｎを使用することによって行われる。
トラステッドデバイスは、固定サイズ（ダイジェストと同じサイズ）の複数のＰＣＲを有する。
プラットフォームの初期化の際に、これらのＰＣＲは、一定の初期値に設定される。
完全性メトリックは、次に、図４に示すプロセスによってＰＣＲに「拡張（extend）」される。
ＰＣＲ８ｉの値は、入力４０１と連結される（４０３）。
この入力４０１は、ＰＣＲに拡張される完全性メトリックの値である。
この連結したものは、次に、ハッシュされて（４０２）、新しい１６０ビット値が形成される。
このハッシュは、ＰＣＲにフィードバックされて、ＰＣＲの新たな値が形成される。
完全性メトリックのＰＣＲへの拡張に加えて、実行された測定の明瞭な履歴を提供するために、測定プロセスも、従来のログファイル（単に、コンピュータプラットフォームのメインメモリとすることができる）に記録することができる。
しかしながら、信頼のために、このログファイルは、依拠されるＰＣＲ値であり、ソフトウェアログではない。
【００２２】
明らかに、取得された信頼の範囲に応じて、初期の完全性メトリックを計算できる複数の異なる方法が存在する。
ＢＩＯＳプログラムの完全性の測定は、プラットフォームの基礎を成す処理環境の完全性の基本的なチェックを提供する。
完全性メトリックは、ブートプロセスの有効性についての理由付けを可能にするような形を有するべきである。
完全性メトリックの値は、プラットフォームが、正しいＢＩＯＳを使用してブートしたか否かを検証するのに使用することができる。
オプションとして、ＢＩＯＳ内の個々の機能ブロックは、それらの機能ブロック自体のダイジェスト値を有することができ、調和のとれたＢＩＯＳダイジェスト（ensemble BIOS digest）は、これらの個々のダイジェストのダイジェストである。
これによって、ポリシーは、ＢＩＯＳオペレーションのどの部分が、意図されている目的にとって重要であるか、および、どれが無関係であるかを提示することが可能になる（この場合、このポリシーの下でのオペレーションの有効性を確立できるような方法で個々のダイジェストを記憶しなければならない）。
【００２３】
他の完全性チェックは、プラットフォームに取り付けられているさまざまな他のデバイス、コンポーネント、または装置が存在し、正しい動作順序にあることを確立することを伴うことができる。
一例では、ＳＣＳＩコントローラに関連するＢＩＯＳプログラムを検証して、周辺機器との通信を確実に信頼できるようにすることができる。
別の例では、一定の誰何／応答（challenge/response）相互作用を規定して一貫している結果を確実にすることにより、プラットフォーム上のたとえばメモリデバイスまたはコプロセッサといった他のデバイスの完全性を検証することができる。
上述のように、ＲＴＭによって直接または間接に測定される測定エージェントによって、多数の完全性メトリックを収集することができ、これらの完全性メトリックをトラステッドデバイス２４のＰＣＲに拡張することができる。
これらの完全性メトリックのいくつか−多く−は、トラステッドプラットフォームのソフトウェア状態に関係する。
【００２４】
好ましくは、ＢＩＯＳブートプロセスは、ブートプロセス自体の完全性を検証するメカニズムを含む。
このようなメカニズムは、たとえば、Ｉｎｔｅｌの草案「Wired for Management baseline specification v 2.0 - BOOT Integrity Service」からすでに知られており、ソフトウェアまたはファームウェアをロードする前に、そのソフトウェアまたはファームウェアのダイジェストを計算することを伴う。
このような計算されたダイジェストは、トラステッドエンティティによって提供される証明書に記憶されている値と比較される。
この証明書の公開鍵はＢＩＯＳに知られている。
次に、ソフトウェア／ファームウェアは、計算された値が証明書から予測された値と一致し、証明書が、トラステッドエンティティの公開鍵を使用することによって有効であると証明される場合にのみロードされる。
そうでない場合、適切な例外ハンドリングルーチンが起動される。
オプションとして、計算されたＢＩＯＳダイジェストを受信した後、トラステッドデバイス２４は、証明書のＢＩＯＳダイジェストの適切な値を検査することができ、計算されたダイジェストがこの適切な値と一致しない場合、ＢＩＯＳに制御を渡すことができず、適切な例外ハンドリングルーチンを起動することができる。
【００２５】
サードパーティによるトラステッドコンピューティングプラットフォームの製造プロセスおよび検証プロセスを簡単に説明するが、本発明には基本的に重要ではなく、上記に特定した「Trusted Computing Platforms - TCPA Technology in Context」により詳細に解説されている。
【００２６】
第１の例（製造時とすることができる）において、トラステッドプラットフォームを保証するＴＰは、プラットフォームのタイプを検査して、そのタイプを保証するか否かを決定する。
ＴＰは、トラステッドデバイスのアイデンティティおよび検査結果に関係した証明書に署名する。
これは、その後、トラステッドデバイスに書き込まれる。
【００２７】
プラットフォームの動作中の或る後の時点において、たとえば、プラットフォームが電源投入またはリセットされた時に、トラステッドデバイス２４は、プラットフォームの完全性メトリックを取得して記憶する。
ユーザがプラットフォームとの通信を望む場合、ユーザは、誰何／応答ルーチンを使用して、トラステッドデバイス２４に誰何する（プラットフォームのオペレーティングシステムまたは適切なソフトウェアアプリケーションは、通常はＢＩＯＳタイプのコールを介して適切な方法で、誰何を認識し、誰何をトラステッドデバイス２４に渡すように構成されている）。
トラステッドデバイス２４は、誰何を受信して、１つまたは複数の測定された完全性メトリックに基づき適切な応答を作成する。
これには、証明書が備えられ、署名される。
これは、ユーザによる検証を可能にする十分な情報を提供する。
【００２８】
ＰＣＲによって保持された値は、トラステッドプラットフォームの状態を表示するものとして使用することができる。
異なるＰＣＲには、特定の目的を割り当てることができる（これは、たとえば、トラステッドコンピューティンググループの仕様で行われる）。
トラステッドデバイスには、自身のＰＣＲの一部または全部の値（実際には、これらの値のダイジェスト−ＴＰＭ＿Ｑｕｏｔｅコマンドにより）を提供して、これらの値に署名するように要求することができる。
上述したように、データ（通常は鍵またはパスワード）を、一部または全部のＰＣＲの値のダイジェストに対して（ＴＰＭ＿Ｓｅａｌコマンドにより）オペークブロブ内にシールすることができる。
これは、プラットフォームがＰＣＲによって表される（トラステッド）状態にある場合にのみシールされているデータを使用できることを確実にするためである。
対応するＴＰＭ＿Ｕｎｓｅａｌコマンドは、ＰＣＲの現在の値に対して同じダイジェストを実行する。
新しいダイジェストがオペークブロブのダイジェストと同じでない場合、ユーザは、ＴＰＭ＿Ｕｎｓｅａｌコマンドによってデータを回復することができない。
ＰＣＲ値が導出される測定のいずれかが、変更されたプラットフォーム上のソフトウェアに関係している場合、対応するＰＣＲは、異なる値を有する。
したがって、従来のトラステッドプラットフォームは、シールされているデータを回復することができない。
【００２９】
次に、上述したトラステッドコンピューティングプラットフォーム構造を使用した−場合により変更した−実施形態に関して本発明の態様を説明する。
トラステッドコンピューティングプラットフォームが、自身が使用する特定のソフトウェアを明らかにすることなく、自身のソフトウェア機能を示す−そして、自身のトラステッドステータスを検証する−ことを可能にするためのメカニズムと共に、同等の機能および信頼特性の新たなソフトウェアまたは更新されたソフトウェアを提供する一手法を最初に説明する。
機能的に同等の信頼性を有するソフトウェア（functionally and trust equivalent software）とのソフトウェアの交換の前後のＰＣＲ値が同等であることをどのように示すことができるかを実証する１つの例示的な手法が説明される。
この手法を使用して、ソフトウェア状態に対してデータをシールする際の上述したような問題が解決される。
【００３０】
既存のトラステッドコンピューティングプラットフォーム構成では、エンティティは、実際には、トラステッドコンピューティングプラットフォームにおけるその信頼を、プラットフォームのインストールされているソフトウェアについての署名されたステートメントに基づいていることに留意されたい。
本発明者らは、トラステッドプラットフォームが、実際のソフトウェア測定を提供するのではなく、ソフトウェアが信頼されるというステートメントの検証の証拠を提供できることを十分認識している。
これは、いくつかの利点を有する。
トラステッドデバイスが、ソフトウェア測定の値をもはや保持していない場合、トラステッドデバイスがソフトウェア測定の値を報告することは物理的に不可能である。
検証プロセスが、ソフトウェア測定の２つの値の同等の信頼性を有する（trust equivalence）証拠を含むことができる場合（且つ、ステートメントが、トラステッド測定エンティティによって作成された場合）、トラステッドデバイスは、ソフトウェアが所定の方法で変更された後に、シールされている平文データへのアクセスを再び可能にするのに（後述するように、１つの例示的な構成で）使用できる情報を含む。
【００３１】
肯定的な結果が、プラットフォームの実際のソフトウェアを用いる代わりに、プラットフォームのソフトウェアを保証するステートメントからの機能（working from statements）により得られる。
既存のソフトウェアを保証したパーティが、交換ソフトウェアが既存のソフトウェアと同様に許容可能であることを保証する準備ができている場合、この目的のために適切なステートメントの使用を、このような交換ソフトウェアがインストールされた後にシールされている平文データへのアクセスを再び可能にすることができるように使用することができる。
実際には、トラステッドプラットフォームの所有者は、自身のプラットフォームを保証してほしいパーティを選ばなければならない。
この所有者は、１つまたは一組のパーティが、プラットフォームと相互作用する者との信用性を有する場合に、そのどのパーティも一組のパーティも選ぶことができる。
所有者は、複数のパーティまたは数組のパーティが、トラステッドピア（trusted peer）として互いに承認し合う意志がある場合、それらのパーティを変更することができる。
これによって、営利会社および非営利組織の双方が、同じトラステッドプラットフォームを保証することが可能になる。
【００３２】
図５は、本発明の実施形態による、測定を行い、それらの測定をＴＰＭ５０７に記録するプロセスの重要なステップを示している。
ステップ５．１において、測定の信頼ルート（ＲＴＭ）または測定エージェント５０１は、デジタルオブジェクト５０２のダイジェストを作成する。
ステップ５．２において、ＲＴＭまたは測定エージェント５０１は、デジタルオブジェクト５０２に関連する検証ステートメント５０３を読み出す。
ステップ５．３において、ＲＴＭまたは測定エージェント５０１は、デジタルオブジェクト５０２を記述するログ５０４およびその検証ステートメント５０３を書き込む。
ステップ５．４において、ＲＴＭまたは測定エージェント５０１は、検証ステートメント５０３を検証し、ＰＣＲ５０６に関連するフラグ５０５に障害がある場合にその障害を記録する。
ステップ５．５において、ＲＴＭまたは測定エージェント５０１は、検証プロセス５０３を明確に表示するものをＰＣＲ５０６に記録する。
【００３３】
図６は、二組の完全性メトリック６０１、６０２（第２のものは、第１のものによって表されたソフトウェア状態と同等の信頼性を有するソフトウェア状態を表す）に加えて、第２の組６０２の、本発明のこの実施形態で使用されるバージョンである第３の組６０３を示している。
第１の組の完全性メトリック６０１は、Ａ、Ｂ、およびＣのラベルが付されている３つの完全性メトリックから成る。
第２の組の完全性メトリック６０２も、Ａ、Ｂ１、Ｃのラベルが付されている３つの完全性メトリックから成る。
第１の組６０１のメトリックＡおよびＣは、第２の組６０２のメトリックＡおよびＣと同じである。
完全性メトリックＢ１によって表されるソフトウェアが完全性メトリックＢによって表されるソフトウェアと同等の信頼性を有する場合に、第２の組６０２は、第１の組６０１と同等の信頼性を有する。
第３の組の完全性メトリック６０３は、本発明のこの実施形態によれば、ソフトウェアＡ、Ｂ１、Ｃによって生成されたプラットフォーム状態を、ソフトウェアＡ、Ｂ、Ｃによって生成されたプラットフォーム状態と同等の信頼性を有するものとして認識することを可能にするために記録しなければならない完全性メトリックＡ、Ｂ、Ｂ１、Ｃを示している。
【００３４】
パーティは、特定のプログラムを保証したい場合に、署名されたステートメントを作成する。
パーティは、プログラムがアップグレード品でもなく交換品でもない場合には、新しいステートメントを作成し、プログラムがアップグレード品または交換品である場合には、ステートメントのリストに次のエントリーを作成する。
ステートメントは、１つまたは２つ以上のプログラムを記述することができる。
ステートメントが２つ以上のプログラムを記述する場合、その意味するものは、そのすべてのプログラムが、署名パーティにより、意図されているタスクにとって等しい機能を有し、等しく信頼できるものとみなされるということである。
【００３５】
ステートメントの１つの例示的な形を図７に示す。
ステートメント７０１は、構造体[programDigestsN, statementID_N, prevStatementDigestN, nextPubKeyN]を有し、補助構造体７３２[pubKeyN]（７３４）および[signatureValueN]（７３６）を有する。
フィールドpubKeyおよびステートメントＩＤは、ステートメントに含蓄されている検証プロセスを明確に識別するのに十分である。
次に、ステートメント７０１の要素を説明する。
programDigests７１０は、ステートメントによって保証されるプログラムのダイジェストである。
これは、単一のプログラムのダイジェストである必要はなく、ステートメントによって保証される２つ以上のプログラムのダイジェストを含む構造体から成ることができる。
これは、ステートメントによって保証される２つ以上のプログラムのダイジェストを含む構造体のダイジェストとすることもできる。
明らかに、このような一実施態様では、実際のダイジェストはプラットフォームにも利用可能でなければならない。
後述するように、programDigestsで参照される複数のプログラムのユーザには、プライバシーアドバンテージ（privacy advantage）が存在し得る。
statementID７２０は、ステートメントの目的を記述したものの識別を可能にするタグである。
その記述したものは、プログラム（複数可）を記述したもの、プログラム（複数可）の意図されている使用、プログラム（複数可）の効果、プログラム（複数可）についての別の情報、および乱数または他の数を含むことができる。
statementIDは、そのステートメントを、同じ鍵で署名された他のあらゆるデータと区別する働きをする。
或るプログラムが別のプログラムのアップグレード品でもなく、交換品でもない場合、prevStatementDigest７３０はNULLであり、pubKeyは、signatureValueを検証するのに使用すべき鍵である。
一方、或るプログラムが既存のプログラムのアップグレード品または交換品である場合、prevStatementDigestは、その前のステートメントのダイジェストであり、その前のステートメントからのnextPubKey７４０は、signatureValueを検証するのに使用すべき鍵である。
換言すれば、或るステートメントのnextPubKeyは、次のステートメントで使用しなければならないpubKeyである。
【００３６】
nextPubKeyおよびprevStatementによって、それらの間で、関係したステートメントが、後方および前方の双方でリンクされているリストを形成することが可能になることが分かる。
このようなリンケージを図８に示す。
このようなステートメント８０１、８０２、８０３のリストは、pubKey0  ７３４．０、nextPubKey0  ７４０．０、nextPubKey1  ７４０．１、…nextPubKeyN  ７４０．Ｎに対応する私有鍵を使用して署名値により前方にリンクされる。
このリストは、prevStatementDigest1  ７３０．１、…prevStatementDigestN  ７３０．Ｎにより後方にリンクされる。
リストの各メンバーは、programDigests  ７１０．０、７１０．１、７１０．Ｎを含むデータ上の署名値７３６．０、７３６．１、７３６．Ｎにより１つまたは複数のプログラムにリンクされる。
【００３７】
図８に示す一手法では、ステートメントのリストは、pubKey0  ７３４．０から開始し、その後に、[statementID_0  ７２０．０，programDigests0  ７１０．０，NULL  ７３０．０，nextPubKey0  ７４０．０]および[signatureValue0  ７３６．０]が続く。
[signatureValue1  ７３６．０]は、[statementID_0  ７２０．０，programDigests0  ７１０．０，NULL  ７３０．１，nextPubKey0  ７４０．０]に、pubKey0  ７３４．０に対応する私有鍵で署名した結果である。
リストは、[statementID_1  ７２０．１，programDigests1  ７１０．１，prevStatementDigest1  ７３０．１，nestPubKey1  ７４０．１]および[signatureValue1  ７３６．１]を続ける。
[signatureValue1  ７３６．１]は、[statementID_1  ７２０．１，programDigests1  ７１０．１，prevStatementDigest1  ７３０．１，nextPubKey1  ７４０．１]に、nextPubKey0  ７４０．０に対応する私有鍵で署名した結果である。
リストは同様にして続く。
【００３８】
図８の矢印は、nextPubKey0  ７４０．０がpubKey1  ７３４．１と同じであり、nextPubKey1  ７４０．１がpubKeyN  ７３４．Ｎと同じであり、以下同様に同じであることを示している。
【００３９】
リストのステートメントは、共通して機能の同等性を有し、共通してそのステートメントを発行するパーティによる信頼の証拠を有するが、他の態様では、ステートメントが異なる可能性があることを十分理解すべきである。
たとえば、statementNに関連するプログラムは、必ずしも、statementMに関連するプログラムではない。
したがって、programDigestsNは、必ずしも、programDigestsMと同じではない。
これは、リストのの先頭のステートメントに関連するプログラム（複数可）がリストの任意の中間点またはリストの末尾のステートメントに関連するプログラム（複数可）と異なる（または同じ）場合があることを意味する。
同様に、リストのpubKeyNは、nextPubKeyNと同じ場合もあるし同じでない場合もある。
したがって、signatureValue0を検証するのに使用される鍵は、Ｎがリストの中間ステートメントであろうと、リストの最後のステートメントであろうと、signatureValueNを検証するのに使用されるのと同じ鍵の場合もあるし、同じ鍵でない場合もある。
したがって、パーティは、（推奨されているセキュリティの実施に従って）ときどき自身の署名鍵を変更することもできるし、異なる署名鍵を有する別のパーティに信頼を引き渡すこともできる。
【００４０】
この手法を修正したものでは、PubKeyおよびnextPubKeyは、鍵のダイジェスト、または、１つ若しくは２つ以上の鍵を含む構造体のダイジェストとすることができる。
明らかに、このような実施態様では、実際の公開鍵はプラットフォームにも利用可能でなければならない。
このような場合、その構造体の任意の公開鍵ダイジェストに対応する任意の私有鍵を使用して、ステートメントに署名することができ、複数のパーティは、プラットフォームの信頼性を同時に保障することができる。
【００４１】
所与のソフトウェアタイプについて、このタイプのステートメントを一貫して使用するか、または、それらのステートメントをまったく使用しない（その代わり、たとえば、従来のＴＣＧ手法を使用する）ことが必要である。
ステートメントが或るソフトウェアタイプに使用される場合、プラットフォームによって保証されるそのソフトウェアタイプの第１のインスタンスは、ステートメントを有する必要がある。
従来のＴＣＧ手法からステートメントを有するアップグレード品への切り換えは、説明したように、利用可能な手法ではない。
【００４２】
次に、トラステッドプラットフォームが自身のソフトウェアを識別するように依頼される場合にプライバシーの対策を達成することを可能にするメカニズムを説明する。
これは、ステートメントを発行するパーティが、上述したステートメントに加えて、programDigestsフィールドを除外する類似の補助ステートメントの２つのステートメントを実際に発行することを必要とする。
図９は、補助ステートメント９１０がpubKeyフィールド７３４、StatementIDフィールド７２０、prevStatementDigestフィールド７３０、nextPubKeyフィールド７４０、signatureValueフィールド７３６から成り、programDigestsフィールド７１０を欠いていることを示している。
これらの補助ステートメントは、前述した主ステートメントの代わりに、トラステッドデバイスから署名された完全性メトリックを受信する誰何者に戻すことができる。
これらの補助ステートメントは、プラットフォームにインストールされた実際のプログラムの識別を妨げる可能性がある。
主ステートメントのprogramDigestsフィールドが１つのプログラムしか記述していない場合、このprogramDigestsフィールドは、プラットフォームによって使用されているプログラムを確実に識別する。
したがって、補助ステートメントが誰何応答で使用されるべきである場合、明らかなプライバシーアドバンテージが存在する。
programDigestsフィールドが数個のプログラムを記述する場合であっても、programDigestsフィールドは、プラットフォームについてあまりにも多数の情報を明らかにするものとみなされる場合があり、プライバシーが必要とされる場合には、補助ステートメントが誰何応答に使用されるべきである。
programDigestsフィールドが多数のプログラムを記述する場合のみが、プライバシーとは明らかに無関係な誰何応答における主ステートメントの使用である。
また、主ステートメントを検証するのに使用される公開鍵は、補助ステートメントを検証するのに使用される公開鍵でなければならず、同じstatementIDが双方のステートメントに現れるべきである。
これらの制約条件は、主ステートメントと補助ステートメントとの間の検証可能な関係を提供するのに必要である。
もちろん、主ステートメントの署名値は、補助ステートメントの署名値とは異なる。
【００４３】
次に、検証プロセスの記録となるように、ステートメントに関連する新たなソフトウェアまたは交換ソフトウェアの検証を説明する。
このプロセスの本質は、（プラットフォームの一態様の）単一の拡張オペレーションを１つまたは２つ以上の拡張オペレーションと交換することである。
これらの１つまたは２つ以上の拡張オペレーションのそれぞれは、プラットフォームのその態様についてのステートメントを記述する。
【００４４】
検証を実行して記録するために、以下のものが必要とされる。
すなわち、トラステッド測定エージェントがステートメント検証プロセスを実行すること、並びに、トラステッド測定エンティティがプログラムの検証、ステートメントの検証、およびステートメントのリストが十分にリンクされていることの検証を行わなければならないことが必要とされる。
測定エンティティが、そのエンティティについての構成証明またはトラステッド測定エージェントによるそのエンティティの測定のいずれかによって信頼される。
【００４５】
プログラムを検証するために、測定エンティティは、プログラムのダイジェストを作成し、そのダイジェストをステートメントの（programDigestsフィールドからの）情報と比較する。
測定エンティティは、このプロセスが成功したか否かの表示を記録しなければならない。
一実施態様は、TRUEまたはFALSEのいずれかであるverifiedProgramフラグをトラステッドデバイスに記録することである。
プログラムが、リンクリストに関連付けられている場合、この比較は、そのリストの最後のステートメントを使用してのみ行われるべきである（リストの前のステートメントは、プログラムの進化およびプログラムの構成証明の履歴を単に提供するだけである）。
【００４６】
ステートメントの検証可能な記録を作成するために、測定エンティティは、少なくとも、ステートメントの署名の検証に成功したか否かの記録をトラステッドデバイスに作成しなければならない。
一実施態様は、TRUEまたはFALSEのいずれかに設定されるverifiedStatementフラグをトラステッドデバイスに記録することである。
【００４７】
ステートメントの検証の監査可能な記録を作成するために、測定エージェントは、検証を実行するのに使用される技法の記録を作成しなければならない。
一実施態様は、ステートメント上の署名を検証するのに使用される公開鍵（pubKeyまたはnextPubKey）をトラステッドデバイスに記録することである。
実施可能である場合、測定エージェントは、ステートメント上の署名を検証するのに使用される公開鍵が現存している（無効にされていない）ことも検証するが、これは、おそらく、ほとんどの測定エージェントの能力を越えている。
これを判断することが可能である場合において、公開鍵が現存していないとき、測定エンティティは、常にverifiedStatementフラグをFALSEに設定する。
【００４８】
公開鍵に対応する私有鍵が、単一のタイプのステートメントに署名することのみに使用される場合、その署名の意図についてのステートメントは必要とされない。
そうでない場合、その署名が特定のステートメントに属することを示す情報を公開鍵と共に記録しなければならない。
一実施態様は、statementIDをトラステッドデバイスに記録することである。
【００４９】
単一のステートメントまたはリストの先頭を区別するために、一実施態様は、ステートメントが別のステートメントのnextPubKeyを使用して検証されなかった場合またはステートメントのprevStatementDigestが前のステートメントのダイジェスト値でない場合に、フラグstartstatement==TRUEでステートメントの検証をタグ付けし、それ以外の場合に、フラグstartStatement==FALSEでステートメントの検証をタグ付けすることである。
【００５０】
リンクリストのどのメンバーも前方および後方の双方で検証しなければならない。
リンク試験に合格した場合、ステートメントは、フラグverifiedList==TRUEでタグ付けされる。
そうでない場合、ステートメントは、フラグverifiedList==FALSEでタグ付けされる。
【００５１】
検証されたステートメントのリストの完全な記録を作成するために、測定エンティティは、リストのすべてのステートメントの少なくとも基本的な特性、および、リストのすべてのステートメントがそれらの検証試験に合格したか否かをトラステッドデバイスに記録しなければならない。
好ましい実施態様は、リストのすべてのステートメントの記録をトラステッドデバイスに作成する一方、リストのあらゆるステートメントの検証試験の結果をトラステッドデバイスに別個に記録することである。
【００５２】
この手法に従って、ステートメントを評価した後、測定エンティティは、少なくともデータ構造体STATEMENT_VERIFICATIONをトラステッドデバイスに記録することができる。
このデータ構造体STATEMENT_VERIFICATIONは、少なくとも（１）ステートメントを検証するのに使用された公開鍵と、（２）statementIDが存在する場合に、そのstatementIDとを含む。
各ＰＣＲについて、トラステッドデバイスは、upgradesPermittedフラグを保持する。
このupgradesPermittedフラグは、ＰＣＲ初期化の際にTRUEに設定されるが、プラットフォームが、verifiedProgram==FALSEまたはverifiedStatement==FALSEまたはvefifiedList==FALSEを有するそのＰＣＲに関連するステートメントに遭遇するごとにFALSEに再設定される。
upgradesPermittedがFALSEである場合、関連するＰＣＲの情報コンテンツは信頼できない。
upgradesPermittedがFALSEである場合、トラステッドデバイス（ＴＰＭ）は、そのＰＣＲに対するデータのシール（たとえば、ＴＣＧの「digestAtCreation」パラメータの作成）、データのアンシール（たとえば、ＴＣＧの「digestAtRelease」パラメータのチェック）等、そのＰＣＲ値の正しさを前提としたセキュリティオペレーションの実行を拒否しなければならない。
upgradesPermittedがFALSEである場合、ＴＰＭは、（たとえば、TPM_quoteを使用して）そのＰＣＲ値の報告を拒否することもできるし、または代替的に、ＰＣＲ値と共にupgradesPermittedの値を報告することもできる。
【００５３】
ステートメントの記録またはステートメントのリストの記録で従来のＴＣＧ完全性メトリックを代用するためのアルゴリズムを説明する。
測定エンティティ（プログラムのロード前）は、最初に、プログラムのダイジェストを作成することによって通常のＴＣＧ手順に従う。
次に、測定エンティティは、１つまたは２つ以上のステートメントがプログラムに関連付けられているか否かを判断する。
ステートメントがプログラムに関連付けられていない場合、測定エンティティは、TPM_Extendを使用してプログラムのダイジェストをトラステッドデバイスに拡張することにより、既存のＴＣＧ手順に従う。
ステートメントがプログラムに関連付けられている場合、測定エンティティは、ステートメントを構文解析して単一のステートメントおよびステートメントのチェーンにしなければならない。
単一のステートメントが識別されると、適切なフラグおよびSTATEMENT_VERIFICATIONをトラステッドデバイスに記録しなければならない（しかし、適切なverifiedListは記録されず、計算する必要さえないことに留意されたい）。
チェーンの先頭または中間リンクが識別されると、適切なSTATEMENT_VERIFICATIONおよびフラグがトラステッドデバイスに記録される（しかし、適切なverifiedProgramフラグは記録されず、計算する必要さえないことに留意されたい）。
チェーンの末尾が識別されると、適切なSTATEMENT_VERIFICATION構造体およびフラグがトラステッドデバイスに記録される。
ステートメントを構文解析している間に使用されるいくつかのアルゴリズムは、
（ａ）常にverifiedStatementを計算するもの、
（ｂ）前のステートメントおよび／または次のステートメントが存在する場合にverifiedListを計算するもの、
（ｃ）（次のステートメントが存在しない）場合または（次のステートメントがstartStatement==TRUEを有する）場合にverifiedProgramを計算するもの、
（ｄ）常にSTATEMENT_VERIFICATIONを記録するもの、および
（ｅ）verifiedProgram==FALSEまたはverifiedStatement==FALSEまたはverifiedList==FALSEであるときは常に、適切なupgradesPermittedフラグをリセットするもの
である。
【００５４】
上述した検証プロセスは、アップグレードされたソフトウェアまたは交換ソフトウェアが旧ソフトウェアと同等の信頼性を有することを確立するのに必要とされる情報を取り込む。
誰何の際にソフトウェア状態を報告することに関連するプライバシーの懸案事項は、したがって、多数のプログラムを記述するステートメントの使用または補助ステートメントの使用によって改善することができる。
旧ソフトウェアを有する旧プラットフォームにシールされているオペークブロブのデータにアクセスする問題を解決するために、さらに別のステップが必要とされる。
後述するように、新しいソフトウェア状態に関連するＰＣＲ値にこれらのオペークブロブを再シールすることが可能である。
これには、後のＰＣＲ値が、オペークブロブのシールの対象である前のＰＣＲ値から合法的に導出されることの有効な証明になる多数の動作が必要とされる。
４つのタイプの動作が必要とされる。
すなわち、或るＰＣＲ値が別のＰＣＲ値から導出できることを証明すること、或る完全性メトリックが別の完全性メトリックを交換したものであることを証明すること（２つの完全性メトリックがリンクされていることを証明すること）、測定されたダイジェストから成るＰＣＲ値の同等性を証明すること、および、複数のＰＣＲ値から成る合成ＰＣＲ値の同等性を証明することが必要とされる。
各動作は前の動作に依拠し、各動作については、以下で１つの例示的な実施形態において説明して、既存のトラステッドコンピューティンググループシステムを補完する新しい機能を提案する。
これらの機能の使用は、シールされているオペークブロブの第１の合成ＰＣＲ値を、第１の合成ＰＣＲ値と同等の信頼性を有する第２の合成ＰＣＲ値と交換する１つの例示的な実施形態で説明することにする。
【００５５】
トラステッドコンピューティンググループの専門用語において、ＰＣＲ値の設定は、TPM_COMPOSITE_HASH値として説明されることに留意すべきである。
トラステッドコンピューティンググループは、TPM_COMPOSITE_HASH値をTPM_PCR_COMPOSITE構造体のダイジェストとして定義する。
TPM_PCR_COMPOSITE構造体は、
typedef struct tdTPM_PCR_COMPOSITE {
TPM_PCR_SELECTION select;
UINT32 valueSize;
[size_is(valueSize)] TPM_PCRVALUE pcrValue[];
} TPM_PCR_COMPOSITE;
として定義される。
【００５６】
これは、TPM_PCR_COMPOSITE構造体が、（本質的に）TPM_PCR_SELECTION構造体、その後の４バイト値、およびその後の連結される複数のＰＣＲ値であることを意味する。
TPM_COMPOSITE_HASH値は、ハッシュアルゴリズムにおいてそれらの構造体をシリアルにハッシュした結果である。
【００５７】
この明細書では、後に完全性メトリックおよびＰＣＲ値を説明する時に、特定の用語体系が使用される。
大文字は、完全性メトリック値を表し、波型文字「〜」が続く大文字は、ＰＣＲ値を表す。
この場合、その大文字は、ＰＣＲに拡張される完全性メトリックの最も近時の値を表すものである。
したがって、ＰＣＲ状態Ａ〜は、ＰＣＲに拡張された最も近時の完全性メトリックが値Ａを有していたことを意味する。
完全性メトリック値ＢでＡ〜のＰＣＲ値を拡張するオペレーションは、Ｘ（Ａ〜，Ｂ）と記述され、このオペレーションの結果、ＰＣＲ値はＢ〜となる。
［文字］〜によって表されるＰＣＲ値は多値であることを十分理解しなければならない。
実際のＰＣＲ値は、ＰＣＲの前の履歴に依存する。
【００５８】
この例示的な実施態様全体を通じて使用される手法は、管理プログラムが、一連のステップを通じてトラステッドデバイス（ＴＰＭ）をガイドするものである。
各ステップは、トラステッドデバイスが検証したアサーションの証拠であるデータを作成する（署名されたステートメントのトラステッドデバイスによるチェックを伴う、同じ目的を達成するための代替的な方法が存在するが、説明する手法は、既存のトラステッドコンピューティンググループの方法論と一貫性を保つために選択されている）。
トラステッドデバイスは、自身がこのような証拠を作成したことを後に認識することができる。
これらの認識方法は、当業者に既知であり、既存のトラステッドコンピューティンググループの技術で使用される。
認識することによって、ＴＰＭは、データがＴＰＭに再ロードされた時に、データに提示されたアサーションを信じることが可能になる。
【００５９】
一実施態様では、トラステッドデバイスは、二組のＰＣＲ値が同等の信頼性を有することを証明する新たな能力を必要とする。
以下の一組のプロトタイプのトラステッドデバイスコマンドは、その概念を示している。
TPM_upgrade_extend(A~, B)は、或るＰＣＲ値を別のＰＣＲ値から導出できることの証拠を作成する。
このコマンドは、ＰＣＲ値Ｂ〜をＰＣＲ値Ａ〜から導出でき、且つ、最も近時に拡張された完全性メトリックが値Ｂを有していたことの証拠として、出力データ[Uextend, A~, B~, B] を作成する。
この証拠を作成するために、ＴＰＭは、一時的なＰＣＲに値Ａ〜をロードし、完全性メトリックＢを使用して値Ａ〜を拡張し、ＰＣＲ値Ｂ〜を作成する。
トラステッドデバイスは、文字列「Uextend」で出力データをタグ付けして、証拠のタイプを示す。
トラステッドデバイスがデータを出力した後、一時的なＰＣＲを廃棄することができる。
TPM_upgrade_concat([Uextend, A~, B~, B], [Uextend, B~, C~, C])は、或るＰＣＲ値を別のＰＣＲ値から導出できることの証拠を作成する。
これは、ＰＣＲ値Ｃ〜をＰＣＲ値Ａ〜から作成でき、且つ、最も近時に拡張された完全性メトリックが値Ｃを有していたことの証拠として、出力データ[Uextend, A~, C~, C]を作成する。
この証拠を生成するために、ＴＰＭには、データ構造体[Uextend, A~, B~, B]および[Uextend, B~, C~, C]がロードされ、ＴＰＭは、（１）それが、双方の構造体を作成したこと、（２）[Uextend, A~, B~, B]および[Uextend, B~, C~, C]の双方が文字列Uextendを含むこと、および（３）[Uextend, A~, B~, B]のＢの値が[Uextend, B~, C~, C]のＢと同じ値であることを検証する。
トラステッドデバイスは、出力データを文字列「Uextend」でタグ付けして、証拠のタイプを示す。
TPM_upgrade_link(SA, SB)は、或る完全性メトリックが別の完全性メトリックと同等の信頼性を有することの証拠を作成する。
これは、完全性メトリック値Ｂが完全性メトリック値Ａと同等の信頼性を有することの証拠として、出力データ[Ulinked, A, B]を作成する。
この証拠を作成するために、ＴＰＭには、ステートメントＳＡおよびＳＢがロードされる。
ここで、ＳＡは、完全性メトリックＡ（pubKey-AおよびstatementID-A）を記述し、ＳＢは、完全性メトリックＢ（pubKey-BおよびstatementID-B）を記述する。
ＴＰＭは、ＳＡがＳＢに前方リンクされて、ＳＢがＳＡに後方リンクされていることを検証し、出力データ[Ulinked, A, B]を作成する。
文字列「Ulinked」は、証拠のタイプを示す。
TPM_upgrade_forkRoot(Uextend, A~, B~, B)は、完全性メトリックの単一のシーケンスから同等の信頼性を有する２つのシーケンスへの分岐の証拠を作成し、出力データ[Ufork, A~, B~, B, B~, B]を作成する。
文字列「Ufork」は、証拠のタイプを示す。
Uforkデータ構造体の正準表現は、２つのＰＣＲ状態［B~,B］、［C~,C］が同等の信頼性を有し、且つ、同じＰＣＲ状態Ａ〜から導出されたことを示す[Ufork, A~, B~, B, C~, C]である。
TPM_upgrade_forkRootは、分岐（divergence）の時点で状態の証拠を作成し、２つの同一のＰＣＲ状態［B~,B］および［B~,B］が同等の信頼性を有することを意味するデータ構造体[Ufork, A~, B~, B, B~, B]を作成する。
なお、２つの同一のＰＣＲ状態［B~,B］および［B~,B］が同等の信頼性を有することは明らかである。
この証拠を作成するために、ＴＰＭには、データ構造体[Uextend, A~, B~, B]がロードされる。
ＴＰＭは、（１）それがその構造体を作成したこと、および、（２）それが文字列Uextendを含むことを検証する。
TPM_upgrade_forkLink([Ufork, A~, B~, B, C~,C], [Ulinked, E, F], [branch])は、一組の２つの同等の信頼性を有するＰＣＲ値［B~,B］および［C~,C］の或る[branch]ＰＣＲ値をＴＰＭに変更させるが、完全性メトリックＦが完全性メトリックＥと同等の信頼性を有することの証拠を必要とする。
[branch]パラメータが０であり、且つ、B==Eである場合、このコマンドは、第１のＰＣＲ値［B~,B］をＦで［F~,F］に拡張するが、第２のＰＣＲ値［C~,C］は変更されない。
したがって、このコマンドは、データ[Ufork, A~, F~, F, C~, C]を作成する。
[branch]パラメータが１であり、且つ、C==Eである場合、このコマンドは、第２のＰＣＲ値［C~,C］をＦで［F~,F］に拡張するが、第１のＰＣＲ値［B~,B］は変更されない。
したがって、このコマンドは、データ[Ufork, A~, B~, B, F~, F]を作成する。
ＴＰＭには、データ構造体[Ufork, A~, B~, B, C~, C]、[Ulinked, E, F]、[branch]がロードされる。
ＴＰＭは、
（１）それが第１の構造体および第２の構造体の双方を作成したこと、
（２）第１の構造体が文字列Uforkを含むこと、および
（３）第２の構造体が文字列Ulinkedを含むこと
を常に検証する。
前述したように、出力データの文字列「Ufork」は、証拠のタイプである。
TPM_upgrade_forkExtend([Ufork, A~, B~, B, C~, C], [D])は、２つの同等の信頼性を有するＰＣＲ値［B~,B］および［C~,C］の双方のブランチをＴＰＭに変更させる。
このコマンドは、出力データ[Ufork, A~, X(B~, D), D, X(C~, D), D]を作成する。
ＴＰＭには、データ構造体[Ufork, A~, B~, B, C~, C]および完全性メトリックＤがロードされる。
ＴＰＭは、（１）それが第１の構造体を作成したこと、および、（２）第１の構造体が文字列Uforkを含むことを検証する。
前述したように、出力データの文字列「Ufork」は、証拠のタイプである。
TPM_upgrade_forkPCR([Ufork, A~, B~, B, C~, C], [PCR-index])は、ＰＣＲ値Ｂ〜およびＣ〜が特定のＰＣＲについて同等の信頼性を有することの証拠を作成する。
ＴＰＭには、データ構造体[Ufork, A~, B~, B, C~, C]および[PCR-index]がロードされる。
ＴＰＭは、（１）それが第１の構造体を作成したこと、（２）第１の構造体が文字列Uforkを含むこと、および（３）Ａ〜が、インデックス[PCR-index]を有するＰＣＲの初期値であることを検証する。
ＴＰＭは、出力データ[uPCR, PCR-index, B~, C~]を作成して、ＰＣＲ状態Ｂ〜およびＣ〜が、インデックスPCR-indexを有するＰＣＲについて同等の信頼性を有する値であることを示す。
出力データの文字列「uPCR」は、証拠のタイプである。
TPM_upgrade_forkHash([uPCR, PCR-index, A~, B~], [PCR-incex, C~], […], …)は、２つの合成ＰＣＲダイジェスト[compHash]および[compHash&]が、リスト[PCR-indexList]に示されたＰＣＲについて同等の信頼性を有することの証拠[Uhash, compHash, compHash&, PCR-indexList]を作成する。
ＴＰＭには、形式[uPCR, PCR-index, A~, B~]または[PCR-index, C~]の複数のデータ構造体がロードされる。
ＴＰＭは、（１）それが、形式[uPCR, PCR-index, A~, B~]のあらゆるデータ構造体を作成したこと、および（２）このようなデータ構造体が文字列uPCRを含むことを検証する。
このコマンドでは、形式[uPCR, PCR-index, A~, B~]のデータ構造体は、インデックスPCR-indexを有するＰＣＲを、合成ハッシュcompHashのＰＣＲ値Ａ〜および合成ハッシュcompHash&のＰＣＲ値Ｂ〜によって表さなければならないことを示す。
形式[PCR-index, C~]のデータ構造体は、インデックスPCR-indexを有するＰＣＲを、合成ハッシュcompHashおよび合成ハッシュcompHash&の双方のＰＣＲ値Ｃ〜によって表さなければならないことを示す。
ＴＰＭは、PCR-indexListに反映された順序で、関連するＰＣＲ値を入力データから抽出し、それらのＰＣＲ値を使用して、合成ハッシュcompHashおよびcompHash&を作成する。
出力データの文字列Uhashは、証拠のタイプである。
TPM_upgrade_seal([sealedBlob], [Uhash, compHash, compHash&, PCR-indexList])は、シールされているブロブ[sealedBlob]の合成ハッシュ値compHashを、合成ハッシュ値compHash&と交換する。
ＴＰＭには、シールされているブロブ[sealedBlob]および[Uhash, compHash, compHash&, PCR-indexList]がロードされる。
ＴＰＭは、それが双方の構造体を作成したこと、および、第２の構造体が文字列Uhashを含むことを検証する。
[sealedBlob]が、PCR-indexListにリストされたものと同じＰＣＲを使用し、且つ、その合成ハッシュ値がcompHashである場合、ＴＰＭは、compHashをcompHash&と交換し、変更を受けた、シールされているブロブを出力する。
【００６０】
次に、これらの新しい機能の一使用を単なる一例として説明することにする。
【００６１】
図１０は、２つの同等の信頼性を有する完全性メトリック１００１、１００２を示している。
これらの双方のシーケンスは、同じ完全性メトリックシーケンスＡ０  Ｂ０  Ｃ０  Ｄ０  Ｅ０のアップグレードである。
第１のシーケンス１００１は、第２のシーケンス１００２とは異なってアップグレードされている。
第１の完全性メトリックシーケンス１００１は、Ａ０  Ｂ１  Ｃ０  Ｄ１  Ｅ０である。
第２の完全性メトリックシーケンス１００２は、Ａ０  Ｂ０  Ｃ１  Ｄ２  Ｅ０である。
文字の後の数字は、アップグレードの進化を示している。
すなわち、完全性メトリックＡ０はアップグレードではない。
完全性メトリックＢ１はＢ０からのアップグレードである。
完全性メトリックＣ１はＣ０からアップグレードである。
完全性メトリックＤ１はＤ０からアップグレードである。
完全性メトリックＤ２はＤ１からのアップグレードである。
完全性メトリックＥ０はアップグレードではない。
これらの関係は、図（figure）１００３および図１００４に示されている。
ここで、各連続したカラムは、トラステッドプラットフォームの異なる態様の完全性メトリックであり、各カラムは、特定の完全性メトリックの進化を示している。
本発明のこの実施形態による、ＰＣＲにロードされた完全性メトリックの実際のシーケンスは、図１００５および図１００６に示されている。
第１のシーケンス１００１と同等の完全性メトリックの実際のシーケンスは、Ａ０  Ｂ０  Ｂ１  Ｃ０  Ｄ０  Ｄ１  Ｅ０  １００５である。
第２のシーケンス１００２と同等の完全性メトリックの実際のシーケンスは、Ａ０  Ｂ０  Ｃ０  Ｃ１  Ｄ０  Ｄ１  Ｄ２  Ｅ０  １００６である。
完全性メトリックの結果のシーケンスは、図１００７および図１００８に示されている。
第１のシーケンス１００１と同等のＰＣＲ値の実際のシーケンスは、１００７  Ｒ〜  Ａ０〜  Ｂ０〜  Ｂ１〜  Ｃ０〜  Ｄ０〜  Ｄ１〜  Ｅ０〜である。
ここで、Ｒ〜は、特定のＰＣＲのリセット状態である。
第２のシーケンス１００２と同等のＰＣＲ値の実際のシーケンスは、１００８  Ｒ〜  Ａ０〜  Ｂ０〜  Ｃ０〜  Ｃ１〜  Ｄ０〜  Ｄ１〜  Ｄ２〜  Ｅ０〜である。
この要件は、第１のＰＣＲシーケンス１００７が第２のＰＣＲシーケンス１００８と同等の信頼性を有することをＴＰＭに証明することである。
上記機能を使用する一実施態様は、以下の通りである。
１．TPM_upgrade_extend(R~, A0) => [Uextend, R~, A0~, A0]
２．TPM_upgrade_extend(A0~, B0) => [Uextend, R~, B0~, B0]
３．TPM_upgrade_concat([Uextend, R~, A0~, A0], [Uextend, A0~, B0~, B0]) => [Uextend, R~, B0~, B0]
４．TPM_upgrade_forkRoot(Uextend, R~, B0~, B0) => [Ufork, R~, B0~, B0, B0~, B0]
５．TPM_upgrade_link(B0, B1) => [Ulinked, B0, B1]
６．TPM_upgrade_forkLink([Ufork, R~, B0~, B0, B0~, B0], [Ulinked, B0, B1], [0]) => [Ufork, R~, B1~, B1, B0~, B0]
７．TPM_upgrade_forkExtend([Ufork, R~, B1~, B1, B0~, B0], [C0]) => [Ufork, A~, C0~, C0, C0~, C0]
８．TPM_upgrade_link(C0, C1) => [Ulinked, C0, C1]
９．TPM_upgrade_forkLink([Ufork, R~, C0~, C0, C0~, C0], [Ulinked, C0, C1], [1]) => [Ufork, R~, C0~, C0, C1~, C1]
１０．TPM_upgrade_forkExtend([Ufork, R~, C0~, C0, C1~, C1], [D0]) => [Ufork, R~, D0~, D0, D0~, D0]
１１．TPM_upgrade_forkExtend([Ufork, R~, D0~, D0, D0~, D0], [D1]) => [Ufork, R~, D1~, D1, D1~, D1]
１２．TPM_upgrade_link(D1, D2) => [Ulinked, D1, D2]
１３．TPM_upgrade_forkLink([Ufork, R~, D1~, D1, D1~, D1], [Ulinked, D1, D2], [1]) => [Ufork, R~, D1~, D1, D2~, D2]
１４．TPM_upgrade_forkExtend([Ufork, R~, D1~, D1, D2~, D2], [E0]) => [Ufork, R~, E0~, E0, E0~, E0]
１５．TPM_upgrade_forkPCR([Ufork, R~, E0~, E0, E0~, E0], P) => [uPCR, P, E0~, E0~]
【００６２】
次に、TPM_upgrade_forkHashと共に構造体[uPCR, P, E0~, E0~]を使用して、同等の信頼性を有する合成ＰＣＲダイジェスト値を作成することができる。
次に、これらの値をTPM_upgrade_sealに使用して、シールされているブロブの合成ハッシュ値をアップグレードすることができる。
【００６３】
好ましくは、合成ＰＣＲを生成する既存のトラステッドコンピューティンググループの方法が、各後続のＰＣＲ値を中間の合成ＰＣＲ値に拡張することに変更される。
この場合、コマンドTPM_upgrade_forkHashは必要とされない。
【００６４】
補完的な手法では、さらに新しいトラステッドデバイスの能力が、これらの新しい能力によって作成されるデータブロブのコンテンツを含むクレデンシャルを作成してそのクレデンシャルに署名する。
このようなクレデンシャルは、現在のプラットフォーム状態の証拠（TPM_Quoteによって作成されたもの等）と共に、プラットフォームの新しい状態が前の状態と同様に信頼できることの証拠としてサードパーティに供給することができる。
このようなクレデンシャルは、クレデンシャルの意味を示すdigestPairData、compositePairData等のタグを含まなければならない。
このようなクレデンシャルは、プライバシーを保護するために、トラステッドコンピューティンググループの通常の実施に従い、ＴＰＭの構成証明アイデンティティの１つを使用して署名されるべきである。
【００６５】
全体としてこの手法により、（関連するＰＣＲ値によって立証される）後のソフトウェア状態を旧ソフトウェア状態と関連付けることが可能になる。
したがって、新しいＰＣＲ値が古いＰＣＲ値から導出可能であることを示すことができ、新しいTPM_COMPOSITE_HASH値が古いTPM_COMPOSITE_HASH値と取って代わることができる場合に、ソフトウェア状態の変化にかかわらず、シールされているブロブにアクセスすることが可能である。
適した手法は、単に、トラステッドプラットフォーム上のソフトウェアをアップグレードまたは交換するプロセスの１つのステップとして、このようなすべての「シールされているブロブ」を更新することである。
【００６６】
プラットフォームが、ステートメント検証プロセスを実行するのに十分な資源を有しないようなものである場合、それらの検証プロセスを実行する能力をトラステッドデバイスに提供することができる。
したがって、新しいトラステッドデバイスの能力は、測定エンティティによる、ステートメント上の署名の検証、ステートメントのリンクリストの検証等に使用することができる。
トラステッドデバイスは、検証プロセスの中間結果を記憶するスクラッチパッドとしても動作することができ、したがって、或る検証プロセスの結果は、トラステッドデバイスの外部に記憶する必要なく、後の検証プロセスが使用することができる。
同様の技法は、ダイジェストの計算およびこのようなダイジェストのＰＣＲへの拡張を行うためにトラステッドコンピューティンググループの技術においてすでに使用されている。
【００６７】
これまでは、同等の信頼性が相互関係を表すものと仮定されてきた。
すなわち、たとえば、完全性メトリックＡ０によって表されるソフトウェアが、完全性メトリックＡ１によって表されるソフトウェアと等しく同様に信頼できることが仮定されてきた。
これは、常に当てはまるとは限らない。
ソフトウェアをアップグレードする理由は、ソフトウェアの信頼性を訂正または改善するためである場合がある。
この場合、たとえば、完全性メトリックＡ１によって表されるソフトウェアは、完全性メトリックＡ０によって表されるソフトウェアの代わりに使用することができるが、完全性メトリックＡ０によって表されるソフトウェアは、完全性メトリックＡ１によって表されるソフトウェアの代わりに使用することができない。
したがって、ステートメント７０１に特別な情報を追加して、信頼性が相互関係を表すか否かを示すことが必要となる。
これは、署名値７３６を作成するために書名されるデータの一部として含まれて、新しいＴＰＭ機能に反映されなければならず、その結果（必要な場合に）、一方のブランチの完全性メトリックは、他方のブランチのメトリックと常に同じであるか、または、他方のブランチのメトリックに後方リンクしている。
【００６８】
一実施態様では、
reciprocalFlagフィールドがステートメント７０１に挿入され、前の（前方リンクする）メトリックが現在の（後方リンクする）メトリックの許容可能な交換物である場合にはTRUEに設定され、そうでない場合にはFALSEに設定される。
構造体[Ulinked, A, B]は、[Ulinked, A, B, reciprocalLink]になるように変更され、この構造体は、ＡはＢによって交換できるが、Ｂは、reciprocalLinkがTRUEである場合にのみＡによって交換できることを意味する。
コマンドTPM_upgrade_link(SA, SB)は、reciprocalLinkフラグを作成して、［ＳＢのreciprocalFlagがFALSEである］場合に、reciprocalLinkをFALSEに設定するように変更される。
構造体[Ufork, A~, B~, B, C~, C]は、[Ufork1, A~, B~, B, C~, C, reciprocal0, reciprocal1]になるように変更される。
reciprocal0およびreciprocal0は、共に、TPM_upgrade_forkRootによってTRUEに設定される。
第１の完全性の組[B~, B]が、TPM_upgrade_forkLinkオペレーション中に一度でも拡張され、且つ、そのreciprocalLinkがFALSEであった場合、reciprocal0はFALSEに設定される。
同様に、第２の完全性の組[C~, C]がTPM_upgrade_forkLinkオペレーション中に一度でも拡張され、且つ、そのreciprocalLinkがFALSEであった場合、reciprocal1はFALSEに設定される。
reciprocal0がTPM_upgrade_forkLinkに入力されたUfork1データでFALSEである場合において、[branch]==1であるときは、このコマンドは失敗しなければならない。
同様に、reciprocal1がTPM_upgrade_forkLinkに入力されたUfork1データでFALSEである場合において、[branch]==0であるときは、このコマンドは失敗しなければならない。
コマンドTPM_upgrade_forkPCRは、入力されたUfork構造体のフラグreciprocal0およびreciprocal1を検査するように変更される。
一方のＰＣＲ値が、他方のＰＣＲ値でシールされているデータをアンシールするのに使用できることをそれらのフラグが示すが、その逆は成り立たない場合、ＴＰＭは、Ｘ〜にシールされているデータをＹ〜でアンシールできるように、変更されたuPCR構造体[uPCR, PCR-index, X~, Y~]のＰＣＲ値を順序付ける。
【００６９】
実施形態では、本発明は、ＴＰＭのステートメントのリンクリストを記録することを伴う。
次に、本発明者らは、このようなリンクリストの長さに関係した本発明の実施形態の態様を説明する。
完全なリンクリストの記録は、プラットフォームの状態の完全な系統（lineage）を明示的に記録するのに望ましい。
あいにく、完全なリストを記録すると、完全性メトリックを記録するのに必要な時間が増加し、検証ステートメントに必要とされるストレージが増加し、そのいずれかまたは双方は望ましくない場合がある。
したがって、より古いステートメントをリンクリストから取り除くことが望ましい場合があり、究極的には、リンクリストを単一のステートメント（最も近時にリンクされたステートメント）に削減することが望ましい場合がある。
【００７０】
任意の個数のステートメント（１つだけのステートメントを含む）が、連続した順序で記録された同じリンクリストの連続的なメンバーである限り、それらのステートメントをＴＰＭに記録することができる。
測定の信頼ルートまたは測定エージェントによって実行される記録プロセスは、リストの長さに容易に適合される。
ＲＴＭ／ＭＡは、リストの長さがどれ程であろうと、リストを単にウォークスルーして、前述したように、ＴＰＭの検証プロセスの結果を記録し、ＴＰＭの検証プロセスを記録する。
短縮されたリンクリストが、元の（長い）リンクリストと同等の信頼性を有することをＴＰＭに証明することが残っている。
この証明は、短縮されたリストの先頭ステートメントが長いリストの一部であることの証拠に依存する。
一実施態様では、これは、（前述した）[Ulinked, Slogn, Sstartshort]構造体を伴う。
ここで、Sstartshortは、短縮されたリストの先頭ステートメントであり、Slongは、長いリストのSstartshortの前の或るステートメントである。
このUlinked構造体は、ステートメントSlongおよびSstartshortが同じリンクリストのステートメントであることの証拠であり、SlongがSstartshortの前におけるリストの或る場所に現れることの証拠である。
ステートメントSlongが、リンクリストにおいてステートメントSstartshortと連続していない場合、このUlinked構造体を生成するには、２つのUlinked構造体を結合して単一のUlinked構造体にするさらに新しいコマンド（後述する）が必要とされる。
証拠[Ulinked, Slong, Sstartshort]および任意のUfork構造体[Ufork, A~, B~, B, C~, C]が与えられると、その結果として、Ｂ〜をSlongで拡張し、Ｃ〜をSstartshortで拡張することによりさらに妥当なUfork構造体を導出することができ、データ構造体[Ufork, A~, Slong~, Slong, Sstartshort~, Sstartshort]が作成される。
これには、さらに新しいコマンド（後述する）が必要とされる。
たとえば、Slongがリンクリストの先頭であり、且つ、Sstartshotがそのリンクリストの短縮バージョンの先頭である場合、[Ufork, A~, Slong~, Slong, Sstartshort~, Sstartshort]は、ＰＣＲ（その最も近時に記録されたステートメントは第１のリストの先頭である）が、別のＰＣＲ（その最も近時に記録されたステートメントはその第１のリストの短縮バージョンの先頭である）と同等の信頼性を有することの証拠である。
データ構造体[Ufork, A~, Slong~, Slong, Sstartshort~, Sstartshort]は、その後、Ufork構造体に対して操作を行う任意のコマンドと共に使用することができる。
【００７１】
所与のリストからの単一のステートメントのみがＴＰＭ）に記録される限られた場合に、コマンドTPM_upgrade_forkLinkによって提供される機能は冗長になる。
前述したこの新しい構造体は、ステートメント値を除外するように変更することができる。
このような場合、たとえば、Ufork構造体[Ufork, A~, B~, B, C~, C]は[Ufork, A~, B~, C~]になる。
【００７２】
２つのUlinked構造体を結合して単一のUlinked構造体にするさらに新しいコマンドが必要とされ得ることを前述した。
そのさらに新しいコマンドの一例は、TPM_upgrade_link_concat([Ulinked, A, B], [Ulinked, C, D])である。
このコマンドは、完全性メトリックＤが完全性メトリックＡにリンクされることの証拠を作成する。
この証拠は、データ構造体[Ulinked, A, D]の形を取る。
この証拠を作成するために、ＴＰＭには、ステートメント（[Ulinked, A, B]および[Ulinked, C, D]）がロードされる。
ＴＰＭは、これらの双方のUlinked構造体がＴＰＭによって作成されたことを検証し、B==Cであることを検証する。
その後、ＴＰＭは、出力構造体[Ulinked, A, D]を作成する。
【００７３】
第１のＰＣＲ値を第１のステートメントで拡張し、第１のＰＣＲと同等の信頼性を有する第２のＰＣＲを、第１のステートメントにリンクされる第２のステートメントで拡張するさらに新しいコマンドが必要とされ得ることを前述した。
そのさらに新しいコマンドの一例は、TPM_upgrade_forkLink1([Ufork, A~, B~, B, C~, C], [Ulinked, E, F], [branch])である。
このコマンドは、ＴＰＭに、[branch]ＰＣＲ値をステートメントＥで拡張させ、他方のＰＣＲ値をステートメントＦで拡張させる。ＴＰＭは、それが、あらゆる出力を作成する前に、Ufork構造体およびUlinked構造体の双方を作成したことを常に検証する。
[branch]パラメータが０である場合、このコマンドは、ＰＣＲ値Ｂ〜をＥで[E~, E]に拡張し、ＰＣＲ値Ｃ〜をＦで[F~, F]に拡張する。
したがって、このコマンドは、出力データ[Ufork, A~, E~, E, F~, F]を作成する。
[branch]パラメータが１である場合、そのコマンドは、ＰＣＲ値Ｂ〜をＦで[F~, F]に拡張し、ＰＣＲ値Ｃ〜をＥで[E~, E]に拡張する。
したがって、このコマンドは、出力データ[Ufork, A~, F~, F, E~, E]を作成する。
【００７４】
次に、本発明者らは、単なる一例として、リンクリストの単一のステートメントしかＴＰＭに記録されていない場合のＰＣＲのアップグレードを説明する。
本発明者らは、完全性メトリックシーケンスＡ０  Ｂ０が完全性メトリックシーケンスＡ０  Ｂ１と同等の信頼性を有することを証明する必要があるものと仮定する。
この例は、上述したように、ステートメントフィールドを除外する、変更されたデータ構造体を使用する。
一実施態様は、以下の通りである。
１．TPM_upgrade_extend(R~, A0) => [Uextend, R~, A0~]
２．TPM_upgrade_forkRoot(Uextend, R~, A0~) => [Ufork, R~, A0~, A0~]
３．TPM_upgrade_link(B0, B1) => [Ulinked, B0, B1]
４．TPM_upgrade_forkLink([Ufork, R~, A0~, A0~], [Ulinked, B0, B1], [0]) => [Ufork, R~, B0~, B1~]
５．TPM_upgrade_forkPCR([Ufork, R~, B0~, B1~], P) => [uPCR, P, B0~, B1~]
その後、構造体[uPCR, P, B0~, B1~]をTPM_upgrade_forkHashと共に使用して、同等の信頼性を有する合成ＰＣＲダイジェスト値を作成することができる。
その後、これらの値をTPM_upgrade_sealに使用して、シールされているブロブの合成ハッシュ値をアップグレードすることができる。
【００７５】
本発明の前の実施形態は、リンクリストを１つのプログラムのみの実行に関連付けていた（リンクリストの複数のステートメントに関係した態様がＴＰＭに記録されていても、リンクリストごとに１つのプログラムしか、ＴＰＭをホスティングするコンピュータ上で実際には実行されない）。
本発明のさらなる実施形態は、リンクリストの連続的なステートメントのセクションの識別を伴い、これには、そのセクションにおけるステートメントごとに１つのプログラムのコンピュータ上での実行が付随する。
これは、同じエンティティが、同等の信頼性を維持しながら、プラットフォーム上で実行される複数のプログラムを保証することを可能にするという利益を有する。
好ましくは、たとえセクションが１つのステートメントしか含まない場合であっても、図７に示すステートメント構造体は、リンクリストのセクションを区別する特別なデータを含むように変更される。
このデータは、たとえば、同じセクションのすべてのメンバーについては同じ値であるが、リストの異なる連続したセクションについては異なる値とすることができる。
このデータによって、リストを構文解析してセクションにすることが可能になる。
【００７６】
ＲＴＭまたは測定エージェントが、リンクリストをウォークスルーして、ステートメントを検証し、ＴＰＭの結果を記録すると、ＲＴＭまたは測定エージェントは、リンクリストのセクションを識別することができる。
セクションの各ステートメントは、別個のプログラムを実際に検証するのに使用することができ、このような各プログラムはコンピュータが実行することができる。
これによって、エンティティは、それぞれの個々のプログラムごとに別個のリンクリストを作成する必要なく、同じリンクリストを使用して、プラットフォーム上に実行される複数の連続したプログラムを保証することが可能になる。
また、これによって、エンティティは、単一のプログラムを、その単一のプログラムと同等の信頼性を有する複数のプログラムと交換することが可能になる。
これを行うために、エンティティは、元の単一のプログラムに関連するリストにリンクされる、交換プログラムの個数と等しい個数の連続的なリンクされるステートメントを含むリンクリストのセクションを提供する。
プラットフォームのＲＴＭまたは測定エージェントは、セクションの各ステートメントを検証し、セクションの各ステートメントに対応する各プログラムを検証し、ＴＰＭに検証結果を記録し、そして、それらのステートメントによって検証されるプログラムを実行する。
本発明の実施形態に関して前述した技法を次に使用して、複数のプログラムでブートされたプラットフォームが、元の単一のプラットフォームでブートされたプラットフォームと同等の信頼性を有することの証明を通じてＴＰＭをガイドすることができる。
【００７７】
リンクリストの同じセクションの複数のステートメントが、プラットフォームで実行される複数のプログラムを保証するのに使用される場合、そのセクションのステートメントは、別個のリンクリストのブランチのステム（stem）として動作することができる。
各ブランチは、セクションの別個のステートメントにリンクされている。
このようなブランチを使用して、リンクリストのセクションごとに１つのプログラムのみを実行することをサポートすることもできるし、ちょうど説明したように、リンクリストのセクションごとに複数のプログラムの実行をサポートすることもできる。
したがって、ステートメントのリンクツリーを作成することができる。
【００７８】
本発明のさらなる実施形態では、プログラムが、コンピュータプラットフォームでもはや実行されない場合に、エンティティは、検証ステートメントを使用して、プラットフォームの信頼状態が変更されないことを保証することができる。
この手法によって、同等の信頼性を有する状態が、前の状態よりも少ないプログラムを含むことが可能になる。
【００７９】
本発明のこの実施形態では、programDigests７１０フィールドは、NULL指示子を含むことが可能である。
NULL指示子は、関連するプログラムを実行する必要がないこと、検証結果をＴＰＭに記録する必要がないこと、および、検証値をＴＰＭに記録する必要がないことを暗に意味するので、ＲＴＭまたは測定エージェントは、NULL指示子を含むステートメントに決して遭遇すべきではない。
NULL指示子を含むステートメントは、ＴＰＭが、２つのＰＣＲ値が同等の信頼性を有することを証明するプロセスを通じてガイドされる時に使用される。
コマンドTPM_upgrade_link(SA, SB)は、ステートメントＳＡのprogramDigests７１０フィールドがNULLフラグしか含まない場合には、出力データ[Ulinked, NULL, B]を作成し、ステートメントＳＢのprogramDigests７１０フィールドがNULLフラグしか含まない場合には、出力データ[Ulinked, A, NULL] を作成するように変更される。
コマンドTPM_upgrade_forkLink([Ufork, A~, B~, B, C~, C], [Ulinked, E, F], [branch])は、ＥがNULLである場合に、Ｅで更新されることになっているブランチが不変とされるように変更され、ＦがNULLである場合に、Ｆで更新されることになっているブランチが不変とされるように変更される。
【００８０】
単に例として、本発明者らは、プログラムＢ０の削除前のコンピュータ状態が、プログラムＢ０の削除後のコンピュータ状態と同等の信頼性を有することの証明を通じてＴＰＭをガイドする一方法を説明する。
プラットフォームがブートして、第１の組の完全性メトリック[A0]、[B0]、[C0]、[D0]を生成するものと仮定する。
その後、プラットフォームは、リブートして、第２の組の完全性メトリック[A0]、[C0]、[D0]を生成する。
この第２の組は、Ｂ１==NULLである場合に、[A0]、[B1]、[C0]、[D0]と同じである。
目標は、第１の組の完全性メトリック[A0]、[B0]、[C0]、[D0]が第２の組の完全性メトリック[A0]、[NULL]、 [C0]、[D0]と同等の信頼性を有することをＴＰＭに証明することである。
一実施態様は、以下のシーケンスを含む。
１．TPM_upgrade_forkRoot(Uextend, R~, A0~, A0) => [Ufork, R~, A0~, A0, A0~, A0]
２．TPM_upgrade_link(B0, B1) => [Ulinked, B0, NULL]
３．TPM_upgrade_forkLink([Ufork, R~, A0~, A0, A0~, A0], [Ulinked, B0, NULL], [0]) => [Ufork, R~, B0~, B0, A0~, A0]
４．TPM_upgrade_forkExtend([Ufork, R~, B0~, B0, A0~, A0], [C0]) => [Ufork, R~, X(B0~, C0), C0, X(A0~, C0), C0]
証明の残りは、前述の通り進む。
【００８１】
本発明の実施形態は、３つのタイプのアップグレードを可能にしている。
「substitute（代用）」、この場合、１つのプログラムが、１つの同等の信頼性を有するプログラムと交換される。
「more（より多い）」、この場合、１つのプログラムが、２つ以上の同等の信頼性を有するプログラムと交換される。
「less（より少ない）」、この場合、１つのプログラムが削除されるが、その結果の状態は、それでも同等の信頼性を有する。
【００８２】
本発明のさらなる実施形態では、シールされているデータを作成するエンティティは、シールされているデータの自動的な合成ハッシュアップグレードが許可された場合、アップグレードのタイプを明示的に提示し、データ構造体は、行われた完全性メトリックアップグレードのタイプを示す指示子を記録する。
これによって、エンティティは、シールされているデータの合成ハッシュ値の自動的なアップグレードを引き起こすことができるアップグレードのタイプを明示的に提示できる。
これは、たとえば、データ所有者が、プログラムの簡単なアップグレードは喜んで受け付けるが、プログラムの追加若しくは削除は受け付けない場合、または、どのアップグレードも自動的に受け付けたくない場合に有益である。
【００８３】
データのシール、データのアンシール、および、或る合成ハッシュ値が別の合成ハッシュ値と同等の信頼性を有することを証明するプロセスを通じたＴＰＭのガイドのプロセスは、上述したものと同じであるが、以下の変更点を有する。
データ構造体[Ufork, A~, B~, B, C~, C], [uPCR, PCR-index, A~, B~], [Uhash, compHash, compHash&, PCR-indexList]は、フラグ「substitute」、「more」、および「less」を含むように変更される。
コマンドTPM_upgrade_forkRootは、出力Ufork構造体の「substitute」フラグ、「more」フラグ、および「less」フラグをFALSEに設定するように変更される。
コマンドTPM_upgrade_forkLinkは、以下のように変更される。
そのコマンドは、或るステートメントを１つの同等の信頼性を有するステートメントと交換する時に、出力Ufork構造体においてsubstituteをTRUEに設定する。
そのコマンドは、或るステートメントを２つ以上の同等の信頼性を有するステートメントと交換する時に、出力Ufork構造体においてmore＝TRUEに設定する。
そのコマンドは、或るステートメントを削除する時、出力Ufork構造体においてless＝TRUEに設定する。
コマンドTPM_upgrade_forkPCRは、当該コマンドが、「substitute」フラグ、「more」フラグ、および「less」フラグの状態を入力Ufork構造体から出力uPCR構造体にコピーするように変更される。
コマンドTPM_upgrade_forkHashは、当該コマンドが、入力uPCR構造体の「substitute」フラグ、「more」フラグ、および「less」フラグの状態を出力Uhash構造体にコピーするように変更される。
既存のＴＣＧ構造体TPM_STORED_DATAおよび／またはTPM_STORED_DATA12は、フラグ「substitute」、「more」、および「less」を含む新しいupgradeOptionsフィールドの追加によって変更される。
upgradeOptions=>substituteがFALSE（デフォルト値）である場合において、プログラムの１対１の交換が合成ハッシュの変更に貢献したときは、TPM_STORED_DATA_UFLAGSの合成ハッシュ値を自動的に更新してはならない。
upgradeOptions=>moreがFALSE（デフォルト値）である場合において、プログラムの１対多の交換が合成ハッシュの変更に貢献したときは、TPM_STORED_DATA_UFLAGSの合成ハッシュ値を自動的に更新してはならない。
upgradeOptions=>lessがFALSE（デフォルト値）である場合において、プログラムの削除が合成ハッシュの変更に貢献したときは、TPM_STORED_DATA_UFLAGSの合成ハッシュ値を自動的に更新してはならない。
既存のＴＣＧコマンドTPM_SealおよびTPM_Unseal並びに新しいコマンドTPM_upgrade_sealは、それらのコマンドが、変更されたTPM_STORED_DATA構造体に対して操作を行うように変更される。
TPM_Sealは、特別な入力パラメータ「substitute」、「more」、および「less」を含むように変更される。
これらの特別な入力パラメータの状態は、出力TPM_STORED_DATA構造体の同じ名前を有するパラメータにコピーされる。
TPM_Unsealのオペレーションは変更されない。
TPM_upgrade_sealは、以下のように変更される。
upgradeOptions=>substituteがFALSEであるが、Uhash=>substituteがTRUEである場合、そのコマンドは失敗する。
upgradeOptions=>moreがFALSEであるが、Uhash=>moreがTRUEである場合、そのコマンドは失敗する。
upgradeOptions=>lessがFALSEであるが、Uhash=>trueがTRUEである場合、そのコマンドは失敗する。
【００８４】
本発明のさらなる実施形態では、シールされているデータを作成するエンティティは、シールされているデータの合成ハッシュ値の変更を強制することを選ぶことができる。
これによってエンティティは、たとえば、アップグレードされたプログラムによる、現存しているシールされているデータへのアクセスを明示的に承認することが可能になる。
データのシールおよびアンシールのプロセスには、以下の変更が必要とされる。
既存のＴＣＧ構造体TPM_STORED_DATAおよび／またはTPM_STORED_DATA12は、標準的なＴＣＧ認可値を含む新しいupgradeAuthフィールドの追加によって変更される。
既存のＴＣＧコマンドTPM_SealおよびTPM_Unsealは、変更されたTPM_STORED_DATA構造体に対して操作を行うように変更される。
既存のＴＣＧコマンドTPM_Sealは、（通常通り暗号化されている）特別な入力パラメータupgradeAuthを含むように変更される。
TPM_Unsealのオペレーションは変更されない。
【００８５】
新しいＴＰＭコマンドTPM_upgrade_SealForce([selaedBlob], compHash)は、sealedBlobのupgradeAuthと同じ値の所有を証明する標準的なＴＣＧ認可プロトコルを使用して認可される。
ＴＰＭは、既存のsealedBlobをオープンし、既存の合成ハッシュ値を値compHashと交換し、変更された、シールされているブロブを出力する。
【００８６】
自動的な合成ハッシュアップグレードは、現在、ＴＣＧ技術では可能でなく、幾人かのデータ所有者は、シールされているブロブを自動的にアップグレードできないことを了解した上で、シールされているブロブを使用していたことがある。
ＴＣＧは、可能な限り、下位互換性を維持する意図を提示してきた。
したがって、既存のコマンドおよび構造体を使用して、シールされているブロブの自動的なアップグレードを可能にすることは望ましくない。
データ構造体およびコマンドの新しいバージョンを作成して、本発明の実施形態について説明した技法を実施することが望ましい。
データ所有者は、自動的なアップグレードを可能にしたい場合には、これらの新しい構造体およびコマンドを使用すべきであり、自動的なアップグレードを可能にしたくない場合には、既存の構造体およびコマンドを使用し続けるべきである。
また、ＴＣＧは、単に今後のＴＰＭに対して、既存のTPM_STORED_DATA構造体並びにTPM_SealコマンドおよびTPM_Unsealコマンドを軽視（deprecate）したい場合もある。
したがって、自動的なアップグレードを可能にするように設計されるどの新しい構造体およびコマンドも、自動的なアップグレードを無効にすることを可能にすべきでもある。
自動的なアップグレードの一部または全部の形式を信頼しないデータ所有者は、明示的なアップグレードを使用したい場合がある。
この明示的なアップグレードは本質的に新しいデータ構造体を必要とする。
したがって、どの新しい構造体およびコマンドも、明示的なアップグレードを可能にすべきである。
したがって、好ましくは、
既存のTPM_STORED_DATA構造体および／またはTPM_STORED_DATA12構造体は、上述したように変更されないが、TPM_STORED_DATA構造体および／またはTPM_STORED_DATA12構造体をフィールドupgradeOptionsフィールドおよびupgradeAuthフィールドで増大させることによって、新しい構造体（たとえば、TPM_STORED_DATA_UPGRADE）が作成される。
TPM_SEALおよびTPM_Unsealは、上述したように変更されないが、TPM_SEALおよびTPM_UnsealをupgradeOptionsフィールドupgradeAuthフィールドで増大させることによって、新しいコマンドが作成される。
この新しいコマンドは、TPM_STORED_DATA_UPGRADE構造体に対して操作を行うべきである。
コマンドTPM_upgrade_sealおよびTPM_upgrade_SealForce([sealedBlob], compHash)は、TPM_STORED_DATA_UPGRADE構造体に対してのみ操作を行うべきである。
【００８７】
次に、完全性メトリックおよびＰＣＲ値のアップグレードの一例を説明する。
これは、或るホストトラステッドプラットフォームから別のホストトラステッドプラットフォームへの仮想プラットフォームのマイグレーション中に行われる。
この例は、仮想プラットフォームが、ホストプラットフォームのプロパティを表すＰＣＲ値にシールされているデータブロブを使用するものと仮定する。
本発明の実施形態によって、これらのシールされているデータブロブに記録されたＰＣＲ値を、それらのデータブロブを現在アンシールすることができる環境なしでアップグレードすることが可能になる。
したがって、本発明の実施形態を使用する利点は、異なるホストプラットフォームへのマイグレーションの前後のいずれかにおいて、異なるホストプラットフォーム上で機能するように仮想プラットフォームをカスタマイズできることである。
【００８８】
顧客が仮想プラットフォームを信頼する意志がある場合、その顧客は、ホストプラットフォームを管理するエンティティを信頼すべきである。
これは、その管理エンティティが、仮想プラットフォームを異なるホストプラットフォームへ移動させる能力を有するからである。
管理エンティティは、等しく信頼できるホストプラットフォーム上に仮想プラットフォームをインスタンス化することを引き受けるべきであることが望ましい。
これは、ローグホストプラットフォーム（rogue host platform）が、自身がホスティングするどの仮想プラットフォームも破壊でき、仮想プラットフォームがローグホストプラットフォームまたはローグ管理エンティティから自身を保護することを何も行えないからである。
したがって、仮想プラットフォームを使用する顧客は、ホストプラットフォームの知識を必要としない。
管理エンティティは、等しく信頼できるホストプラットフォーム上で仮想プラットフォームをインスタンス化するか、または、それを行わない。
【００８９】
サードパーティは、完全性の誰何を行って、返されるＰＣＲ値、イベントログ、および証明書を検査することにより、プラットフォームの信頼プロパティを発見する。
プラットフォームが仮想であるか否か（さらには、それ自体が仮想である場合があるホストプラットフォームの性質）を明らかにする情報は、仮想プラットフォームのＰＣＲに存在することができ、且つ／または、仮想プラットフォームの証明書に存在することができる。
【００９０】
ホスト管理エンティティに対して、セキュリティサービス同意についての情報を仮想プラットフォームのＰＣＲスタックに入れることからの利点が存在する。
この利点は、そうすることによって、同意されたセキュリティレベルを維持しつつ、コンピューティング負荷をバランスさせることが容易になるということである。
仮想プラットフォームのユーザは、当該ユーザが同意したセキュリティサービスレベル同意（ＳＳＬＡ）を示すＰＣＲにユーザのデータをシールすることができる。
ＳＳＬＡの制限が少ないほど、ユーザをサポートできるホストプラットフォームの範囲が大きくなり、ホストエンティティがサービスを提供し、ホストプラットフォーム間で仮想プラットフォームを交換することが容易になる。
仮想プラットフォームの実際のＳＳＬＡ  ＰＣＲ値が、シールされているデータブロブのユーザのＳＬＡ値と一致する場合、ユーザは、自身のデータにアクセスすることができ、プラットフォームの資源を消費することができる。
そうでない場合、ユーザはそれらを行うことができない。
したがって、ホスト管理エンティティが、ユーザのＳＳＬＡを満たさないホストに顧客を移動させた場合、ユーザのデータが不適切な環境で使用されることが自動的に防止される。
【００９１】
ＳＳＬＡで表すことができるファクタは以下のものを含む。
仮想ＴＰＭのタイプ
ＩＰアドレス
起動時間
地理的ロケーション
仮想ＬＡＮの存在
仮想ＬＡＮのタイプ
仮想プラットフォームをクローン化できるか否か
プラットフォームアルゴリズムアジリティ（platform algorithm agility）
【００９２】
顧客に対して、ホストプラットフォームについての情報を仮想プラットフォームのＰＣＲスタック内に入れることからの不利な点が存在する。
これは、仮想プラットフォームのＰＣＲスタックが、専用（非仮想）プラットフォームのＰＣＲスタックとは異なり、したがって、専用プラットフォームと共に動作するように構成されるソフトウェアが、仮想プラットフォームで通常通り動作しないからである。
【００９３】
設計者の中には、ホスティングされた仮想プラットフォームの証明書にホストプラットフォームについての情報を入れることにする者、ホスティングされた仮想プラットフォーム上のＰＣＲにホスト情報を入れることにする者、およびその双方を行うことを選ぶ者もいるであろう。
【００９４】
設計者が、ホスティングされた仮想プラットフォーム上のＰＣＲにホスト情報を入れ、且つ、ユーザがそれらのＰＣＲにシールされているデータブロブを作成する場合において、デスティネーションのホストプラットフォームのプロパティが、ソースのホストプラットフォームのプロパティと少なくとも同等であるとき、それらのＰＣＲ値をアップグレードすることが望ましい。
これは、前述した技法の使用によって行うことができる。
前述したＰＣＲおよび完全性メトリックのアップグレード技法は、シールされているデータによって現在記述されている環境の存在を必要としないので、特に好都合である。
したがって、仮想プラットフォームを、新しいホストにマイグレーションすることができ、仮想プラットフォームがその新しいホストに達した時に再作成することができ、その逆も同様である。
【００９５】
ホスト管理エンティティに対するこの利点の１つの効果は、条項（terms）が、プラットフォームのＰＣＲスタックに存在している仮想プラットフォームの許可されたインスタンス化についての情報に同意している場合に、ホスト管理エンティティが、当該ホスト管理エンティティによって提供される仮想プラットフォームを使用して顧客に好ましい条項を提供できるということである。
したがって、ユーザのシールされているデータブロブが、その値がプラットフォームの許可されたインスタンス化についての情報を表すＰＣＲを常に含む場合に、たとえプラットフォームが専用プラットフォームであっても、ユーザは、すべてのプラットフォーム上で同じソフトウェア構成を使用することができ、仮想プラットフォームを使用する時に好ましい条項を利用することができる。
もちろん、この技法は、顧客が、異なるタイプの専用プラットフォーム上で自身のシールされているデータを使用することも可能にする。
【００９６】
次に、単に一例として、本発明者らは、或るホストトラステッドプラットフォームＰ１から別のホストトラステッドプラットフォームＰ２への仮想プラットフォームＶＰのマイグレーションを説明する。
示されるプラットフォームの要素を図１１に概略的に示す。
プラットフォームＰ１は、物理プラットフォームまたは仮想プラットフォームとすることができる。
プラットフォームＰ２は、物理プラットフォームまたは仮想プラットフォームとすることができる。
ホストプラットフォームは、ＴＰＭ（Ｐ１上のＴＰＭ−Ｐ１およびＰ２上のＴＰＭ−Ｐ２と呼ばれる）を含む。
仮想プラットフォームＶＰは、主仮想プラットフォームコンピューティング環境ＶＰＣＥおよび仮想トラステッドプラットフォームモジュール（ＶＴＰＭ）を備える。
そのホストプラットフォームの少なくとも１つのプロパティは、ＶＴＰＭのＰＣＲに記録される。
ＶＰＣＥは、ＶＴＰＭによって保護され、且つホストプラットフォームのプロパティに依存したＰＣＲ値にシールすることができるデータブロブを含む。
ホストプラットフォームは、ＶＰＣＥおよびＶＴＰＭを互いに分離し、且つ、ホストプラットフォームの他の部分から分離する。
ホストプラットフォームは、別の分離されたコンピューティング環境で実行されるマイグレーションプロセスＭＰ（Ｐ１上のＭＰ−Ｐ１およびＰ２上のＭＰ−Ｐ２と呼ばれる）を含む。
分離を提供するホストプラットフォームのコンポーネントは、仮想化コンポーネント（ＶＣ）（Ｐ１上のＶＣ−Ｐ１およびＰ２上のＶＣ−Ｐ２と呼ばれる）である。
ホストプラットフォームのＴＰＭのＰＣＲ値は、そのＭＰおよびＶＣの状態を表すのに必要なすべてのデータを含む。
【００９７】
ＶＰは、最初に、Ｐ１上でインスタンス化される（ユーザの要求に応じて、または、プロバイダからのメンテナンスオペレーションとして）。
ＶＰをマイグレーションする必要がある場合、マイグレーションプロセスＭＰ−Ｐ１は、まず、Ｐ１上のＶＰＣＥの実行をサスペンドし、次に、対応するＶＴＰＭをサスペンドする。
ＶＰＣＥのサスペンドが、いかなる追加ステップをも必要としない場合があるのに対して、ＶＴＰＭのサスペンドは、ＶＴＰＭによって使用されるあらゆる機密VTPM-Secretsをメモリから確実に削除して、ＴＰＭ−Ｐ１によって確実に保護されるようにしなければならない。
ＭＰ−Ｐ１は、次に、図１２に示すように、以下のステップを実行することによって、ＶＰをＰ１からＰ２にマイグレーションする。
【００９８】
１）デスティネーションプラットフォームＰ２が、適した真正のトラステッドプラットフォームであることをチェックして（１２１０）、構成証明アイデンティティ鍵の１つを得る。
【００９９】
ＭＰ−Ｐ１がまだＰ２を信頼しておらず、そのＴＰＭ鍵の１つを知らない場合、Ｐ１は、Ｐ２との誰何応答プロトコルを使用して、Ｐ２が妥当なトラステッドプラットフォームであるか否か（すなわち、ＴＰＭ−Ｐ２およびＰ２の構成がＭＰ−Ｐ１によって信頼されるか否か）を判断する。
この誰何応答プロセスは、Ｐ２が特定のタイプの真正なトラステッドプラットフォームであることの証拠およびＰ２の特定のＴＰＭ鍵の詳細をＭＰ−Ｐ１に提供する。
【０１００】
２）ＶＴＰＭによって保護されている、シールされているブロブの完全性メトリックをアップグレードする（１２２０）。
【０１０１】
Ｐ２によって提供されるプロパティが、ＶＴＰＭにシールされている個々のデータブロブのＰＣＲ値に記録されるホストプロパティと同等である（またはホストプロパティのスーパーセットである）場合、ＭＰ−Ｐ１は、それらの個々のＶＴＰＭのシールされているブロブをアップグレードし、Ｐ２によって提供されるプロパティを示すＰＣＲ値を含む新しいシールされているブロブを作成する。
これは、アップグレード方法に応じて、シールされているブロブに関連するアップグレードエンティティからの明示的な認可を必要とする場合もあるし、必要としない場合もある。
【０１０２】
３）VTPM-SecretsをＰ１からＰ２へマイグレーションする（１２３０）。
【０１０３】
ＭＰ−Ｐ１は、VTPM-Secretsに対してＴＰＭ−Ｐ１からＴＰＭ−Ｐ２へのマイグレーションコマンドを実行し、その結果のデータをＭＰ−Ｐ２へ送信する。
ＭＰ−Ｐ２は、受信データをＴＰＭ−Ｐ２に提供することによってマイグレーションプロセスを終了する。
Ｐ２がＭＰ−Ｐ２およびＶＣ−Ｐ２の所望のバージョンを実行していない限り、標準的なＴＣＧ技法を使用して、VTPM-SecretsがＰ２で利用可能でないことが確実にされる。
【０１０４】
４）ＭＰ−Ｐ１は、ＶＰＣＥおよびＶＴＰＭを表すデータをＰ２へ送信する（１２４０）（且つ、ＭＰ−Ｐ２はＶＴＰＭを実行する）。
【０１０５】
ＭＰ−Ｐ２は、このデータを使用して、ＶＰＣＥおよびＶＴＰＭのインスタンスを作成することにより、Ｐ２においてＶＰの同一のインスタンスを作成する。
次に、ＭＰ−Ｐ２はＶＴＰＭ実行を再開する。
再開時において、ＶＴＰＭは、VTPM-Secretsをメモリ内に再ロードすることを試みる。
再ロードの失敗は、Ｐ２のＶＰ環境が受け付けることができないことを示す。
再ロードが成功した場合、ＭＰ−Ｐ２はＶＰＣＥを再開し、ＶＰＣＥは、次に、ＶＴＰＭを使用して、Ｐ１に存在する場合にＶＴＰＭによって保護される機密にアクセスすることができる。
最後に、ＶＰ上のアプリケーションは、ＶＴＰＭによって保護されている、シールされているブロブに記憶されているデータのアンシールを試みる。
失敗は、Ｐ２が、その特定のシールされているデータを明らかにするのに適していないことを示す。
【０１０６】
ステップ２および３は、逆の順序で実行できることに留意されたい。
この場合、VTPM-sealedブロブは、Ｐ２上でアップグレードされる前に、Ｐ２へマイグレーションされる。
【０１０７】
上述した方法は、明らかに、完全性メトリックを含むかまたは完全性メトリックから導出されるどのデータ構造体のアップグレードにも適用および適合することができる。
このような方法は、或る完全性メトリックが別の完全性メトリックと同等の信頼性を有すること、或るＰＣＲ値が別のＰＣＲ値と同等の信頼性を有すること、および或るPCR_COMPOSITE値が別のPCR_COMPOSITE値と同等の信頼性を有することの証拠を提供するのに使用することができる。
したがって、これらの方法は、完全性メトリック、ＰＣＲ値、およびPCR_COMPOSITE値に依存する任意のデータ構造体をアップグレードするのに使用することができる。
アップグレードできる他のデータ構造体のいくつかの例は、ＴＣＧ鍵構造体TPM_KEY、TPM-KEY12、およびそれらの補助構造体等、PCR_COMPOSITE値に依存するＴＣＧ構造体である。
TPM_upgrade_sealに類似したＴＰＭコマンドは、たとえば、TPM-KEY構造体のPCR_COMPOSITE値をアップグレードするのに使用することができる。
鍵構造体のアップグレードは、たとえば、元の環境が利用不能である場合、データがバックアップから復元された場合、または、データが異なるシステムで複製された場合に望ましい場合がある。
詳細には、マイグレーション可能な鍵を、バックアップおよび復元を容易にするのに使用することができ、且つ（異なるプラットフォームまたは異なるオペレーティングシステムにおける）データの複製に使用することができる。
TPM_CreateMIgrationBlobおよびTPM_CMK_CreateBlob等の現在のＴＣＧ鍵マイグレーションコマンドは、PCR_COMPOSITE値を明示的に無視する。
したがって、ＴＣＧトラステッドプラットフォーム技術は、本発明の実施形態で説明した、ＴＰＭ鍵構造体の合成ＰＣＲ値を変更する方法から利益を得ることができる。
【図面の簡単な説明】
【０１０８】
【図１】本発明の実施形態と共に使用するのに適した１つの例示的な従来技術のコンピュータプラットフォームの図である。
【図２】本発明の実施形態と共に使用するのに適した従来技術のトラステッドコンピュータプラットフォームのマザーボード上に存在する機能要素を示す。
【図３】本発明の実施形態と共に使用するのに適した図２のトラステッドコンピュータプラットフォームのトラステッドデバイスの機能要素を示す。
【図４】本発明の実施形態と共に使用するのに適した図２のトラステッドコンピュータプラットフォームのプラットフォーム構成レジスタに値を拡張するプロセスを示す。
【図５】本発明の実施形態による完全性メトリックを記録するプロセスを示す。
【図６】本発明の実施形態による同等の信頼性を有する二組の完全性メトリックおよび第２の組の実施形態を示す。
【図７】本発明の実施形態による新しいソフトウェアまたは交換ソフトウェアを保証するステートメントを示す。
【図８】本発明の実施形態による、図５に示すタイプのステートメントのリンクリストを示す。
【図９】本発明の実施形態による、図８に示すタイプのステートメントのプライバシー強化バージョンを示す。
【図１０】本発明の実施形態による、同等の信頼性を有する二組の完全性メトリックの構成およびその結果の数組のＰＣＲ値の構成を示す。
【図１１】本発明の実施形態による、或る物理トラステッドプラットフォームから別の物理トラステッドプラットフォームへの仮想トラステッドプラットフォームのマイグレーションの概略図である。
【図１２】本発明の実施形態による、或る物理トラステッドプラットフォームから別の物理トラステッドプラットフォームへ仮想トラステッドプラットフォームをマイグレーションする方法を示す。
【符号の説明】
【０１０９】
１０・・・トラステッドプラットフォーム，
１４・・・キーボード，
１６・・・マウス
１８・・・視覚表示ユニット（ＶＤＵ），
２０・・・マザーボード，
２１・・・メインプロセッサ，
２２・・・メインメモリ，
２３・・・入出力（ＩＯ）デバイス，
２４・・・トラステッドデバイス，
２６・・・データバス，
２７・・・制御ライン，
２９・・・ＢＩＯＳメモリ，
２１２・・・メインメモリ，
３１・・・測定機能，
３４・・・インターフェース回路部，
４・・・揮発性メモリ，
３５０・・・証明書，
３５２・・・完全性メトリック，
３５３・・・識別（ＩＤ）ラベル，
３５４・・・ハッシュプログラム，
３５５・・・私有鍵，
３６，３７，３８・・・ポート，
５０１・・・測定エージェント，
５０２・・・デジタルオブジェクト，
５０３・・・検証ステートメント，
５０６・・・ＰＣＲ，
５０５・・・フラグ，
６０１，６０２・・・完全性メトリック，
７０１，８０１、８０２、８０３・・・ステートメント，
７３２・・・補助構造体，
９・・・プラットフォーム構成レジスタ，
９１０・・・補助ステートメント，
１００１，１００２・・・完全性メトリック，
【図１】
2008535049.tif 000003
【図２】
2008535049.tif 000004
【図３】
2008535049.tif 000005
【図４】
2008535049.tif 000006
【図５】
2008535049.tif 000007
【図６】
2008535049.tif 000008
【図７】
2008535049.tif 000009
【図８】
2008535049.tif 000010
【図９】
2008535049.tif 000011
【図１０】
2008535049.tif 000012
【図１１】
2008535049.tif 000013
【図１２】
2008535049.tif 000014
【国際調査報告】
2008535049.tif 000015
2008535049.tif 000016
2008535049.tif 000017