【TPM2.0原理及应用指南】 9、10、11章

第9章 hierarchy

NV索引属于一个hierarchy,但不在树中。
每个hierarchy的密码根是一个种子,一个大的随机数,TPM产生,永远不可能泄露。

9.1 三个持久性hierarchy

TPM 1.2 中SRK(存储根密钥)是随机产生的,一旦被删除就不能再次生成同样的SRK。

YPM 2.0 中扩展出了三个持久性hierarchy(平台、存储、背书),这三个hierarchy有如下相同特征

  • 每一个都有授权值和策略
  • 每一个都有启用标志
  • 每一个都有一个种子,从中可以得出密钥和数据对象。种子是持续存在的。
  • 每一个都有主密钥,由主密钥可以生成子密钥

TPM 2.0中添加了更多灵活性:

  1. 主密钥并不限于存储密钥
  2. 可以存在不止一个主密钥
  3. 不用存储所有主密钥,可以只在需要时生成他们,本质上,种子才是真正的根,主密钥可以被换出到TPM外部,当作上下文存储起来。

三种hierarchy

  • 平台hierarchy:
    意在处于平台制造商的控制之下,平台hierarchy在重启时是使能的,平台授权值被设定为一个零长度的口令,策略被设定为一个不可满足的策略,这在hierarchy中是独特的。
  • 存储hierarchy
    目的是供平台所有者使用,存储hierarchy可以由所有者禁用,用于非隐私敏感性操作,而单独控制的背书hierarchy则处理隐私。
  • 背书hierarchy
    背书hierarchy是用于隐私敏感性操作的,它的使能标志、策略和授权值,与其他hierarchy都是独立的。 关心隐私的用户可以禁用背书hierarchy,TPM应用仍可使用存储hierarchy,允许平台软件使用TPM。

9.2 隐私

这里的隐私意味着接收到TPM数字签名的远程方,不能将数字签名相关联,并从密码学上证明其来自于同一个TPM。关联就是要求确定签名密钥来源于一个单一、经过认证的TPM。

TPM制造商生成背书主种子,基于此种子生成一个或多个主密钥,然后为这些密钥生成证书。证书证明密钥来自于一个经过认证的TPM,TPM是制造商生产的。

如果主密钥是一个签名密钥,直接证明其他签名密钥,关联就很简单,因为所有的签名收敛于同一个证书。

当主密钥是加密密钥时,创建子密钥证书的过程会采用一种更复杂的流程,叫做激活证书。证书授权机构称为隐私CA,因为对已经证明过的密钥,认为隐私CA不会泄露密钥之间的任何关联关系。

9.2.1 激活证书

主密钥是一个解密密钥,非签名密钥,CA生成证书,并用主密钥的公钥加密它。只有拥有对应私钥的TPM,才可以恢复证书。
激活证书
课本P89页,这部分内容太多,打字可能有点慢。

9.3 空hierarchy

空hierarchy与三种持久性hierarchy类似,可以有主密钥,基于主密钥可以创建子密钥。不同点如下:

  • 授权值是一个零长度的口令,策略为空(不能被满足)。这些不能被改变
  • 它不能被禁用
  • 它有一个种子,密钥和数据对象都来源于它。这个种子不是持久性的,在每次重启时,它和proof会被重新生成不同的值

会话、保存的上下文对象和序列对象(摘要和HMAC状态)都是空hierarchy。这使得他们在系统每次重启后都为空,因为种子和proof值改变了。用户通常不会修改背书hierarchy种子(因为这会使证书无效)、存储hierarchy种子(因为它会让具有长生命周期的密钥无效)和平台hierarchy种子(因为用户可能没有这个权力)。

临时性密钥在系统重启后就会被擦除,TPM可以被用作一个密码协处理器,利用外部生成的密钥,执行密码算法。

第10章 密钥

能够在应用程序是用密钥时,同时保证它们安全地存在于一个硬件设备里,这是TPM的最强之处。

10.2 密钥生成器

基于若软件随机数发生器或熵源强度不够的软件生成密钥的弱点,它都没有。

10.3 主密钥和种子

