TPMがシステムの整合性測定を実行する方法を見つけようとしています。 TPM仕様には、PCRで測定したデータをどのように封印し、どのように更新するかが詳しく記載されています。しかし、私が説明を見つけることができないのは、TPMが最初に密閉している完全性測定を実際にどのように実行するかです。システムが特定の状態にあるかどうかを知るには、システムを測定する必要がありますが、それをどのように行うのですか?そしてそれは実際に何を測定するのですか?ほとんどの論文はこれについて光沢がないように見え、PCRデータに保存する準備ができてすぐに見えてしまうような気がします。
これには基本的に2つの方法があります。
[〜#〜] srtm [〜#〜]はシステムの起動時に行われます。ブート時に最初に実行されるものは、コアトラストオブトラストオブメジャメント(CRTM)と呼ばれ、BIOSブートブロックがBIOSを測定し、値( ハッシュ )をプラットフォームと呼ばれる場所のTPMに送信します実行前に構成レジスタ(PCR)0。次に、BIOSはブートチェーンの次のものを測定し、再度、TPMのPCRに値を格納します。このプロセスは、ブートシーケンスの各コンポーネント(PCIオプションROM、ブートローダーなど)に対して実行されます。
TrustedGrub は、TPMに適切な測定値を送信するTPM対応のブートローダーです。これは、BIOSからカーネルまで測定のチェーン(SRTM)を継続するために使用されます。
[〜#〜] drtm [〜#〜]は、システムの実行中に何かが発生するため、非常に異なります。 Intelの実装はTrusted Execution Technology( [〜#〜] txt [〜#〜] )と呼ばれていますが、AMDはSecure Virtual Machine(SVM)という名前を使用しています。 DRTMの目標は、信頼できない状態から信頼できる環境を作成することです。技術的には、セキュア/クリーンな状態を作成し、誰かが実行したいコードの一部(別名Measurementd Launched Environment-MLE)を報告(測定を提供-PCRのハッシュ)します。通常、MLEはオペレーティングシステム(カーネル、ユーザースペースなど)です。
詳細については説明しませんが、IntelのDRTMは、CPUとチップセットに特定のタスクセット(GETSEC)を実行するように指示する一連の新しいCPU命令(SMX)を呼び出すことで機能します。認証済みコードモジュール( [〜#〜] acm [〜#〜] )。この部分には、1つを除くすべてのCPUの無効化、および現在実行中のすべてのブロック/停止が含まれます:他のすべてのプロセス、割り込み、およびI/O( [〜#〜] iommu [〜#〜] を介して、例えば= DMA攻撃。)次に、すべてのCPUがクリーンな状態で再結合します-以前に実行されたものはすべて破棄されます。この時点で、この特別なコード(SINIT ACM)の署名が検証され、そのID(ハッシュ測定)が取得されますPCR 17のTPMに送信されます。その後、実行はALEに渡され、ACMはMLEを測定し、測定値をPCR 18のTPMに送信します。最後に、実行がMLEに渡されます。
Tboot は、インテルが作成したツール(DRTM)とTrustedGrub(SRTM)の代替ツールです。
これは、SRTM(TPM対応BIOS)でTPM対応のブートローダー(TrustedGrubなど)がなく、DRTM(Tbootなど)がない場合のPCR値の例です。
_# cat /sys/devices/pnp0/00:09/pcrs
PCR-00: A8 5A 84 B7 38 FC C0 CF 3A 44 7A 5A A7 03 83 0B BE E7 BD D9
PCR-01: 11 40 C1 7D 0D 25 51 9E 28 53 A5 22 B7 1F 12 24 47 91 15 CB
PCR-02: A3 82 9A 64 61 85 2C C1 43 ED 75 83 48 35 90 4F 07 A9 D5 2C
PCR-03: B2 A8 3B 0E BF 2F 83 78 29 9A 5B 2B DF C3 1E A9 55 AD 72 36
PCR-04: 78 93 CF 58 0E E1 A3 8F DA 6F E0 3B C9 53 76 28 12 93 EF 82
PCR-05: 72 A7 A9 6C 96 39 38 52 D5 9B D9 12 39 75 86 44 3E 20 10 2F
PCR-06: 92 20 EB AC 21 CE BA 8A C0 AB 92 0E D0 27 E4 F8 91 C9 03 EE
PCR-07: B2 A8 3B 04 BF 2F 83 74 29 9A 5B 4B DF C3 1E A9 55 AD 72 36
PCR-08: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-09: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-11: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-12: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-13: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-14: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-15: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-16: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-17: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
PCR-18: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
PCR-19: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
PCR-20: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
PCR-21: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
PCR-22: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
PCR-23: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
_
ご覧のとおり、PCR 0〜7は満たされていますが、PCR 8〜15は空です。これらはまだ0にリセットされています。DRTMは使用されていないため、PCR 17〜22は1で満たされています(f)。
これらのメカニズムのセキュリティは、PCR値を設定(または偽造)できないことができ、拡張(TPM_Extend()
)しかないという事実に依存しています。これは、測定値がTPMに送信されるたびに、PCRの現在の値と新しい測定値の連結のハッシュが格納されることを意味します(つまり、new_value = Hash(old_value || new_measurement)
)。明らかに、このすべての始まりがあります。
TPMがこれらの測定値を収集している間、それらはそれらに対してアクションを実行しないことを理解することが重要です-実際には、 それはできません 。これらの測定値はseal()
/unseal()
/quote()
オペレーションでのみ確認できます。TPMのPCRで測定が行われたので、 unseal()
操作は、正しいPCR値がTPMにある場合にのみアクセス可能なシークレットを公開します。これらは暗号化キーとして使用されます。これは基本的に、SRTM(BIOS、ブートローダー、カーネルなど)またはDRTM(SINITおよびMLE(カーネルなど))を介して適切な環境がロードされた場合にのみ、シークレットにアクセスできることを意味します。詳細については、この answer を参照してください。
TPMの主な仕様は、プラットフォームに依存しないことを意図しています。明らかにコンポーネントはプラットフォームごとに異なるため、起動時に実際に測定される内容の詳細は含まれていません。 PCのブート中に測定されるものに関心がある場合は、 従来のBIOSのTCG PCクライアント固有の実装仕様 のセクション1.3(測定プロセスの概要)を参照してください。
測定がどのように処理され、PCRに保存されるかについての詳細は、 TPMメイン仕様 に記載されています。パート1、セクション4.4(プラットフォーム構成レジスタ(PCR))から始めるのがよいでしょう。
また、TCGアーキテクチャの概要を見て全体像を把握することをお勧めします。ただし、これは質問とは直接関係ありません。
あなたの質問に対する最も直接的な答えは、TPMが測定を行わないことです。測定値とPCR値は、TPMがインストールされているプラットフォームに完全に固有のものです。
他の答えは、いくつかの確立されたシステムでこのプロセスを説明するのに優れていますが、簡単に言えば、TPMは160ビットSHAハッシュを格納/更新するだけで、それらのハッシュに対してキーをシールします。私が知る限り、彼らは意味します。
これについてのすばらしいプレゼンテーションを以下に示します。 http://opensecuritytraining.info/IntroToTrustedComputing.html
そこにスライドを用意して、最初の数枚のスライドをDay2-1-auth-and-att.pdf
。