TPM 2.0 デバイスでの PCR バンクの切り替え

プラットフォーム構成レジスタ (PCR) は、TPM 内で何らかの一意のプロパティを格納したメモリ ロケーションです。PCR に格納できる値のサイズは、関連付けられたハッシュ アルゴリズムによって生成されたダイジェストのサイズによって決まります。SHA-1 PCR が格納できる値のサイズは 20 バイト、つまり SHA-1 ダイジェストのサイズです。同じハッシュ アルゴリズムに関連付けられた複数の PCR は、PCR バンクと呼ばれています。

PCR に新しい値を格納するために、既存の値は次のように新しい値で拡張されます。

PCR[N] = HASHalg( PCR[N] || ArgumentOfExtend )

既存の値は、TPM Extend 操作の引数と連結されます。連結された結果は、関連付けられたハッシュ アルゴリズムへの入力として渡されて、入力のダイジェストを計算するために使われます。この計算されたダイジェストが PCR の新しい値になります。

TCG PC Client Specific Platform TPM Profile for TPM 2.0」には、24 個のレジスタで構成された PCR バンクを少なくとも 1 つ含めることが定義されています。最初の 16 個の PCR をリセットするには、TPM 自体をリセットするしかありません。この制限のため、それらの PCR の値は TPM Extend 操作でしか変更できません。

一部の TPM PCR はログ イベントのチェックサムとして使われます。 イベントが発生すると、ログ イベントは TPM で延長されます。後で、監査担当者はログからの予想 PCR 値を計算し、TPM の PCR 値と比較することで、ログを検証できます。最初の 16 個の TPM PCR は任意に変更できないため、その範囲の予想 PCR 値と実際の TPM PCR 値が一致していることで、ログが変更されていないことがわかります。

Windows 10 での PCR の使われ方

TPM ベースのキーの使用を PC の特定の状態にバインドするために、キーは一連の予想 PCR 値にシールできます。たとえば、PCR 0 ~ 7 には、ブート プロセス後 (OS 読み込み時) の明確に定義された値が格納されています。 コンピューターのハードウェア、ファームウェア、またはブートローダーが変更されると、その変更は PCR 値で検出できます。Windows 10 では、この機能を使って、ブート プロセス中のある時点で特定の暗号化キーのみを有効にします。たとえば、BitLocker キーはブート プロセス中のある時点で使えますが、その前後には使えません。

重要なのは、PCR 値へのバインドには、PCR に使われるハッシュ アルゴリズムも含まれるということです。たとえば、SHA-256 PCR バンクを使う場合、キーは SHA-1 PCR[12] の特定の値にバインドできます。それ以外の場合、同じシステム構成であっても、PCR 値は一致しません。

PCR バンクの切り替え時の動作

PCR バンクが切り替わると、Extend 操作の間に PCR に格納されたハッシュ値を計算するために使われるアルゴリズムが変わります。 入力が同じでも、ハッシュ アルゴリズムごとに異なる暗号化署名が返されます。

その結果、現在使われている PCR バンクが切り替わった場合、前の PCR 値にバインドされていたすべてのキーは使えなくなります。たとえば、キーを PCR[12] の SHA-1 値にバインドし、その後、PCR バンクを SHA-256 に変更した場合、バンクは一致しなくなり、そのキーは使えなくなります。BitLocker キーは PCR バンクを使って保護されており、BitLocker が有効になっている間に PCR バンクが切り替わった場合、Windows 10 ではそのキーをシール解除できなくなります。

BitLocker が既にアクティブになっているときに PCR を切り替えるための操作

PCR バンクを切り替える前に、BitLocker を中断するか無効にする必要があります。つまり、回復キーを使えるようにします。 PC で PCR バンクを切り替える手順については、OEM または UEFI ベンダーにお問い合わせください。