我想按类型列出 TPM 芯片上存储的信息,只是为了查看在清除旧机器的 TPM 芯片之前所有相关数据是否已迁移到新机器。我不是在寻找转储私钥等,只是寻找 ID 和用途的列表(例如 Bitlocker 加密密钥、虚拟智能卡等)。在 Windows 和/或 Linux 中这是否可能?
(我有 dTPM 和 fTPM 配置。)
不可能有完整的列表,因为这些数据实际上根本没有存储在芯片上。A\xc2\xa0TPM 实际上只有很少的持久存储 \xe2\x80\x93 Windows 仅在其中存储单个“存储根密钥”(也称为 SRK),其他所有内容都使用 SRK 进行加密并返回到操作系统进行存储。
\n这意味着 TPM 完全不知道哪些内容已被删除以及哪些内容仍存储在某个文件中。(这也意味着 TPM 永远不会“填满”,与智能卡不同。)
\n例如,BitLocker“TPM”保护器仍存储在卷标头中,仅使用附加策略的 TPM_Seal() 或 TPM2_Create() 进行加密。每次需要启封保护器时,操作系统都必须将其加载回 TPM 的 RAM,其中 TPM 使用 SRK 对其进行解密,验证策略(如果需要,比较 PCR 值),然后返回明确的内容数据传输至操作系统或拒绝。
\n因此,您无法列出使用特定 TPM 的所有 BitLocker 卷,因为不会在任何地方跟踪该信息。(幸运的是,Windows 仅对 OS C:\\ 卷使用 TPM 保护程序,因此您可以安全地排除所有“数据”卷。)
\nLinux 中的 LUKS 使用相同的方法,尽管直到最近才“商定”LUKS2 令牌格式 \xe2\x80\x93 ,过去使用了各种手写脚本,其中一些可能将密封数据直接存储在 TPM 中的NV存储。然而,随着 systemd 和 cryptsetup 现在将 TPM 支持作为标准功能,密封的密钥槽始终会写回 LUKS2 磁盘标头。
\n(以下是如何使用 TPM 2.0 密封 LUKS 密钥的示例。带有“tpm2-blob”的 JSON 片段保存了 TPM 密封的数据。)
\n同样,保存在 TPM“中”(通过“平台加密提供商”KSP)的证书密钥对实际上存储在%USERPROFILE%\\AppData\\Local\\Microsoft\\Crypto\\PCPKSP您自己的配置文件中(对于直接通过 CAPI/CNG 创建的密钥),或者存储在 LocalService 配置文件中(对于存储在 VSC 中的密钥) 。
(这只是私钥 \xe2\x80\x93 ,与智能卡不同,证书本身从一开始就不会接触 TPM。使用 VSC 时,它们存储在 VSC 的“模拟智能卡”存储中,似乎位于%SYSTEMROOT%\\ServiceProfiles\\LocalService\\AppData\\Local\\Microsoft\\Windows\\SmartCard\\Tpm,并且当使用直接 CNG 时,它们会转到所有其他证书所在的位置。)
您可以使用certutil\xe2\x80\x93 来获取 CAPI 中所有证书以及它们使用的 KSP 的列表,查找“Microsoft Platform Crypto Provider”(直接 CNG)或“Microsoft Smart Card Provider”(VSC)认可此类证书:
certutil -store -silent -user My\nRun Code Online (Sandbox Code Playgroud)\n没有直接的 Linux 等效项,因为 Linux 上首先没有 CAPI/CNG 等效项 \xe2\x80\x93 程序可以使用 tpm2-pkcs11(将证书存储在 SQLite 数据库中)或 .pem 密钥使用 openssl-tpm2-engine 生成(只是分散在各处的文件),甚至直接使用 tpm2-tss API。
\n话虽这么说,TPM 2.0 确实有一些持久存储,尽管不太可能直接使用它,但您可以使用 Linuxtpm2-tools尝试列出内容:
通常有空间容纳 3 个左右的密钥对,可以使用列出这些密钥对tpm2_getcap handles-persistent(tpm2_readpublic -c <handle>依次应用于每个显示的句柄)。通常,只有基于 RSA 的“存储根密钥”(用于加密数据)和“认可密钥”(用于识别 TPM 本身)存储在 \xe2\x80\x93 中,而后者不会通过无论如何,TPM 很清楚。
该句柄0x81000001最常用于基于 RSA 的 SRK、0x81010001基于 RSA 的 EK。有时您可能会0x81000000在 Linux 上看到是否使用了旧版本的 tpm2-pkcs11 工具。
(Systemd LUKS 支持使用基于 ECDSA 的 SRK,并且不需要持久存储它 \xe2\x80\x93 只是每次从“存储层次结构种子”重新生成它。)
\n还有一些通用“NV 存储”空间,可以使用tpm2_getcap handles-nv-index和列出tpm2_nvread。在大多数情况下,它仅包含一些制造商预定义的数据,例如 EK 证书(位于 0x01C00002)。由于没有任何名称,您基本上必须猜测 \xe2\x80\x93 假设所讨论的 NV 索引首先是可读的。
| 归档时间: |
|
| 查看次数: |
6670 次 |
| 最近记录: |