使用 USB 棒第一个分区之前的空间作为 luks key

使用 USB 棒第一个分区之前的空间作为 luks key

我正在使用 arch linux 和加密的 luks 根分区(引导未加密),还带有密码。现在我有一个密钥文件(3072 字节),它以这种方式写入 USB 棒:

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)

所以块就在加密之前。

这里有什么问题?

答案1

来自 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

相关内容