我想使用 dm-crypt+luks 加密我的外部硬盘,但我对 LUKS 标头以纯文本提供的所有信息并不满意。
所以我想将 LUKS 标头和加密数据彼此分开:
- 将不带标题的 LUKS-Partition(CRYPT)存储在外部驱动器上。
- 每当我想要访问加密数据时,合并标题和 CRYPT 并正常挂载 luks 分区。
我已经知道如何手动实现这一点:
- 使用 dd 备份 LUKS 标头。
- 覆盖外部驱动器上的 LUKS 标头。
- 每当需要挂载 LUKS 分区时,将其写回并正常挂载。
- 完成后,卸载并再次覆盖标题。
这不是很理想,因为每次安装驱动器时,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 设备对于任何没有头文件的人来说看起来就像随机数据一样。