我有一个 LUKS 加密磁盘。它有 3 个键槽,我知道其中两个的传递阶段。
如何确定我知道哪些键槽的密码?
答案1
简单的方法是--debug
在解锁设备时使用,它会打印它尝试使用的键槽,因此使用两个密码短语,您只需运行两次luksOpen
即可查看哪个密码短语“属于”哪个键槽。
我为第三个键槽提供密码的示例:
$ sudo cryptsetup open /dev/sde a --debug
...
# Trying to open LUKS2 keyslot 0.
...
# Verifying key from keyslot 0, digest 0.
# Digest 0 (pbkdf2) verify failed with -1.
# Trying to open LUKS2 keyslot 1.
...
# Digest 0 (pbkdf2) verify failed with -1.
# Trying to open LUKS2 keyslot 2.
...
Key slot 2 unlocked.
如果您想从脚本中进行检查,您可以对您知道的每个密码短语的每个密钥槽使用--key-slot <num>
withluksOpen
和循环,使用错误的密码短语解锁错误的密钥槽将会失败(您也可以将其与 一起使用来--test-passphrase
检查密码短语是否正确或者没有实际解锁设备)。如果您有两个具有相同密码的密钥槽,这也会有所帮助,--debug
上面的示例不会告诉您这一点。
所以类似这样的东西应该可以解决问题:
for i in {0..2}; do
for pass in "a" "b" "c"; do
echo $pass | cryptsetup open /dev/sde a -q --test-passphrase --key-slot $i >/dev/null 2>&1
ret=$?
[ $ret -eq 0 ] && echo "$pass is passphrase for keyslot $i" && break
done
done
a is passphrase for keyslot 0
b is passphrase for keyslot 1
c is passphrase for keyslot 2