/home/tnishinaga/TechMEMO

日々行ったこと、面白かったことを書き留めます。

ディスク復号キーに使うPCR Bankはどれを選べばよいかの調査メモ

PCにTPMがついている場合、TPM内の値を復号キーとして用いてストレージの暗号化解除を行えます。

私の家では以下の記事を参考に、clevisを用いてUbuntuを入れたサーバー機すべてのストレージをdm-cryptで暗号化し、起動時はTPMを使って自動的に暗号化解除するように設定しています。 takuya-1st.hatenablog.jp

これによりストレージを暗号化しつつ、面倒な起動時の復号キー入力を省けるので便利です。

ディスク暗号化の解除はTPM内のPCR(Platform Configuration Registersの略、詳細はTPMの仕様書, pp.50, 11.6.2 Platform Configuration Registers (PCR)参照)の特定Bankに記録された値を用いて行います。

このPCRは複数のBankがあり、コンピュータへ何らかの変更が行われると、対応するPCR Bankの値も変更されます。 (PCRの計算式はTPMの仕様書, pp.81, 17.3 Using Extend with PCR Banksあたりを参照)

そのため、暗号化解除に利用するPCR Bankを適切に設定することで、PCに行われた変更を検出してストレージを復号不可にできます。 例えば、起動順序を変更してUSBメモリから起動するようにしてディスクの中身を読もうとしても、PCR Bankを適切に設定すれば起動順序変更時にPCRの値が変わるためディスク暗号化を解除できません。

PCRの各Bankは何をすると変更されるか

PCRの各Bankの使われ方についてはTCG PC Client Platform Firmware Profile Specification という資料の「3.3.4 PCR Usage」にかかれています。

TCG PC Client Platform Firmware Profile Specification, pp.26, 3.3.4 PCR Usage, Table 1 PCR Usageより概要の表を引用します。

また、3.3.4小節には何が起きたときに各Bankの値が変更されるかの仕様が書かれています。 そのため、ここを読めば「どのPCR Bankを復号キーに設定すると、どんな変更を検知して暗号化解除不可にできるか」がわかります。

例えばPCR Bank 7を復号キーに設定すると、セキュアブート設定を変更された場合にディスクの暗号化解除不可にできます。

どのPCR Bankを復号キーに使えば良いのか

「PCがまるごと盗まれた」というシナリオで「アカウントのパスワードが分からなければディスクの中身を見られない」ようにしたい場合、どのPCR Bankを復号キーに設定すればよいか考えてみます(復号キーの安全性は十分高いものとする)。

私が簡単に考えた攻撃シナリオは以下の2つです。

  • ディスクを取り出して別のPCからディスクを読む
  • 元々のPC上にUSBメモリを差し込み、別のOSを起動してディスクを読む

ディスクを取り出して別のPCからディスクを読む

この方法は復号キーの入ったTPMが別のPCに無いので、ディスク暗号化解除ができません。 なのでこの攻撃を防ぎたい場合、どのPCR Bankを使っても良いと思います。

元々のPC上にUSBメモリを差し込み、別のOSを起動してディスクを読む

USBメモリから別のOSを起動すると、元々のPCについているTPMを使ってディスク暗号化解除を行えないでしょうか。

起動順序が変更されると、PCR Bank 4(とBank 1)が変更されます。 これは tpm2_pcrreadコマンド を実行して、起動順序変更前後の差分を見ると確認できます。

よって、PCR Bank 4を復号キーにセットすれば、別のOSを起動してディスク暗号化解除を防げるはずです。

結局どのBankを使えばよいの?

私はPCが盗まれたときに暗号化解除されなければ良いので、Bank 4をセットすると良いかなと考えています。

おまけ

設定変更後にもとに戻すとでPCRの値ももとに戻るのはなぜ?

PCR Bank4の変化を見ていて、自分の理解と異なる動作をしたのでSNSで相談したところ、あきひろさんが理由を教えて下さいました。

自分でも調べてみると、PCRTPMのRAM上にあり電源喪失時にデータが保持されるかは実装依存(基本喪失する)と書かれています。

Random access memory (RAM) holds TPM transient data. Data in TPM RAM is allowed, but not required, to be lost when TPM power is removed. Because the values in TPM RAM may be lost, in this specification they are referred to as being volatile, even if the data loss is implementation-dependent. TPMの仕様書, pp.50, 11.6.1 Introduction) より引用

そのため、まきひろさんのご指摘どおり、初期値が同じで記録する構成がもとに戻れば、変更前と変更後にもとに戻した場合のPCR値は一致するという理解をしました。

参考資料

https://www.rcis.aist.go.jp/files/events/2008/RCIS2008/RCIS2008_3-2_Suzaki.pdf