使用 LUKS 收到“此密码无可用密钥”

Ent*_*mus 4 debian recovery passphrase luks

我的笔记本电脑有一个加密磁盘。几个小时后,apt upgrade强制关闭我的密码不再解密我的磁盘。

我从 Debian Live USB 棒启动并尝试了几件事:

  1. 我可以使用实时操作系统中的密码来解密分区吗? 在此输入图像描述 答:不。
  2. 是不是键盘布局有问题? 在此输入图像描述 答:不。
  3. 该分区还是加密分区吗? 在此输入图像描述 答:是的,而且还有一个键槽。
  4. 查看 hexdump 输出时是否存在明显问题? 在此输入图像描述 答:不。
  5. 查看 hexdump 配置输出时是否可能存在问题? 在此输入图像描述 回答:除了一些博客文章说 1000 以上的所有内容都应该是随机字符之外:不。

我没有 LUKS 标头的备份。我的密码有效了一年多。我如何访问或挽救我的数据?

预先感谢,卢克

ken*_*orb 5

最有可能的是你输错了密码,因为我也遇到了类似的问题并归咎于升级。

您可以转储标头并尝试粗暴地强制它。

以下步骤会有所帮助。

  1. 确认您拥有正确的设备:

    sudo cryptsetup isLuks /dev/sda3 -v
    
    Run Code Online (Sandbox Code Playgroud)
  2. 验证标头:

    sudo cryptsetup luksDump /dev/sda3
    
    Run Code Online (Sandbox Code Playgroud)
  3. 尝试最初的几个密码(考虑添加--debug以获得更多输出):

    sudo cryptsetup luksOpen --test-passphrase /dev/sda3
    
    Run Code Online (Sandbox Code Playgroud)

    或者:tcryptDump,但应该没有任何区别。

  4. 考虑备份标头:

    sudo cryptsetup luksHeaderBackup /dev/sda3 --header-backup-file luksHeader.bin
    
    Run Code Online (Sandbox Code Playgroud)

    或者运行(用标头转储中找到的有效负载偏移量替换计数):

     dd if=/dev/sda3 of=luksHeader.bin bs=512 count=4096
    
    Run Code Online (Sandbox Code Playgroud)

    您还可以考虑使用备份整个设备dd

  5. 使用头文件尝试不同的密码:(比使用实际设备更快)

    sudo cryptsetup luksOpen --test-passphrase luksHeader.bin
    
    Run Code Online (Sandbox Code Playgroud)

残酷的力量

拥有一个小头文件(按照上述步骤),您可以尝试粗暴地强制它。

假设您知道原始密码,请在中创建潜在密码及其排列的列表passes.txt(通过 使列表唯一sort -ou passes.txt)。

在 shell 中,您可以使用以下脚本来尝试这些组合:

set -x
while read pass; do
  printf $pass | cryptsetup luksOpen --test-passphrase luksHeader.bin $@ && echo Success && break;
done < passes.txt
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 由于文件很小,您可以将其扩展到许多机器。
  • 考虑添加--key-slot 0以加快检查速度。
  • 您可以尝试覆盖--pbkdf-force-iterations(检查标头转储中有多少个),但很可能没有帮助。

现场CD

如果您认为这是由于升级造成的,请使用不同的Ubuntu Live CD 来使用上述命令(Ubuntu 16、18、20 等)。

从 USB/CD 启动,或安装VM VirtualBox(创建 Ubuntu VM,然后加载 ISO 以从中启动)。

将物理设备连接到VM VirtualBox(不推荐):

  • 在新创建的 Ubuntu VM 中,附加 Ubuntu 的 Live CD.iso文件。
  • 使用VBoxManage internalcommands createrawvmdk命令创建.vmdk指向真实设备的文件。将它们附加.vmdk到虚拟机中(在启动之前)。
  • 如果您的用户在运行期间无法访问这些特殊设备,请VirtualBoxVM以 root 身份运行(也不推荐)。

最后步骤,复制头文件,然后使用旧版本的cryptsetup( cryptsetup --version) 测试密码。

安装

成功后,使用以下命令挂载文件系统:

sudo cryptsetup isLuks /dev/sdb5 -v
sudo cryptsetup luksOpen /dev/sdb5 newhd
sudo lvscan # Check if LVs are active.
sudo vgchange -ay # Activate LVs if not active.
sudo lvdisplay # List logical volumes (note the LV Path).
sudo mount /dev/ubuntu-vg/root /mnt
mount # List mounted filesystems.
xdg-open /mnt # Open in file explorer
Run Code Online (Sandbox Code Playgroud)

其他有用的命令:

sudo lvmdiskscan # List devices.
sudo vgdisplay # Display volume group information.
Run Code Online (Sandbox Code Playgroud)