我正在尝试在 Debian 计算机上实现 LUKS 可否认性,但我遇到了困难。我在计算机上安装了 Debian,并按以下方式格式化硬盘:
- sda 完全由 sda1 分区填充,这是 LUKS
- 在这个 LUKS 容器 (sda1) 中,有一个包含 3 个卷的 lvm 组:根卷、主卷和交换卷
- sdb1 是
/boot
(未加密分区)(位于可拆卸 USB 记忆棒上)
现在我想“移动” LUKS 标头以实现可否认性。因此,我将标头备份到存储棒上(在 initramfs 上):
cryptsetup luksHeaderBackup /dev/sda1 --header-backup-file /etc/luks_header/sda1-header-backup
我挂接了一个脚本,将可通过 initramfs 访问的标头放入其中,/usr/share/initramfs-tools/hooks/
以创建/etc/luks_header
并复制标头。然后我进行了以下更改/etc/crypttab
:
sda1_crypt UUID=xxx-xxx-xxx-xx none luks,header=/etc/luks_header/sda1-header-backup
所以现在我应该用 启动/sdb1
。解密是/etc/luks_header/
使用 (initramfs 的) 中的 LUKS 标头执行的。
然后为了完成可否认性,我需要删除 sda1 的 LUKS 标头:
dd if=/dev/urandom of=/dev/sda1 bs=2M count=1
(标头的大小为 2MB,从扇区 0 开始。)但是当我尝试启动时,提示告诉我他的 lvm 出现了问题。
我相信这是因为我破坏了标头后面的某些东西,所以我用 dd 将写入量减少到 1MB,但问题仍然存在。我以为我只触碰了标头(由于 crypttab,它不应该被读取),但我错了。有人能解释一下吗?
我找到更多信息的网站:
答案1
UUID是在这 2MB 上也是如此。
您无法通过使用随机字节覆盖的 UUID 来引用磁盘。您需要通过磁盘/分区的内核名称来引用磁盘。如果需要更改硬件并保留引用/etc/crypttab
并/etc/fstab
抵制这种情况,您可能能够获得更好的磁盘名称,即非内核启动过程依赖的磁盘名称/dev/sdb
,例如来自/sys/devices/pci*
。
额外(信息安全相关)
请注意,cryptsetup/LUKS 的现任维护者 Arno Wagner 反对合理的否认:
[不使用 LUKS 的加密] 对当局的价值有限。在文明国家,他们无论如何都不能强迫你交出加密密钥。在世界上相当多的国家,他们可以强迫你交出密钥(使用监禁或更糟的方式向你施压,有时没有正当程序),在最坏的情况下,他们只需要对加密数据的存在有模糊的“怀疑”。有时这适用于所有人,有时只适用于你被怀疑拥有“非法数据”(定义可能会更改)时,有时专门用于跨越边境时。请注意,这种情况在美国和英国等国家正在发生,程度不同,有时法院会限制当局实际可以要求的内容。
这是引自Arno 的 cryptsetup 常见问题解答(第 2.4 和 5.8 节)
但还要注意的是,合理否认是一个极具争议的话题。例如,参见对于加密卷/磁盘来说,合理的否认实际上是否可行?