您好,我正在嘗試加密輔助資料磁碟。我希望在機器啟動期間解密該磁碟。我目前有 RAID 設置,頂部有一個 LVM 卷,該卷已使用 LUKS 加密。
我執行瞭如下指令: sudo clevis luks bind -d /dev/RaidVG/LVMVol tpm2 '{"pcr_ids":"15", "pcr_bank":"sha256"}'
現在,據我了解,我正在綁定添加一個鍵槽到我的LUKS 標頭,該標頭綁定到PCR 庫15 上的TPM2.0 模組。執行時會發生什麼'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 庫進行任何操作後,這些值不應該改變嗎?
另一件奇怪的事情是,當我按照本教學加密一個簡單的 hello world 檔案時(https://www.fit-pc.com/wiki/index.php?title=Linux:_Full_Disk_Encryption),我得到完全相同的加密輸出“eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI”。現在,它們不顯示獲得的整個輸出,僅顯示第一行。這是因為我設定了一些預設鍵嗎?還是這是某種常見的標頭?我的 TPM 模組是虛擬化的,因此這也可能是個問題。
我希望有人能更多地解釋一下它的實際工作原理以及如何安全地設定我的加密方案。
答案1
現在,據我了解,我正在綁定添加一個鍵槽到我的LUKS 標頭,該標頭綁定到PCR 庫15 上的TPM2.0 模組。執行時會發生什麼'tpm2_pcrread'。它說我的 pcr“值”仍然是 0:
將數據綁定到 PCR 不會改變 PCR – 它使用 TPM 以使用 TPM 的方式加密數據目前的PCR 值。一般來說,這意味著您應該選擇一個其值具有有用含義的 PCR(例如,Windows BitLocker 使用 PCR 7 來保留目前的安全啟動狀態)。使用全零的 PCR 仍會將加密資料(即 LUKS 金鑰槽)綁定到 TPM 本身,但不會阻止任何人啟動 Live CD 並僅要求 TPM 為他們解封資料。
這些 PCR 值到底代表什麼?我在網上找不到這個問題的答案。
每個PCR對應一個哈希鏈由 TPM 事件日誌中的事件產生。每次記錄事件時,都會更新相應的 PCR(或“擴展”,因為更新過程pcr = hash(pcr + new_event)
非常類似於 Git 提交的工作方式)。
基本事件記錄在 TCG 規範中;tpm2_eventlog
可以顯示目前啟動期間記錄的內容。例如,PCR 4 將包含在引導過程中啟動的每個 .efi 可執行檔的精確雜湊值。 (實際上所有預設 PCR 都以某種方式與引導過程相關。)大多數事件由韌體記錄,但有些由引導程式記錄;作業系統可以,但通常不會。
換句話說,檢查 PCR 是否包含預期值只是驗證事件日誌是否以預期順序包含預期事件的捷徑。
例如,BitLocker 使用 PCR7 或 PCR4 密封金鑰槽(或稱「保護器」),以確保僅在啟動實際 Windows 安裝時才可能進行自動解鎖(即,尊重使用者帳戶安全的系統而不是 Live CD) 。
在我對 PCR 庫進行任何操作後,這些值不應該改變嗎?
不;這些值不會僅僅因為被讀取而改變。
「密封」操作要求 TPM 加密提供的資料並附加策略「僅在 PCR 15 與此值相符時解密」。它不會改變 PCR 本身。密封的資料會回到作業系統(儲存在檔案中或 LUKS 令牌等)。
另一件奇怪的事情是,當我按照本教學加密一個簡單的 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