我有一个包含(仅)LUKS 加密卷的磁盘。这是使用 cryptsetup v.1.6.1 在没有分区表的裸驱动器上创建的。解锁后,我可以查看解密卷的大小,将其与整个磁盘进行比较,发现差异正好是 2MB。另一方面,当我备份标题时,使用:
cryptsetup luksHeaderBackup /dev/sda --header-backup-file <filename>
我得到一个小于 2MB 的 30kB 文件。使用 dd 转储磁盘的前 2MB 并将其与备份的标头进行比较,我看到最后缺少 30KB 并且包含所有 0。奇怪的是,我使用 cryptsetup 1.4.1 和 1.4.3 备份了各种(其他)LUKS 标头,它们都是 2MB。这与cryptsetup FAQ 的第 6.2 节一致,即标头大小应为 2MB。
有人可以帮我理解这 30KB 是什么吗?(我想用随机数据覆盖标题,因为我已经把它放在一个单独的设备上,并想确保我知道我在做什么。)
同样作为一个更普遍的问题,是否有一种更简单/自动化的方法,也许使用 luksDump 的输出来准确判断标头在磁盘上的位置?(包括偏移量和大小。)我已经阅读了 cryptsetup 常见问题解答,但结果肯定不仅仅是退出。
而且,有没有比使用 dd 更好的方法来覆盖标题?
cryptsetup luksHeaderRestore <file_with_random_data>
不起作用,因为 cryptsetup 会进行一些白痴检查,以查看是否有任何已经存在的标头与主密钥大小和偏移量匹配。
原来 30k 是未使用的空间,但标头数据已对齐为 1MB。使用早期版本的 cryptsetup 备份时包含了整个 2MB,但后来的版本将其排除在外。
通过使用
cryptsetup luksDump
(多个 512B 扇区)的 payloadOffset 输出,可以看到加密卷开始的偏移量;所以你可以手动擦拭到那里。或者,从 cryptsetup 1.6.4 开始,您可以使用它cryptsetup luksErase
来覆盖所有活动的密钥槽。带有元数据的剩余可见标头是磁盘的前 4KB,因此必须手动擦除。[感谢米兰,cryptsetup 开发人员之一,在 cryptlab!]