【发布时间】:2020-03-18 06:46:05
【问题描述】:
如何以编程方式确定块存储设备上 LUKS 标头的准确起始字节和准确结束字节?
我使用 Linux 统一密钥设置 (LUKS) 进行全盘加密 (FDE),因此我的驱动器上的所有数据都使用不是从我的密码中派生的强主密钥进行加密,我正在编写一个脚本这将在紧急/紧急关机情况下安全擦除驱动器(即:有人在偷窃您的笔记本电脑)。
假设我有一个 1000T 驱动器,但在我的紧急情况下时间太短(约 30 秒),无法用随机字节实际填充驱动器。相反,我只想覆盖标头,因为如果标头(包含带有主密钥和盐的密钥槽)丢失,驱动器上的所有数据都毫无价值——即使密码是通过橡胶软管密码分析恢复的.
如何以编程方式安全地确定 LUKS 标头的开始字节和结束字节,以便知道要覆盖什么?
在 LUKS1 中,我发现开始是 0,结束是通过将容器二进制标头中的 payload-offset 字段乘以 512 来确定的。例如
root@disp4117:~# hexdump -Cs 6 -n 2 luksVol1
00000006 00 01 |..|
00000008
root@disp4117:~# hexdump -Cs 104 -n 4 luksVol1
00000068 00 00 10 00 |....|
0000006c
root@disp4117:~#
在这种情况下,LUKS1 标头结束于字节 4096 * 512 = 2097152。
在 LUKS2 中,它要复杂得多,因为它需要在 LUKS 标头中使用 parsing the JSON metadata object。
【问题讨论】:
标签: json linux encryption luks