TPM 2.0:避免每次使用时的密钥(重新)生成开销

  • 本文关键字:密钥 重新 开销 TPM tpm
  • 更新时间 :
  • 英文 :


我正在开发一个应用程序,该应用程序需要在TPM中生成用于签名操作的RSA密钥。公共部分向后端注册一次,然后重复使用私有部分进行身份验证。此使用将跨越计算机关闭/重新启动周期。在我的层次结构的根部,我有一个使用 CreatePrimary(( 生成的 SRK 密钥(即基于此类模板(。我知道我可以为后续会话重新生成此密钥(通过将随机输入保存在程序数据中(。程序的实际签名密钥也可以以加密形式保存,然后在重新生成 SRK 密钥后使用 Load 函数加载。

所以从功能上一切正常,但我想避免密钥重新生成开销。我在这里有什么选择?

1( 据我所知(但如果我错了,请纠正(上下文保存将无法在电源循环中幸存下来(文档说它会在电源重置中重置(。请确认是否可以使用上下文保存。

2(有一个名为EvictControl的函数来完成这项工作。但它涉及有限的 NV 内存(因此,如果应用程序"忘记"此类返回的句柄,则永远无法释放内存,而无需重置整个 TPM(,并且将磨损 TPM(仅在初始注册时(。这合适吗?

3(也许还有第三个选项我没有找到?是否有可以使用的"默认"SRK,因此我不必(重新(生成一个?

如果没有其他工作,我计划使用此功能,但我想知道是否有其他选择。我不明白为什么没有 ExportPrimary((/ImportPrimary(( 之类的东西可以导出一个可以稍后导入的主数据库,而无需接触 NV 存储。导出将在 NV 存储中的 TPM 内存储的密钥下完成(仅在 TPM 清除等情况下重新生成(,因此具有与 EvictControl 相同的安全级别,但不占用每个生成的密钥的 NV 存储。

从我对这个问题的解读来看,您似乎在每次通电时都会重新生成 SRK。你真的不应该这样做,SRK 应该是一个持久密钥,请参阅 https://trustedcomputinggroup.org/wp-content/uploads/TCG-TPM-v2.0-Provisioning-Guidance-Published-v1r1.pdf。

至于如何使其持久化,似乎您已经知道如何做到这一点,只需使用 EvictControl 即可。

最新更新