TPM密钥可以形成一个hierarchy,用父密钥封装子密钥。
1、TPM密钥可以形成一个hierarchy,用父密钥封装子密钥。主密钥是hierarchy的根密钥。它们没有父亲。
2、三个持久性 hierarchy 中的每一个都有一个相应的主种子:背书主种子、平台主种子和存储主种子。这些种子从来不会离开TPM。它们是密钥派生函数的秘密输人。当TPM创建一个主密钥时,它使用一个主种子和一个公共模板。在具体指定一个密钥时,你通常期望的所有项目在模板里都有,这些项目包括算法和密钥大小、它的策略和密钥类型(签名、加密等)。调用者也可以在模板中提供一个独特的数据。该独特数据是模板中公钥区域的输入。
3、密钥派生函数是固定的和可重复的。相同的种子、相同的模板,总是产生相同的密钥。通过改变模板中的独特数据,调用者可以创建无限数量的主密钥。

10.4 密钥持久留存

1、用户调用TPM2_EvictControl命令,将一个密钥从易失性空间移存到非易失性空间中,这样在每次加电重启后,它就可以保持已被加载(持久保存)。任何密钥都不一定需要被持久保存以供使用。通常我们希望只有少量主密钥,或许每个hierarchy有一个,会被设定为持久留存,以提高性能。
2、除主密钥外,在背书hierarchy、存储hierarchy和平台hierarchy中的其他密钥也可以被持久保存。
3、空hierarchy 中没有密钥可以被持久保存。重启后,所有的密钥都会丢失。
4、只有有限数量密钥可以被持久保存,但TPM可以处理无限数量的密钥,应用程序通过将TPM当作一个密钥缓存来做到这一点

10.5 密钥缓存

除了主密钥之外的其他密钥,TPM可用作密钥缓存。也就是说,TPM2_Create创建一个密钥,并使用父密钥封装( wrap)(加密)此密钥,将封装后的密钥返回给调用者。调用者将此密钥存储到TPM 之外,可能是磁盘上。为了使用此密钥,用户必须使用TPM2_Load,将它先加载到TPM 中。完成后,调用者可以使用TPM2_FlushContext释放空间。此密钥与主密钥不同,主密钥没有父亲,在创建后就留存在 TPM 中。

10.6 密钥授权

TPM可以提供访问控制,密钥访问需要授权。当密钥离开TPM时,他被一个强的父加密密钥封装,并且有词典攻击保护逻辑保护,即密码错误时,TPM会记录,并阻止在一个可配置时间内进一步尝试。

10.7 密钥销毁

有时,密钥需要被销毁,可能是因为授权被泄露,也可能是机器要被用作其他用途。用软件存储的密钥永远都不能被销毁,因为它们可能在任何地方复制。但是TPM密钥有父密钥或者本身就是主密钥。每个 hierarchy都有各自独特的主种子。擦除主种子,就可以阻止重新创建该hierarchy的主密钥——显然这是一个很强硬且很少执行的行为。擦除主密钥可以阻止它们的子密钥被加载到TPM中。有属性表明只能存在于TPM中的密钥都将被销毁。

密钥类型和属性

在这里插入图片描述
主密钥不能被复制,他们与TPM中的某个hierarchy相绑定。
密钥复制属性的一个主要用例就是密钥备份。TPM 2.0由两个属性控制密钥的复制,一个极端是,一个密钥被锁定到一个单一TPM上的单一父密钥,永远不允许被复制。另一个是,密钥可以自由复制,所有由该父密钥封装的子密钥,直至所有子孙,在目的平台都可用。居中的情况是,一个密钥被锁定到一个父密钥,但父密钥移动时,他也会移动。

子密钥可以有不止一个父密钥,复制过程就是建立新的父子关系的过程,但没有废除原来的父子关系。

受限的签名密钥:一个受限的签名密钥只可以签名由TPM生成的摘要。然而TPM如何知道它计算了摘要呢,答案是使用票据,当TPM计算摘要时,它生成一个票据,声明是TPM自身计算的摘要。TPM通过4字节的魔数知道哪些数据生成票据,不是以魔数开头,才生成。

10.10 上下文管理与加载

上下文管理包括,将一个已加载密钥的上下文保存到TPM之外,之后再将上下文加载到TPM里。

