使用 pbkdf-force-iterations 加速 GRUB 中的 LUKS 解密
我按照 GRUB - GRUB/Tips and tricks - ArchWiki 中關於加速 LUKS 解密的說明進行操作。我使用指南創建了全盤加密:Full_Disk_Encryption_Howto_2019 - Community Help Wiki。
我想減少加密引導分區的迭代次數:
$ sudo cryptsetup luksDump /dev/nvme0n1p1 LUKS header information for /dev/nvme0n1p1 Version: 1 Cipher name: aes Cipher mode: xts-plain64 Hash spec: sha256 Payload offset: 4096 MK bits: 512 MK digest: ec 22 27 de c1 ef 40 0f a5 cf 37 d3 96 5c d5 b2 6e c8 dd 90 MK salt: 62 1a 05 81 ba 60 3b 0d b1 8a 9f f0 04 98 27 54 06 b6 8d 72 53 23 09 47 ea 5f 80 1d d7 c5 ca 50 MK iterations: 305173 UUID: 586de9a0-14c7-40d7-b721-7fdba2e3b184 Key Slot 0: DISABLED Key Slot 1: ENABLED Iterations: 4882774 Salt: 2a 22 d6 07 a3 48 ad 83 f9 f4 03 a4 a1 e7 95 ab 2c 95 82 cf c1 73 99 1c 74 70 00 5b b8 1b bf 5f Key material offset: 512 AF stripes: 4000 Key Slot 2: ENABLED Iterations: 4888466 Salt: 65 fe 32 1d c4 c6 1b 38 28 4c 19 3c c0 27 5a d9 83 92 13 8e f4 84 61 00 b5 f6 6c f8 75 15 36 52 Key material offset: 1016 AF stripes: 4000 Key Slot 3: ENABLED Iterations: 4888466 Salt: ce 5b b3 e1 f4 85 45 db fd 49 79 71 b1 02 c7 dc d7 60 a6 36 8b 82 95 20 8e 6e 1d ce 2b 35 1b 13 Key material offset: 1520 AF stripes: 4000 Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
我們可以看到啟用了 3 個插槽。
更改迭代次數
$ sudo cryptsetup luksChangeKey --pbkdf-force-iterations 1000 /dev/nvme0n1p1 Enter passphrase to be changed: Enter new passphrase: Verify passphrase: $ sudo cryptsetup luksDump /dev/nvme0n1p1 LUKS header information for /dev/nvme0n1p1 Version: 1 Cipher name: aes Cipher mode: xts-plain64 Hash spec: sha256 Payload offset: 4096 MK bits: 512 MK digest: ec 22 27 de c1 ef 40 0f a5 cf 37 d3 96 5c d5 b2 6e c8 dd 90 MK salt: 62 1a 05 81 ba 60 3b 0d b1 8a 9f f0 04 98 27 54 06 b6 8d 72 53 23 09 47 ea 5f 80 1d d7 c5 ca 50 MK iterations: 305173 UUID: 586de9a0-14c7-40d7-b721-7fdba2e3b184 Key Slot 0: ENABLED Iterations: 4888466 Salt: 93 c2 c4 fe 95 ab 24 44 9e dd 26 90 c1 cf a2 66 19 80 d3 4b f9 e8 b3 5a 0e a1 9f 6a de d8 60 ea Key material offset: 8 AF stripes: 4000 Key Slot 1: ENABLED Iterations: 4882774 Salt: 2a 22 d6 07 a3 48 ad 83 f9 f4 03 a4 a1 e7 95 ab 2c 95 82 cf c1 73 99 1c 74 70 00 5b b8 1b bf 5f Key material offset: 512 AF stripes: 4000 Key Slot 2: ENABLED Iterations: 1000 Salt: 65 fe 32 1d c4 c6 1b 38 28 4c 19 3c c0 27 5a d9 83 92 13 8e f4 84 61 00 b5 f6 6c f8 75 15 36 52 Key material offset: 1016 AF stripes: 4000 Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
問題
- 更改迭代次數後,我們可以看到之前的鍵槽 0 被禁用,而不是被啟用。是隨機分配鍵槽嗎?那很重要嗎?
- 為了加快啟動速度,我是否需要將所有鍵槽的迭代次數減少到 1000?因為,我記得鍵槽是按順序檢查的。
- 如何將所有關鍵插槽的迭代次數設為 1000?
- 上述命令顯示的資訊是私有的,不應該共享嗎?
(1.) cryptsetup 出於內部原因交換密鑰槽,不幸的是你只需要處理它。
從 cryptsetup luksChangeKey 手冊頁:
如果指定了密鑰槽(通過 –key-slot),則必須給出該密鑰槽的密碼,並且新的密碼將覆蓋指定的密鑰槽。
如果未指定密鑰槽並且仍有空閒密鑰槽,則在清除包含舊密碼片語的密鑰槽之前,新密碼將被放入空閒密鑰槽。
如果沒有空閒的密鑰槽,則直接覆蓋帶有舊密碼的密鑰槽。
它還提到了它更喜歡隨機排列鍵槽的原因之一:
警告:如果鍵槽被覆蓋,則此操作期間的媒體故障可能會導致在擦除舊密碼後覆蓋失敗,並使 LUKS 容器無法訪問。
一些 cryptsetup 命令允許您指定要使用的密鑰槽,例如,您可以刪除特定槽或將新密鑰添加到特定空閒槽。因此,有多種方法可以按您想要的順序獲取密鑰。
(2.) 最好將您最常使用的鑰匙放在第一個插槽中。否則將首先嘗試慢速插槽。也可以在 cryptsetup 打開時指定所需的密鑰槽,但 GRUB 可能不支持它。
對於 LUKS 2,鍵也根本不按鍵槽順序進行嘗試。相反,它取決於儲存在 JSON 元數據中的順序,以及您可以設置的鍵槽優先級
cryptsetup config --priority
,但我不知道 GRUB 是否會尊重這一點。(3.) 通過改變它們中的每一個,或以其他方式刪除有問題的。(考慮在刪除密鑰之前備份 LUKS 標頭,因為這樣可能會將自己鎖定。)
luksDump
(4.)由於密鑰材料完全失去,因此無法從輸出中導出 LUKS 主密鑰或密碼。但是,如果您在某處失去了此驅動器,並且發現它的人用Google搜尋了 UUID,他們可能會找到您的文章並以這種方式辨識您……