如何在不使用另一个NvIndex的情况下保护NvIndex不被重新创建

时间:2019-07-29 11:36:09

标签: tpm

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

    策略会话B: Policy_Nv ,计数器索引的值必须等于其当前值 Policy_NvWritten > TPM_NT_PIN_FAIL NvIndex不得设置TPMA_NV_WRITTEN标志, Policy_CC NV_WRITE

    限制访问NvIndex的政策: Policy_Or 政策会议A,政策会议B

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

可能会出现许多此类密钥需要创建的情况,因此每个密钥需要两个NvIndex可能会成为问题。

0 个答案:

没有答案