クレビスTPM2.0を使用したLUKS

クレビスTPM2.0を使用したLUKS

こんにちは。セカンダリ データ ディスクを暗号化しようとしています。マシンの起動時にこのディスクを復号化したいと考えています。現在 RAID をセットアップしており、その上に LVM ボリュームがあり、LUKS ですでに暗号化されています。

次のようなコマンドを実行しました: sudo clevis luks bind -d /dev/RaidVG/LVMVol tpm2 '{"pcr_ids":"15", "pcr_bank":"sha256"}'

私が理解している限りでは、PCR バンク 15 の TPM2.0 モジュールにバインドされている LUKS ヘッダーにキースロットを追加しています。これでうまくいったようですが、'tpm2_pcrread' を実行したときに何が起こるのかがわかりません。PCR の '値' はまだ 0 であると表示されます。

$ sudo tpm2_pcrread
sha1:
sha256:
  0 : 0xREDACTED
  1 : 0xREDACTED
  2 : 0xREDACTED
  3 : 0xREDACTED
  4 : 0xREDACTED
  5 : 0xREDACTED
  6 : 0xREDACTED
  7 : 0xREDACTED
  8 : 0x0000000000000000000000000000000000000000000000000000000000000000
  9 : 0x0000000000000000000000000000000000000000000000000000000000000000
  10: 0x0000000000000000000000000000000000000000000000000000000000000000
  11: 0x0000000000000000000000000000000000000000000000000000000000000000
  12: 0x0000000000000000000000000000000000000000000000000000000000000000
  13: 0x0000000000000000000000000000000000000000000000000000000000000000
  14: 0x0000000000000000000000000000000000000000000000000000000000000000
  15: 0x0000000000000000000000000000000000000000000000000000000000000000
  16: 0x0000000000000000000000000000000000000000000000000000000000000000
  17: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  18: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  19: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  20: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  21: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  22: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  23: 0x0000000000000000000000000000000000000000000000000000000000000000
sha384:
sha512:

これらの PCR 値は正確には何を意味するのでしょうか? この質問に対する答えはオンラインでは見つかりません。PCR バンクで何か操作を行うと、これらの値は変化しないのでしょうか?

もう1つ奇妙なのは、このチュートリアルに従って単純なhello worldファイルを暗号化したとき(https://www.fit-pc.com/wiki/index.php?title=Linux:_Full_Disk_Encryption) を実行すると、まったく同じ暗号化された出力 "eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI" が表示されます。ただし、出力全体は表示されず、最初の行だけが表示されます。これは、いくつかのデフォルト キーが設定されているからでしょうか。それとも、これは何らかの共通ヘッダーなのでしょうか。TPM モジュールは仮想化されているため、これも問題になる場合があります。

これが実際にどのように機能するか、また暗号化スキームを安全に設定する方法について、もう少し詳しく説明していただけると幸いです。

答え1

私が理解している限りでは、PCR バンク 15 の TPM2.0 モジュールにバインドされている LUKS ヘッダーにキースロットを追加しています。これでうまくいったようですが、'tpm2_pcrread' を実行したときに何が起こるのかがわかりません。PCR の '値' はまだ 0 であると表示されます。

PCRにデータをバインドしてもPCRは変更されないはずです。TPMを使用してデータを暗号化し、現在PCR 値。一般的に、これは、値に有用な意味がある PCR を選択する必要があることを意味します (たとえば、Windows BitLocker は、現在のセキュア ブート状態を保持する PCR 7 を使用します)。すべてゼロの PCR を使用すると、暗号化されたデータ (つまり、LUKS キースロット) は TPM 自体にバインドされますが、ライブ CD を起動して TPM にデータの封印解除を依頼するユーザーを阻止することはできません。

これらの PCR 値は正確には何を意味するのでしょうか? これに対する答えはオンラインでは見つかりません。

各PCRは、ハッシュチェーンTPM イベント ログ内のイベントによって生成されます。イベントがログに記録されるたびに、対応する PCR が更新されます (更新プロセスはpcr = hash(pcr + new_event)Git コミットの動作と非常によく似ているため、「拡張」されます)。

基本イベントは TCG 仕様に文書化されており、tpm2_eventlog現在のブート中にログに記録された内容を表示できます。たとえば、PCR 4 には、ブート プロセス中に起動されたすべての .efi 実行可能ファイルの正確なハッシュが含まれます。(実質的に、すべてのデフォルトの PCR は、何らかの形でブート プロセスに関連しています。) ほとんどのイベントはファームウェアによってログに記録されますが、一部はブートローダーによってログに記録されます。OS はログに記録できますが、通常は記録されません。

つまり、PCR に期待値が含まれているかどうかを確認することは、イベント ログに期待されるイベントが期待される順序で含まれていることを確認するための近道にすぎません。

たとえば、BitLocker は PCR7 または PCR4 を使用してキースロット (または「プロテクター」) を封印し、実際の Windows インストールが起動されているとき (つまり、ライブ CD ではなくユーザー アカウントのセキュリティを尊重するシステム) にのみ自動ロック解除が可能になるようにします。

PCR バンクで何か操作を行った後、これらの値は変更されるのではないでしょうか?

いいえ、読み取られただけでは値は変化しません。

「シール」操作は、提供されたデータを暗号化し、「PCR 15 がこの値と一致する場合にのみ復号化する」というポリシーを TPM に添付するように要求します。PCR 自体は変更されません。シールされたデータは OS に返されます (ファイルまたは LUKS トークンなどに保存されます)。

もう1つ奇妙なのは、このチュートリアルに従って単純なhello worldファイルを暗号化したとき(https://www.fit-pc.com/wiki/index.php?title=Linux:_Full_Disk_Encryption) を実行すると、まったく同じ暗号化された出力「eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI」が得られます。

これは Base64 でエンコードされたデータです。これをデコードすると、固定ヘッダーが含まれていることがわかります。

$ echo eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI | base64 -d
{"alg":"dir","clevis":{"pin":"tpm2","tpm2":{"hash":"sha2

関連情報