我的 LUKS 加密驱动器有 3 个密码。其中两个是安全的(而且很长),另一个丢失了。但是,我依稀记得它没有达到标准;它是在实验期间使用的,之后应该被擦除。既然我不再知道那个密钥,但至少知道另外两个,我该如何摆脱它?
答案1
神奇的选项是luksKillSlot
。
关键是要确定三个密钥槽中的哪一个包含要删除的密钥。如果您还不知道,可以通过依次尝试所有已知密钥来检查,然后告诉cryptsetup
您哪个密钥指向哪个槽。然后未知密钥指向剩余的槽。
检查使用了哪些插槽(在我的情况下使用了插槽 0、1 和 2)。替换/dev/sdb4
为您的实际设备:
root@host:~# cryptsetup luksDump /dev/sdb4
LUKS header information for /dev/sdb4
...
Key Slot 0: ENABLED
...
Key Slot 1: ENABLED
...
Key Slot 2: ENABLED
...
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
现在使用您的第一个密钥打开(=解密)您的设备,并使其cryptsetup
详细显示用于解锁设备的插槽:
root@host:~# cryptsetup -v open --type luks /dev/sdb4 someAlias
[enter one of your two known keys]
Key slot 2 unlocked.
Command successful.
记住第一个键引用哪个插槽(在本例中为 2)并撤消该步骤:
root@host:~# cryptsetup close someAlias
使用第二个已知密钥重复上述操作:
root@host:~# cryptsetup -v open --type luks /dev/sdb4 someAlias
[enter the second of your two known keys]
Key slot 0 unlocked.
Command successful.
root@host:~# cryptsetup close someAlias
现在您知道两个已知密钥分别指向插槽 2 和插槽 0。因此插槽 1 必定是包含未知密钥的插槽。使用以下命令删除它:
root@host:~# cryptsetup -v luksKillSlot /dev/sdb4 1
Keyslot 1 is selected for deletion.
Enter any remaining passphrase:
[enter one of the two known keys]
Key slot 0 unlocked.
Command successful.
一探究竟:
root@host:~# cryptsetup luksDump /dev/sdb4
LUKS header information for /dev/sdb4
...
Key Slot 0: ENABLED
...
Key Slot 1: DISABLED
Key Slot 2: ENABLED
...
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
答案2
我无法评论,但要扩展@PerlDucks 的回答
您不必为每个要测试的键打开/锁定分区,而是可以使用带有标志的cryptsetup open
(或cryptsetup luksOpen
- 旧语法)--test-passphrase
,然后someAlias
可以省略。
例子:cryptsetup -v open --test-passphrase --type luks /dev/sdb4
摘录自man cryptsetup
...
--test-passphrase
Do not activate the device, just verify passphrase. This option is only relevant for
open action (the device mapping name is not mandatory if this option is used).
...
根据cryptsetup 更新日志,此标志自 起可用2012-06-18
,或自 起适用于 cryptsetup 版本1.5.0-rc2
(这意味着,它应该今天可供几乎所有人使用)