如何确定计算机是否有可用的 TPM(可信平台模块)

Mat*_*ine 21 linux security tpm

想玩转可信平台模块的东西,我安装了TrouSerS并尝试启动tcsd,但我收到了这个错误:

TCSD TDDL ERROR: Could not find a device to open!
Run Code Online (Sandbox Code Playgroud)

但是,我的内核加载了多个 TPM 模块:

# lsmod | grep tpm
tpm_crb                16384  0
tpm_tis                16384  0
tpm_tis_core           20480  1 tpm_tis
tpm                    40960  3 tpm_tis,tpm_crb,tpm_tis_core
Run Code Online (Sandbox Code Playgroud)

那么,我如何确定我的计算机是否缺少 TPM 与 TrouSerS 有错误?

无论是dmidecode也不是cpuid关于“TPM”或“信任”输出任何东西。往里/var/log/messagesrngd: /dev/tpm0: No such file or directory,一方面我看到了,但另一方面我看到kernel: Initialise system trusted keyrings并根据这个内核文档可信密钥使用 TPM。

编辑:我的电脑的 BIOS 设置菜单没有提及 TPM。

另外,看着/proc/keys

# cat /proc/keys 
******** I--Q---     1 perm 1f3f0000     0 65534 keyring   _uid_ses.0: 1
******** I--Q---     7 perm 3f030000     0     0 keyring   _ses: 1
******** I--Q---     3 perm 1f3f0000     0 65534 keyring   _uid.0: empty
******** I------     2 perm 1f0b0000     0     0 keyring   .builtin_trusted_keys: 1
******** I------     1 perm 1f0b0000     0     0 keyring   .system_blacklist_keyring: empty
******** I------     1 perm 1f0f0000     0     0 keyring   .secondary_trusted_keys: 1
******** I------     1 perm 1f030000     0     0 asymmetri Fedora kernel signing key: 34ae686b57a59c0bf2b8c27b98287634b0f81bf8: X509.rsa b0f81bf8 []
Run Code Online (Sandbox Code Playgroud)

Ste*_*itt 25

TPM 不一定出现在 ACPI 表中,但模块会在找到支持的模块时打印一条消息;例如

[  134.026892] tpm_tis 00:08: 1.2 TPM (device-id 0xB, rev-id 16)
Run Code Online (Sandbox Code Playgroud)

所以dmesg | grep -i tpm是一个很好的指标。

确定性指标是固件的设置工具:TPM 涉及从固件设置管理的所有权程序。如果您的设置没有提及任何与 TPM 相关的内容,那么您就没有 TPM。

TPM 最初出现在服务器和商务笔记本电脑(以及 ChromeBook,如icarus所解释的)中,在台式机或“非商务”笔记本电脑中很少见;这在过去几年发生了变化,Windows 11 现在需要 TPM。任何支持英特尔 TXT 的东西都有一个 TPM。

  • 2020 年更新:大多数新制造的 PC,甚至是消费型号,现在都带有 TPM。Microsoft [正式推荐它们](https://docs.microsoft.com/en-us/windows/security/information-protection/tpm/tpm-recommendations) 在所有新 PC 中,并且越来越多的 Windows 功能需要它。 (3认同)
  • 当我执行“dmesg | grep -i tpm”时,我的 SLIMBOOK Pro X 15(在内核 5.13 上)不显示任何内容,但是“cat /sys/class/tpm/tpm*/tpm_version_major”显示“2”。 (2认同)

pev*_*vik 14

也可以通过 sysfs 检测它:

$ [ -d $(ls -d /sys/kernel/security/tpm* 2>/dev/null | head -1) ] && echo "TPM available" \
    || echo "TPM missing"
Run Code Online (Sandbox Code Playgroud)

并且由于内核5.6(提交7084eddf6be9 tpm:添加 tpm_version_major sysfs 文件),可以使用 sysfs 文件检测版本:

$ cat /sys/class/tpm/tpm*/tpm_version_major
1
Run Code Online (Sandbox Code Playgroud)

注意:某些 TPM 不导出 sysfs(固件错误)。

另一种方法是检查/dev/tpm0or /dev/tpmrm0。所有 TPM 设备都应具有/dev/tpm0. /dev/tpmrm0仅适用于 TPM 2.0,但已在 v4.12-rc1 中添加(fdc915f7f719 tpm:通过设备链接暴露空间 /dev/tpmrm):

$ [ -d $(ls -d /sys/kernel/security/tpm* 2>/dev/null | head -1) ] && echo "TPM available" \
    || echo "TPM missing"
Run Code Online (Sandbox Code Playgroud)