我了解 TPM 可用于存储无限数量的密钥。但是,我还有几个问题:
- 假设 TPM 连接在 LPC 上,它可以保护通过该接口传输的数据。
- 如果我按照 SRK 密钥方法使用什么作为根密钥,即 TPM 中的 SRK 密钥硬代码。
- 如何使用单独的 TPM 在多个系统中分发这些密钥。我是否必须在每个系统预分发上使用 TPM 对所有密钥进行预编码。
我了解 TPM 可用于存储无限数量的密钥。但是,我还有几个问题:
对于 1.2 版,这将是在硬件中实现的 Locality 概念。实际上,通信没有经过身份验证,并且 1.2 理论上仍然容易受到1.1版重置攻击,但它从未被证明(攻击窗口小得多)。需要考虑的一件重要事情:并非所有 TPM 都是平等的,您可以选择自己的安全级别。现在芯片组中集成了许多 TPM——如果我记得的话,自 2009 年以来。英特尔将这些 TPM 作为其 vPro 技术的一部分提供。它们在新架构或北桥上的Platform Controller Hub内的管理引擎内作为应用程序运行。反过来,这意味着攻击面很可能是空的。
SRK 是在平台所有者(即您)“获得 TPM 的所有权”时创建的。这意味着您初始化 TPM 并为新生成的 SRK 设置密码。唯一的硬编码密钥是 EK(背书密钥),用于(必要时)向外部实体证明它是有效/合规的 TPM。
TPM 具有可迁移密钥的概念,它提供了一种将密钥从一个平台移动到另一个平台的方法。请注意,TPM 并不真正管理对称密钥,而是使用对称密钥来加密 blob。显然,您可以在 blob 中加密对称密钥,但这种对称密钥不会完全受益于 TPM 的优势,因为它需要被解密并加载到内存中才能使用。
如果您使用 TPM 存储秘密(将其密封),则只能通过受信任的系统状态检索它,但可以检索它。这使得它在内存中可见(可能是交换),并且容易受到主板上的窃听。
是的,SRK 存储在 TPM 中,它是在初始化时生成的,通常永远无法通过软件指令读取(并且很难通过硬件访问进行逆向工程)。
我想您将不得不重新加密您想要分发到独特平台 SRK 的数据。但是您可能只对单个存储密钥执行此操作。所以基本上你用一个新的存储密钥加密文件并将它发送到所有机器。然后为所有 TPM 密封此密钥。使用 TPM 背书密钥的公共部分可以安全地分发它。