根据网上很多教程,将TPM存储的密钥添加到LUKS的过程是运行clevis luks bind -d /dev/sda1 tpm2 '{"pcr_ids": "7"}'
,但我收到以下错误:
ERROR: pcr-input-file filesize does not match pcr set-list
ERROR: Could not build pcr policy
ERROR: Unable to run tpm2_createpolicy
Invalid input!
所以我删除了 pcr_ids 并且命令变为clevis luks bind -d /dev/sda1 tpm2 '{}'
. 这很好用。将“密码短语”添加到插槽并将磁盘添加到 /etc/crypttab(使用 tpm2-device=auto)使磁盘能够在启动时自动解密。
我不确定它是否足够安全。这种做法有任何漏洞吗?
PS 我在 MSI X570A-PRO 上使用 AMD 5950X(及其 ftpm)
将TPM 密封1数据绑定到 PCR 用于对系统状态施加特定要求。如果策略中没有任何(有用的)PCR,则可以从任何操作系统和任何环境中解封数据(即 LUKS 密钥)。
因此,尽管数据仍然绑定到同一台机器,但它并不能防止有人在该机器上启动 Linux LiveCD 并通过以下方式手动解封 LUKS 密钥
tpm2_load
;也不反对某人快速编辑您的 /boot/initrd 以使其在屏幕上打印未密封的键;也不反对以这种方式添加init=/bin/sh
到内核命令行并绕过操作系统登录密码的人。通常建议使用 PCR7,因为它绑定到安全启动状态(例如,使用 BitLocker,它限制在加载 Microsoft 签名的 Windows 内核时解封密钥,而不是在使用第三方证书时),尽管我不确定是否这对于具有基于 Shim 的安全引导支持的 Linux 来说已经足够了。其他选项要么过于具体和脆弱(例如 PCR4),要么不够具体(例如 PCR4)。
不过,“tpm2-device=auto”看起来不像是给 Clevis 的——它是给 systemd-cryptsetup 提供的 tpm2 插件的,我认为它在存储 LUKS 元数据的方式上与 Clevis 不兼容。对应的命令是
systemd-cryptenroll --tpm2-pcrs=7 /dev/sda1
。1不是 TPM 存储的,因为 TPM 将加密的数据返回给操作系统进行存储。