使用 USB-Stick 的第一個分區之前的空間作為 luks 密鑰
我正在使用帶有加密 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
。