使用 pbkdf-force-iterations 加速 GRUB 中的 LUKS 解密

使用 pbkdf-force-iterations 加速 GRUB 中的 LUKS 解密

我按照以下说明进行操作在 GRUB 中加速 LUKS 解密 - GRUB/提示和技巧 - ArchWiki。我使用指南创建了全盘加密:Full_Disk_Encryption_Howto_2019 - 社区帮助 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

问题

  1. 更改迭代次数后,我们可以看到之前键槽 0 被禁用,而不是被启用。密钥槽是随机分配的吗?这重要吗?
  2. 为了加快启动速度,是否需要将所有键槽的迭代次数减少到 1000 次?因为,我记得键槽是按顺序检查的。
  3. 如何使所有关键槽的迭代次数为 1000?
  4. 上述命令显示的信息是否属于私有且不应共享?

答案1

(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,他们可能会找到您的帖子并以这种方式识别您的身份......

答案2

每个插槽对应一个特定的密码短语

您可以使用参数查看哪个插槽对应于您的密码--test-passphrase

然后您可以使用-S来定位特定的插槽

更多信息这里

相关内容