LUKS 标头 - 30kB 神秘失踪

LUKS 标头 - 30kB 神秘失踪

我有一个磁盘,其中(仅)包含一个 LUKS 加密卷。该卷是使用 cryptsetup v.1.6.1 在没有分区表的裸驱动器上创建的。解锁后,我可以检查解密卷的大小,将其与整个磁盘进行比较,发现差异正好是 2MB。另一方面,当我备份标头时,使用:

cryptsetup luksHeaderBackup /dev/sda --header-backup-file <filename>

我得到一个文件,大小为 30kB,小于 2MB。使用 dd 转储磁盘的前 2MB,并将其与备份的标头进行比较,我发现末尾缺少 30KB,并且全为 0。奇怪的是,我使用 cryptsetup 1.4.1 和 1.4.3 备份了各种(其他)LUKS 标头,它们都正好是 2MB。这与cryptsetup FAQ 第 6.2 节,其中表示标题大小应为 2MB。

有人能帮我理解一下这个 30KB 是什么吗?(​​我想用随机数据覆盖标题,因为我把它放在了单独的设备上,并且想确保我知道自己在做什么。)

另外,作为一个更普遍的问题,是否有一种更简单/自动化的方法,例如使用 luksDump 的输出,来准确地判断头部在磁盘上的位置?(偏移量和大小。)我已经阅读了 cryptsetup FAQ,但结果肯定不会就此消失。

并且,除了使用 dd,有没有更好的方法来覆盖标题?

cryptsetup luksHeaderRestore <file_with_random_data>

不起作用,因为 cryptsetup 进行了一些愚蠢的检查,以查看主密钥大小和偏移量中是否有任何已经存在的标头匹配。

答案1

事实证明,30k 是未使用的空间,但标头数据已对齐到 1MB。使用早期版本的 cryptsetup 备份时,整个 2MB 都包括在内,但更高版本将其省略。

通过使用 payloadOffset 输出cryptsetup luksDump(512B 扇区数),可以看到加密卷开始的偏移量;因此您可以手动擦除到那里。或者,自 cryptsetup 1.6.4 以来,您可以使用它cryptsetup luksErase来覆盖所有活动的密钥槽。剩余的可见标头(带元数据)是磁盘的前 4KB,因此必须手动擦除。

[感谢 cryptlab 的 cryptsetup 开发人员之一 Milan!]

相关内容