dm-crypt+luks:我可以有一个单独的标题而不将其存储在 luks 加密设备上吗?

dm-crypt+luks:我可以有一个单独的标题而不将其存储在 luks 加密设备上吗?

我想使用 dm-crypt+luks 加密我的外部硬盘,但我对 LUKS 标头以纯文本提供的所有信息并不满意。

所以我想将 LUKS 标头和加密数据彼此分开:

  1. 将不带标题的 LUKS-Partition(CRYPT)存储在外部驱动器上。
  2. 每当我想要访问加密数据时,合并标题和 CRYPT 并正常挂载 luks 分区。

我已经知道如何手动实现这一点:

  1. 使用 dd 备份 LUKS 标头。
  2. 覆盖外部驱动器上的 LUKS 标头。
  3. 每当需要挂载 LUKS 分区时,将其写回并正常挂载。
  4. 完成后,卸载并再次覆盖标题。

这不是很理想,因为每次安装驱动器时,luks 标头的扇区都会被覆盖,我担心这些扇区肯定会变坏。


另一种方法是将头文件和加密的 luks 分区合并为一个虚拟 linux 设备,可以正常挂载。

我说的“合并到一个虚拟设备”是指,文件头实际上并没有写回到 luks 分区,但系统认为是这样。文件头仍然保留在我的 USB 上。

我唯一的问题是,我不知道如何创建这样的虚拟设备。

任何帮助,将不胜感激。

答案1

您可以简单地在分离头模式下使用 LUKS:

cryptsetup luksFormat /dev/sda4 --header ~/lukshdr --align-payload 0 --cipher twofish
cryptsetup open /dev/sda4 --header ~/lukshdr mycrypt
cryptsetup luksSuspend mycrypt --header ~/lukshdr
cryptsetup luksResume mycrypt --header ~/lukshdr

您可以将头文件放在任何您想要的地方,包括块设备。

~/lukshdr大小必须至少为 1049600 字节才能luksFormat正常工作:

dd if=/dev/zero bs=1049600 count=1 > ~/lukshdr

如果您运行lsblk -b,您将看到映射设备的大小恰好等于 LUKS 设备的大小;没有任何空间可以隐藏任何标题或元数据。

$ lsblk -b
NAME          MAJ:MIN RM        SIZE RO TYPE  MOUNTPOINT
sda             8:0    0 80026361856  0 disk  
├─sda1          8:1    0   254803968  0 part  /boot
├─sda2          8:2    0  5999951872  0 part  [SWAP]
├─sda3          8:3    0 19999490048  0 part  /
└─sda4          8:4    0 53771067392  0 part  
  └─mycrypt   254:0    0 53771067392  0 crypt /tmp/mnt

事实上,只要底层密码未被破解,LUKS 设备对于任何没有头文件的人来说看起来就像随机数据一样。

相关内容