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

use*_*174 3 linux virtual-drive luks dm-crypt

我想用 dm-crypt+luks 加密我的外部硬盘驱动器,但我对 LUKS 标头以明文形式提供的所有信息都不满意。

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

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

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

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

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


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

“合并到一个虚拟设备”我的意思是,标头实际上并未写回 luks 分区,但系统会以这种方式感知它。标题仍然保留在我的 U 盘上。

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

任何帮助,将不胜感激。

mic*_*c_e 11

您可以简单地在分离头模式下使用 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
Run Code Online (Sandbox Code Playgroud)

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

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

dd if=/dev/zero bs=1049600 count=1 > ~/lukshdr
Run Code Online (Sandbox Code Playgroud)

如果运行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
Run Code Online (Sandbox Code Playgroud)

事实上,只要底层密码保持完整,LUKS 设备对于没有头文件的任何人来说看起来就像是随机数据。

  • 添加一个确切数字 1049600 来自的链接会很好。 (2认同)