Arch-Linux

使用 USB-Stick 的第一個分區之前的空間作為 luks 密鑰

  • May 8, 2019

我正在使用帶有加密 luks 根分區(未加密啟動)的 arch linux,還帶有密碼。現在我有一個密鑰文件(3072 字節),它以這種方式寫入 USB-Stick:

sudo dd if=tempKeyFile.bin of=/dev/sdd bs=512 seek=1 count=6

並設置為附加通行證

sudo cryptsetup luksAddKey /dev/sdb6 tempKeyFile.bin

當我手動打開分區時:

sudo cryptsetup --key-file tempKeyFile.bin open /dev/sdb6 luks_root

一切正常,分區已映射並且可以掛載。現在我的核心參數行grub.cfg看起來像這樣:

linux /vmlinuz-linux root=UUID=$UUID_OF_luks_root$ rw cryptdevice=UUID=$UUID_OF_sdb6$:luks_root cryptkey=/dev/sdd:1:6

但是在啟動時,我收到此錯誤:

No key available with this passphrase. Invalid Keyfile. Reverting to passphrase.

我已經嘗試過偏移 2 而不是 1,但結果相同。我注意到它並沒有說無法找到/讀取密鑰文件,但它是不正確的。

關於這種儲存 luks 密鑰文件的方式的文件似乎很少。Arch-wiki 提到了它,但非常簡短,我似乎很順從,所以我認為它應該是可能的。

在我的mkinitcpio.conf模組中,二進製文件和文件是空的,我設置:

HOOKS=(base udev autodetect keyboard modconf block encrypt filesystems fsck)

所以塊在加密之前是正確的。

這裡有什麼問題?

從 ArchLinux 加密鉤子 ( /lib/initcpio/hooks/encrypt):

*)
   # Read raw data from the block device
   # ckarg1 is numeric: ckarg1=offset, ckarg2=length
   dd if="$resolved" of="$ckeyfile" bs=1 skip="$ckarg1" count="$ckarg2" >/dev/null 2>&1
   ;;

因此,雖然它支持從原始塊設備讀取密鑰,但它使用的塊大小為 1(而不是預設的 512),因此您必須將值乘以 512 才能使其工作。

所以不要cryptkey=/dev/sdd:1:6嘗試cryptkey=/dev/sdd:512:3072

引用自:https://unix.stackexchange.com/questions/517874