10.11 空hierarchy

每次重启时,都会被清除

第11章 非易失性索引

TPM要求在使用一下两种通用数据结构是,需要使用非易失性(NV)存储器:

  • 在TPM架构中定义的数据结构:hierarchy授权值、种子、证据、计数器、时钟、密钥
  • 有用户或特定平台规范定义的非结构化数据:用户的自定义索引,TPM通过基于HMAC的共享私钥、PCR值、物理位置(locality),以及物理存在来提供授权,进而控制索引访问。

NV四种索引类型:普通类型,计数器类型,位字段类型,扩展类型

11.1 NV普通索引

普通索引–类似于TPM1.2索引–拥有任意长度的非结构化数据。与计数器、位字段和扩展索引不同,它对可写入的数据类型没有任何限制

  • NV计数器索引
    非易失性计数器是一个只能递增的64位值。在第一个递增命令开始是,它初始化为TPM上任何计数器中的最大值。这个值包括当前定义的计数器索引和过去定义的但已不在TPM中的计数器。因此,即使删除或重建索引,计数器也无法倒退。
  • NV位字段索引
    位字段索引保护64位,在第一次写入开始是将所有位初始化为空,也可以有选择的设置位。一位(或多位)可以设置,但从不清空。
  • NV扩展索引
    扩展索引是由特定的哈希算法定义的,并且有固定的索引生命期。该索引的数据大小基于其哈希算法。数据在第一次写入之前全部初始化为0。写操作是一个扩展操作,类似于PCR中的写操作
    大多数用力集结合扩展索引和混合索引来创建灵活的PCR,另一种通用的用例是安全审计日志,因为任何扩展操作都会创建一个无法逆转的密码保护历史记录。
  • 混合索引
    另一个新的TPM2.0特性是混合索引。与非混合索引一样,NV索引元数据(索引句柄、大小、属性、策略和口令)是非易失性,混合索引数据是在易失性存储器中创建的。处理混合计数器,索引数据仅在正常关机时写入NV内存。4种索引类型中的任何一种(普通、计数器、位字段或扩展)都可以是混合索引。
    当应用程序希望频繁写操作时,混合索引可能才是适用的。由于NV技术往往是介质损耗性的,TPM可以通过拒绝频繁写操作保护自己。易失性存储器不存在损耗问题,因此可以根据需要编写混合索引。
    若索引在正常关机之前被删除,则混合索引数据只能存在于易失性存储器中。应用程序可以定义索引、写入数据、适用策略的授权值,然后删除索引。
    混合普通、扩展和位字段索引只在正常关机时写入NV存储器,但混合计数器则较复杂,因为它不可以出现回滚或丢失递增操作。因此必须确保即使不能实现正常关机,易失值也要写入NV存储器。
  • NV访问控制
    NV访问控制
  • NV写入
    每个索引在第一次创建时,都有一个隐含值:未写入。在TPM1.2中,总是用全0数据创建索引,所以读操作不能区分全零和尚未写入的索引。在TPM2.0中,未写入是一个单独状态。策略可以指定索引必须写入或未写入。
  • NV索引句柄值
    当用户创建NV索引是,用户会分配索引值。在TPM1.2中,某些位具有特殊属性,例如用于锁定的D位。在TPM2.0库规范中,处理全局句柄范围之外就没有索引赋值,并且索引值的任何位都,没有特殊含义。TPM不会根据索引值强制规定任何属性。然而,特定平台规范或全局TCG注册表可以指定索引值。
  • NV名称
    TPM实体的名称唯一(加密)定义了该实体,并可用于授权。NV索引是一个公共区域的哈希值,包括索引(句柄)、属性(包括它是否已经被写入)、策略和大小。
    NV名称安全性
  • NV口令
    TPM的一个奇怪的地方是用户不能真正更改对象的口令。TPM2_ObjectChangeAuth命令可以用新命令创建对象,但原来的对象仍然存在。用户可以删除该对象的所有现有副本,但TPM不能强制执行此操作。
    NV索引仅存在于TPM内。它永远不会被保存到上下文或以任何方式移出TPM。
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Godams

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值