首页 > 解决方案 > 如何在不需要另一个 NvIndex 的情况下保护 NvIndex 不被重新创建

问题描述

TL;DR:(如何)是否可以确保 NvIndex 的名称在每次创建时都会更改而不需要任何其他对象?

我想在 TPM (v2) 中创建一个应受 TPM_NT_PIN_FAIL NvIndex 保护的密钥。我知道该怎么做,但我认为攻击者可能能够删除 NvIndex 并在 pinCount 设置为零或非常高的 pinLimit 的情况下重新创建它。

据我所知,重新创建 NvIndex 并不会改变他的名字,因此仍然可以满足依赖于 NvIndex 的策略。我有一个想法如何确保每次创建 NvIndex 的名称都会更改,但这需要第二个 NvIndex。

这是我目前的想法:

  1. 创建一个 NvIndex 作为 TPM_NT_COUNTER
  2. 增加计数器
  3. 读取计数器值
  4. 创建一个策略以允许对 NvIndex 进行读取访问,但只允许一次写入:

    策略会话 A:Policy_CC NV_READ

    Policy Session B:Policy_Nv 计数器索引的值必须等于其当前值,Policy_NvWritten TPM_NT_PIN_FAIL NvIndex 不能设置 TPMA_NV_WRITTEN 标志,Policy_CC NV_WRITE

    限制访问 NvIndex 的策略:Policy_Or Policy Session A、Policy Session B

  5. 使用密码和策略创建 NvIndex
  6. 将 pinCount 和 pinLimit 写入 NvIndex
  7. 增加计数器

可能需要创建许多这样的键,因此每个键需要两个 NvIndex 可能会成为问题。

标签: tpm

解决方案


推荐阅读