整个磁盘加密似乎在普通模式下不起作用,但在 LUKS 下可以正常工作。为什么?

整个磁盘加密似乎在普通模式下不起作用,但在 LUKS 下可以正常工作。为什么?

我正在开发一个需要安装在嵌入式设备上的极简 Linux 发行版。目前安装过程的工作方式是安装程序本身就是 Linux,带有基于 busybox 的 initramfs 和一些附加工具(例如 cryptsetup)。磁盘布局非常简单 - 单个分区。不需要 LVM。目前,安装程序会清除磁盘,创建单个分区,然后使用“dd”从映像填充此分区。我知道我应该用随机数据填充磁盘,但为了本示例的目的,让我们忽略这一点。我想做的是:

dd if=/dev/zero of=/dev/sdb bs=1M count=200
cryptsetup --cipher=<some cipher:some hash> --offset=0 open --type plain /dev/sdb encvolume
mkfs.ext4 /dev/mapper/encvolume
mount /dev/mapper/encvolume /mnt
echo "SECRET INFO" > /mnt/SECRET
umount /mnt
cryptsetup close encvolume

当然,系统要求我输入密码。有趣的是,当我再次尝试使用完全相同的 cryptsetup open 命令解锁驱动器时,它不起作用:fdisk 报告 /dev/sdb 上没有有效分区,好像加密失败了。

另一方面,类似的命令,但使用 Luks 似乎运行正常:

dd if=/dev/zero of=/dev/sdb bs=1M count=200
cryptsetup --cipher=<some cipher:some hash> luksFormat /dev/sdb
cryptsetup luksOpen /dev/sdb encvolume
mkfs.ext4 /dev/mapper/encvolume
mount /dev/mapper/encvolume /mnt
echo "SECRET INFO" > /mnt/SECRET
umount /mnt
cryptsetup luksClose encvolume


cryptsetup luksOpen /dev/sdb encvolume
mount /dev/mapper/encvolume /mnt

我猜我遗漏了一些从我原来的“cryptsetup open”命令间接派生的元数据,而解密时缺少这些元数据?如果可能的话,我更愿意使用纯文本模式。我会很感激大家的建议。

相关内容