TPM 2.0规范解读系列——Part 1体系结构第(七)读:主种子

11 篇文章 2 订阅
11 篇文章 5 订阅

前言

TPM 2.0第1部分包含对TPM属性、功能和方法的叙述描述。
本篇主要基于TPM 2.0规范Part 1的第14章(Primary Seeds)的内容,对TPM的主种子进行解读。



一、主种子(Primary Seeds)

1.介绍

Primary Seed是一个大的随机值,它长期存储在TPM中; 永远不会以任何形式存储在TPM之外。 主种子用于生成对称密钥、非对称密钥、其他种子和证明值。

Primary Seed使用第27.5节描述的方法生成Primary Objects。 简而言之,调用者提供要创建的对象的参数,TPM使用这些参数和密钥导出函数(KDF)中的Primary Seed来生成所需类型的对象。 在TPM生成一个Primary Object之后,它使用该对象的参数和Primary Seed生成一个对称密钥来加密对象的敏感部分(即私有数据和授权)。 然后,它将公共部分和对象名称返回给调用者。 然后,主对象可以像其他对象一样被上下文保存和加载。 它可以持久化存储在TPM的NV内存中(TPM2_EvictControl())。

主种子只生成主对象。 其他所有对象都使用TPM的随机数生成器作为产生对象秘密的熵源。

2.原理

该规范提供的算法灵活性使TPM能够支持许多不同的非对称密钥类型。 TPM 1.2只支持RSA算法,常用参数数量有限。 由于曲线参数可能会根据应用的不同而不同,因此ECC支持的加入大大增加了参数的数量。

虽然这种灵活性是TPM 2.0的一个重要优点,但它为管理TPM背书密钥(EKs)和EK证书带来了新的挑战。 正如在9.4.3.2中提到的,EK是可信报告根(RTR)的标识,算法敏捷性为同一个RTR创建了多个标识的可能性,每个标识基于一组不同的加密算法。

本规范中采用的方法允许对具有不同参数的大量EK进行认证,而不需要将它们中的任何一个存储在持久TPM存储中。

该规范的机制使用一个持久的、随机生成的种子值导出EK。 推导过程让TPM为每组关键参数生成不同的EK。 只要种子值不改变,相同的关键参数就会生成相同的EK。

这种EK生成方法的典型用途如下:TPM制造商或平台制造商让TPM创建一个新的背书主种子(EPS),然后根据输入参数集和该EPS生成密钥对。 TPM将保留生成的密钥。 应该选择关键参数的组合,以确保可能的TPM用户能够找到适合他们需求的组合。 然后,制造商为生成的公钥生成一个或多个证书,然后发布不存储EK对的TPM/系统。 系统所有者决定需要哪些密钥类型,并将这些类型的参数输入TPM。 如果与厂商使用的参数相同,则TPM将生成相同的密钥对。 然后,系统所有者拥有一个带有证书的EK。 由于EK通常是不可复制的,所有者可以做出选择。 他们可以在需要的时候重新创建EK,或者告诉TPM将EK保存在持久存储中。

种子密钥概念可以应用于其他两个TPM密钥层次结构:一个由平台固件使用,另一个用于所有者的存储层次结构。 背书密钥(EK)由背书主种子(EPS)生成,平台密钥由平台主种子(PPS)生成,存储根密钥(SRK)由存储主种子(SPS)生成。 每个种子值都有不同的生命周期,但是它在关联层次中播种的方式大致相同

主种子方法允许根据各种应用程序的需要使用具有不同安全属性的多个存储层次结构,而不需要所有SRK占用持久TPM内存。 如果应用程序需要,可以将SRK持久化到TPM NV存储中。

为了实现的简单性,这个方案还用于支持Platform层次结构。

3.主种子属性

3.1 介绍

主种子的比特数必须至少是TPM上实现的任何对称或非对称算法的安全强度的两倍。
示例1:认为RSA2048的安全强度为112位。 如果它是TPM上最强的算法,那么相关Primary Seed所需的大小至少为224位。
示例2:如果使用AES256,主种子将是512位,即使:(1)期望的安全强度是196位,(2)AES256仅因为方便而被使用,就像套件B的情况一样。

每个主种子由不同的权限控制。 在正常使用中,主种子预计有不同的寿命。

当现场升级改变了Primary Seed的强度,或者改变了使用Primary Seed的算法后,如果向TPM2_CreatePrimary()命令提供相同的模板,TPM将生成与TPM制造商提供的EK证书对应的原始EK,直到TPM2_ChangeEPS命令更改了EPS。

对于不改变Primary Seed强度或使用Primary Seed的算法但不影响基于种子的Primary Object的安全性的现场升级,具有相同输入的TPM2_CreatePrimary()在现场升级后应该在平台、存储和背书层次中产生与升级前相同的Primary Object。

示例:现场升级可能引起TPM2_CreatePrimary()使用相同的模板生成不同的密钥。例如,前一个版本01.38使用KDFa,后一个版本使用DRBG。另外,如果外场升级实现了更强的算法,安全强度需求可能引起种子长度的变化。

3.2 背书主种子(EPS)

EPS用于生成Eks并且是RTR身份的基础。

当TPM上电时如果没有EPS则生成一个EPS。TPM2_ChangeEPS()可以更改EPS(用新的EPS替换),但这需要平台授权。

TPM制造商可以注入一个EPS,并在受控条件下,根据特定的输入参数计算TPM将产生的非对称EKs。 只有TPM厂商可以注入EPS。

当一个EPS被替换时,背书层次结构中的所有对象都将失效,从该EPS生成的EK关联的证书将不再有用。 这意味着可能需要新的基于EPS的EK的证书。 发生此过程的环境可能无法保证EK是从真正的TPM生成的。 为了在这样的环境中支持重新认证,TPM允许在平台固件控制下平台层次结构和背书层次结构之间的密钥交叉认证。 交叉认证允许在更改种子时维持信任链。

使用EPS在背书层次结构中创建Primary Object需要endorsementAuthendorsementPolicy

3.3 平台主种子(PPS)

PPS用于生成由平台固件控制的层次结构。 从该种子派生的层次结构仅供平台固件使用,不应提供给用户安装的软件(如操作系统和应用程序)。

注1:平台固件可能会因为拥有平台的人的行为而更改,但用户可安装软件的定义不包括该更改。

当TPM上电时,如果没有PPS存在,TPM就会创建一个PPS。 TPM2_ChangePPS()可以更改PPS(用新的PPS替换),但这需要平台授权。

可注入PPS,但只能由TPM制造商注入。

平台授权需要使用PPS在平台层次结构中创建Primary Object。

在PPS层次结构中使用对象的授权应该使用一个包含对platformAuth引用的策略,而不是基于特定于密钥的授权值。
注:实现这种控制的一个简单方法是在TPM2_PolicySecret()中创建一个引用platformAuth的策略。 如果策略的唯一组件是引用TPM_RH_PLATFORM的TPM2_PolicySecret(),那么对于平台层次结构中的所有对象以及实现所选策略散列的所有平台,该策略可能是相同的。

3.4 存储主种子(SPS)

SPS用于生成由平台所有者控制的层次结构。 该种子生成的密钥作为普通操作系统和应用程序使用的存储根密钥。

TPM上电时,如果没有SPS存在,则会创建SPS。 如果TPM所有者希望确保将来不会在存储层次结构中使用以前生成的密钥,则可以使用TPM2_Clear()来更改SPS。

修改SPS会使存储层次结构中的所有对象失效,无法重新创建。 更改SPS还会使背书层次结构中的所有对象失效,只有背书层次结构中的主对象才能被重新创建。

3.5 空种子(The Null Seed)

Null Seed在每次TPM复位时被设置为一个随机值。 Null Seed可用于生成层次结构(主对象和主密钥的子对象),这些层次结构只在下一次TPM重置之前可用。

null层次结构中的对象不能成为持久对象。 然而,在其他方面,这个层次结构中的对象的行为类似于其他层次结构中的对象。

4.层次结构证明(Hierarchy Proofs)

TPM使用一个证明值来证明它创建或检查了外部提供的值。 证明值与层次结构相关联,并且在统计上是唯一的。 证明值用于票据(ticket)。 票据使用特定于层次结构的证明值。 当票据的关联层次结构被禁用时,它不能被使用。

例1:TPM可以验证非对称签名的数据。 这样做之后,它生成一个票据,它是签名数据上的HMAC,HMAC密钥是一个证明值。 这向TPM证明它已经检查了非对称签名,因此它不必再这样做。 随后,当TPM需要检查数据是否被正确签名时,它可能使用对称密码算法(一种散列)而不是非对称密码算法(来验证签名)。

例2:当TPM在存储层次结构中的一个对象上执行TPM2_ContextSave()时,它可以在对象的完整性值中包含存储层次结构的证明(shProof)。 当SPS被更改时,shProof将被更改,这样保存的上下文可能不会被重新加载。

平台层次证明(phProof),用于与平台层次关联的对象。 phProof随PPS变化而变化。 用于存储和背书层次结构的shProof会随着SPS的变化而变化。

注:可以在背书层次结构中创建非Primary Objects的对象。 这些普通对象被认为属于特定的TPM所有者。 SPS的变化表示TPM的Owner的变化。 在背书层次结构中,将ehProof纳入普通对象的保护中,确保当所有者变更时这些对象将被删除,因为ehProof也会在所有者变更时变更。

proof是一个值,它可以被永久保存在TPM上,或者可以在每次引导或根据需要从PPS或SPS重新生成。 证明值永远不会以任何形式存储在TPM之外。 只有当计算结果存储在TPM之外时,层次结构证明值才用作HMAC密钥。 示例是保存的上下文和票证。 只要计算结果不离开TPM,就可以在其他计算中使用层次证明值。

TPM应该产生比以下更大的证明值:

  • TPM上实现的任何哈希算法产生的最大摘要的大小,或
  • TPM支持的最大对称密钥的两倍大小。

例3:如果TPM实现了SHA384和AES256,则证明值的大小为512位。

注:由于当密钥大小大于摘要大小时,安全强度不会提高,所以当TPM实现均衡算法集时,proof值大小建议提供了适当的强度。 TPM模块采用SHA256、ECC256、AES128均衡,proof值为256位。


总结

以上就是今天要讲的内容。本文介绍了主种子(Primary Seeds),Primary Seed是一个大的随机值,它长期存储在TPM中;永远不会以任何形式存储在TPM之外; 主种子用于生成对称密钥、非对称密钥、其他种子和证明值。每种不同的层级结构对应一个主种子,分别是EPS、PPS和SPS;最后介绍了层级结构证明(Hierarchy Proofs

下一篇我们介绍TPM句柄(TPM Handles,Part 1体系结构第15章)。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值