目录

  • 一、永久实体
    • 1.1 固定的组织架构
    • 1.2 临时的组织架构
    • 1.3 字典攻击复位
    • 1.4 平台配置寄存器(PCR)
    • 1.5 保留的handle
    • 1.6 口令授权会话
    • 1.7 平台NV使能
  • 二、非易失性实体
    • 2.1 NV索引
    • 2.2 其它
  • 四、易失性实体
  • 五、 对象
  • 六、 实体名称小结

参照

TPM-Rev-2.0-Part-1-Architecture-01.07-2014-03-13.pdf
第15章节 TPM Handles

一个TPM2.0资源实体是TPM内部可以通过handle直接引用的内容,由句柄引用,句柄唯一标识占用TPM内存的资源RAM或NV。句柄为32位值。它的最重要的字节标识引用的资源的类型。在任何给定的时刻,它的低阶24位标识了该类型的唯一资源。由低阶24位标识的实际资源可能会随时间变化。一个特定的句柄值一次只能引用一个tpm驻留资源。

这个概念包含了对象的概念,因为TPM规范使用对象来引用一个实体的子集。这看起来可能有些迷惑,所以这章节我们将分析一下这些实体的类型:
1、永久实体(组织架构,字典攻击锁定机制,和PCR)
2、与永久实体类似的非易失性实体(NVRAM索引)
3、易变的实体(各种各样的会话)
4、对象(秘钥和数据)

介绍完以上内容后,接下来将更加详细地分析每一种实体及其使用。

一、永久实体


一个永久实体的handle是由TPM规范定义好的,这些handle不能被创建和删除。在TPM1.2中,PCR和所有者是唯一的永久实体;根存储秘钥(SRK)属于固定的handle,但是它不是永久实体。在TPM2.0中,有更多的实体类型:三个固定的组织架构,一个临时组织架构,字典攻击锁定复位,保留handle,明文口令授权会话,和平台组织架构的NV使能。

1.1 固定的组织架构

TPM2.0有三个固定的组织架构(平台,存储,背书),每一个架构都通过固定的handle来访。

TPM_RH_PLATFORM(0x4000000C)
TPM_RH_OWNER(0x40000001)
TPM_RH_ENDORSEMENT(0x4000000B)

访问它们需要被授权,它们每一个都有一个授权和policy,经过各自管理员的授权以后就可改变相应的组织架构(管理员被定义为知道相应组织架构)。组织架构的授权值和policy可以改变,但是不论我们引用一个组织架构,都是指的同一个TPM资源实体。固定的组织架构永远不能被删除,但是它们可以被自己的管理员或者平台管理员关闭。这三种组织架构可以包含相关的密钥钥链和数据,清除组织架构就能清除其中的密钥和数据。

固定的组织架构是TPM的永久性资源实体。它们不能被创建或者删除。

另外和上述组织架构类似的的永久实体是临时组织架构和字典攻击锁定复位机制。

1.2 临时的组织架构

TPM2.0有一个叫做NULL的临时组织架构,它通过一个固定的handle来引用。
TPM_RH_NULL(0x40000007)
TPM被用作密码协处理器时会用到这个组织架构。他的授权值和policy都是空的

与前面的固定组织架构类似,这个临时的组织架构本身是永久存在的。它不能被删除,但是和固定组织架构不同的是,它在TPM的每个上电周期里会自动清除。

1.3 字典攻击复位

字典攻击锁定机制有一个固定的handle。
TPM_RH_LOCKOUT(0x4000000A)
它同样有一个授权和policy。和之前介绍的三个固定组织架构一样,这个授权可以被相应的管理员修改。不同的是,它是一个不包含密钥和对象的组织架构。当字典攻击触发锁定时,这个机制用于复位。它还可以用于清除TPM_RM_OWNER组织架构。通常情况下它充当TPM存储组织架构的IT管理员。

示例:失败次数复位TPM被配置成输入口令失败5次之后将锁定这个用户24小时。
锁定期间所有受到字典攻击保护的资源都不能被授权。
用户需要说服IT管理员相信这个锁定不是因为攻击,仅仅是因为密码输入错误。
管理可以使用锁定授权复位失败计数器,这样一来用户就不需要等待24小时。

1.4 平台配置寄存器(PCR)

TPM拥有一些使用索引来访问的PCR。根据平台相关规范的定义,PCR可以使用一种或者多种算法。它们同样也有授权值和policy,这个规范来选择(通常是NULL),授权值和policy可以用于通过PCR扩展(extend)来改变PCR的值。读取PCR的值不需要任何授权。 PC客户端平台规定至少要有24个PCR。只有一个PCR bank是强制的,bank可以在系统启动时被配置为使用SHA-1或者SHA-256算法。
为了减少混淆,给PCR分配的句柄与规范以前版本的值相同。PCR柄是PCR数组的索引。PCR的指数和句柄值是相同的。

因为PCR是一种永久实体,所以没有创建或者删除PCR的命令;你只能修改它的属性或者值。

1.5 保留的handle

如果平台相关的规范想要使用handle时,设备厂商可以在TPM中保留handle。这些handle的设计意图是当TPM内部的固件面临严重的安全问题时,TPM可以验证固件的哈希值。目前暂未发现此类保留的handle。

1.6 口令授权会话

TPM有一个会话也是永久性的,它就是口令授权会话的handle。

TPM_RS_PW(0x40000009)

用户可以使用这个handle来做明文口令授权。

1.7 平台NV使能

handle控制着平台组织架构的NV使能

TPM_RH_PLATFORM_NV(0x4000000D)

当清除使能位后,所有平台组织架构下NV索引的访问都将被拒绝。

需要说明的是,NV索引可以隶属于平台组织架构或者存储组织架构。存储组织架构本身控制着其NV索引的使能,但是平台组织架构并不控制平台的NV索引使能。所以平台NV的使能就是一个隔离控制的案例。这样就实现了平台组织架构下的密钥等资源与平台NV索引的独立控制。

应用案例:存储启动参数平台的固件可以很方便地使用TPM作为存储启动参数的NV空间。
即使是在TPM平台组织架构关闭的情况下,这个空间也必须保持可读。
这样一来,独立控制就显现它的作用了。

二、非易失性实体


接下来我们来了解一些和永久实体类似的实体:NV索引。它们是非易失性的。

2.1 NV索引

一个NVRAM索引就是一个非易失性TPM实体。TPM内部有一定的非易失性存储空间供用户配置用于数据存储。当配置完成后,这个空间就具备一个索引和一组属性,索引和属性是用户可以选择的。

因为NVRAM索引具有更多的属性,TPM规范没有把它视为一种对象。读写NVRAM可以被单独控制。它们可以被配置成看起来像PCR,计数器或者位域。同时也可以配置成只能写一次的实体。

NVRAM索引同时具有授权值和授权policy。NV索引的拥有者可以改变授权值,但是不能改变授权policy,授权policy一旦被创建就不能再修改。如果NVRAM与平台相关,那么当平台组织架构被清除时相关的NVRAM索引也将被删除。

对象和NVRAM类似,他们都属于某一个组织架构,都自己的数据和授权机制,但是对象的属性相对较少。

NV Index与由TPM2 NV DefineSpace()创建的持久TPM资源相关联。

2.2 其它

一个持续性的实体就是一个组织架构的所有者要求TPM在上电周期之间保留在TPM中的对象。它与永久实体的不同是相关组织架构的拥有者可以清除持续性实体。因为TPM的持续性内存空间有限,所以我们应该节约使用持续性实体。下面是一些很有用的应用案例。

应用案例:VPN密钥访问在系统启动的早期阶段访问VPN时需要一个签名密钥。
然而这个时候硬盘并不可用。
如果应用将密钥保存在TPM的持续性存储空间内,
系统在早期启动阶段可以立即使用密钥做密码学操作。
应用案例:主密钥优化一个主存储密钥通常作为一个密钥架构的根节点。
密钥生成是密码运算中最为耗时的操作。
当创建一个密钥之后把它存储到TPM的持续性空间中,
这样就可以避免每次启动都重新生成密钥。
应用案例:身份密钥的初始配置主板制造企业通常会为TPM配置一个受限制的签名密钥。
这个密钥用于标识这个平台的身份。
如果主板损坏,然后TPM被替换到其他主板上,
那么密钥将不能被加载使用(这里认为默认情况下密钥存储在与主板连接的磁盘上?)。
同时,一个企业的IT部门也希望给备用主板配置新的签名密钥。
但是因为一个单纯的主板并没有硬盘,所以也没有办法存储密钥。
这时IT部门可以将生成的密钥存储在TPM的持续性空间里,
这要以来即使主板损坏了,TPM持续性空间存储的密钥仍然可以在替换的主板上使用。

通常情况下,主存储密钥比如SRK,受限的主签名密钥比如身份认证密钥AIK,以及背书密钥是TPM中仅有的可持续性实体。

固定资源句柄引用总是与相同句柄相关联的屏蔽位置。这些资源的例子有所有者、平台和背书层次结构控制。

四、易失性实体


一个不持续实体—易失性实体会在TPM一个上电周期内清除。尽管可以通过TPM2_ContextSave来保存一个持续实体,但是TPM的密码学机制不允许重新上电之后加载之前保存的内容,这样就保证了它不断变化的特点。这种易失性实体或者说不持续的实体同样也被分门别类。

用于授权的会话或许是最为广泛应用的一种,比如HMAC和policy会话,它们用于TPM实体的授权,命令和命令响应参数加密,和命令审计。

哈希和HMAC事件序列实体用于保存密码库函数的中间结果,因为通常情况下密码学软件库都具有“start,update,complete”的设计模式。这种模式允许对比TPM命令缓冲区大的数据块儿做哈希或者HMAC。

与易失性实体(不持续实体)相对应的是非易失(持续性实体),持续性实体会在TPM的上电周期之间保存。

当启动授权会话时,TPM分配会话句柄(TPM2 StartAuthSession())。一个HMAC会话被分配一个XX句柄,一个策略会话被分配一个XX的句柄。每个授权会话句柄都与一个惟一的上下文相关联,该上下文可能一次只存在于一个地方:在一个屏蔽位置的TPM上,或者作为ProtectedObject保存在一个上下文中。句柄与会话保持关联,只要会话存在,当会话被上下文保存和重新加载时不会改变。

TPM2的EvictControl()可以把一个暂时对象变成一个持久对象。放置在TPM NV内存中的持久对象不会被TPM2启动()清除。使对象持久需要平台授权或所有者授权。当TPM将瞬态对象更改为持久对象时,调用者指示分配给持久对象的句柄。

五、 对象


一个TPM对象可能是密钥或者其他数据。它有一个公共的部分,并且“可能”有一个私密的部分,比如一个非对称密钥对儿的私钥,一个对称密钥,或者是加密的数据。所有的对象都隶属于一个组织架构。TPM对象也都有相关的授权数据和授权policy。与NV索引相同的一点是,一个对象的policy一旦被创建后就不能再修改。

当TPM对象应用于命令时,命令被分为管理和用户两类。在创建TPM对象时,用户可以决定在使用这个对象的命令中,哪一些命令可以通过授权数据来使用,哪一些只能使用policy。但是需要特别提醒的是:对于有些命令来说,不管密钥创建的时候配置什么样的属性,它们都只能通过policy来授权执行。

跟NVRAM索引相似,所有的TPM对象都隶属于以下四中组织架构中的一种:平台,存储,背书,或者NULL。当一个组织架构被清除时,它所有的对象也都将被删除。

通常来说,大部分的TPM对象都是密钥。使用密钥和其他TPM对象时还要求有一个TPM非固定实体:会话。

当加载对象或对象的持久性改变时,TPM分配对象句柄(TPM2 EvictControl())。每次使用对象时,可能会有不同的值。这是因为当对象被换回时,对象的上下文可能已经被换出,TPM分配了一个新的句柄。TheTRM确保句柄引用正确的对象。在任何TPM2 Startup()上,从TPM内存中刷新所有瞬态对象。加载的瞬态对象上下文可能会从TPM内存中刷新。

六、 实体名称小结

实体的名称是TPM2.0的一个新概念,它主要用于解决TPM1.2规范中出现的问题。极端严苛的安全分析表明,攻击者有可能在数据被传送到TPM的过程中截获这些数据。TPM的设计可以阻止通过这种攻击篡改大部分的数据。但是因为TPM的存储资源有限,所以它允许一个密钥管理器在必要的时候将密钥加载到TPM或者由TPM导出。当密钥被加载到TPM之后,密钥就通过handle来访问,这个handle就是密钥所加载到的内存的速记符。因为应用软件可能不知道密钥管理器为了腾出额外空间将密钥的位置改变,所以密钥的handle也就没有防止修改的保护机制,并且恶意软件可以修改发送到TPM的数据来非法访问一个正确的handle位置(回想一下,前面有介绍,为了让RM能虚拟化handle,handle本身是不在认证范围内的,也就是说不在计算HMAC和Policy范围内)。

通常情况下,上面描述的问题并不严重。但是如果用户将两个以上的密钥设置相同的口令,那么有可能通过修改handle来非法授权另外一个具有相同口令的密钥。你有可能会说,这个貌似不太可能吧。但是TPM规范的制定者也倾向于是幻想狂,他们认为这个是有可能的。为了不仅仅是提醒所有人不要对不同的密钥设置相同的口令,他们决定给每一个TPM实体一个唯一的名字,当使用这个实体的命令做HMAC授权计算时,实体的名称会用于HMAC计算。这样一来,即使handle会变化也没有问题,因为实体的名称不会变。

在一次HMAC授权中,TPM命令参数会被做哈希,然后还会在计算中隐示地加上handle相关的实体名称,即使命令参数中不包含实体的名称也是如此。如此,攻击只能修改实体的handle,但是不能修改相关的名称,因为修改成另一个密钥的名称会导致HMAC授权失败。

名称是一个TPM实体唯一的身份标示。对于永久性的实体来说(如PCR和组织架构的handle),因为他们的handle永远不会变,所以handle就是它们的名称。对于其他的实体(如NV索引和加载的对象)来说,它们的名称实际上是他们各自的公开数据的哈希值。TPM设备本身和API调用者在授权时会独立地计算实体的名称。

基于安全的考虑,在创建一个实体时就计算它的名称并合理存储是非常重要的。一种非常幼稚的实现是提供一个由handle产生名称的函数,这个函数用handle作为输入,然后通过handle引用相关实体的公开数据并计算名称。这种做法将完全破坏使用名称来做HMAC运算的初衷。因为handle有可能被篡改,这样一来计算出的名称就有可能不是授权者预期的名称。

以下将介绍一些名称的使用案例。

应用案例:攻击者清除NV索引的位域如果一个密钥的所有者在密钥的policy中使用了NV索引的位域,
当比特3置1之后将撤销某一个密钥用户的使用权。
撤销使用权的用户或者攻击者可以删除NV索引并使用相同的policy重新创建它。
当密钥所有者想设置比特5时,他会使用由handle产生名称的函数计算名称。
密钥所有者使用这个结果来授权并设置比特5。
但是这时候NV索引的比特3是清除状态,
因为TPM在创建位域时会将所有的比特初始化位零。
如果密钥的所有者合理地存储了密钥的名称并将这个存储的名称用于授权,
那么上述的过程中授权将会失败。
授权失败的原因是,当攻击者重新创建NV索引时,
属于公共部分的比特3将会被清除(问题:攻击者不能设置这个比特吗?),
进而也就修改了密钥的名称,这与事先存储的值不同。

NV索引的名称就是索引公共区域的摘要值。一个攻击者可以删除并重新创建索引。但是除非公共区域(索引值,属性,policy)相同,否则索引的名称将会改变。

示例:攻击者读取秘密信息用户可能定义一个普通的索引用于存储秘密信息。
索引的policy保证只有用户自己可以读取秘密信息。
然而在写入秘密信息之前,攻击者可能删除并使用不同的policy重新创建这个索引,
这个policy允许攻击者可以读取索引位置的秘密信息。
攻击者最终会因为索引名称改变而授权失败。
当用户试图去向新创建的索引位置写入秘密信息时也会授权失败,
因为“事先计算好的名称”将会用于写入命令的参数哈希值计算。

暂时性和持续性实体的名称同样也是由其公共区域的摘要计算而来。实体的公共区域因类型不同而不同。

应用案例:资源管理器安全的管理TPM密钥当用户加载一个密钥时会收到TPM返回的handle。
用户申请这个密钥的授权时会计算命令参数的HMAC值,
HMAC值会隐示地包含密钥的名称(前文已经说过)。
资源管理器可能在用户不知情的情况下将密钥导出,
然后又重新加载到TPM中。需要知道的是,密钥重新加载到TPM后handle就会发生变化。
资源管理器会将用户的handle替换成新的handle。
这时授权仍然能够成功的原因是授权计算时并没有包含handle,而是名称。
应用案例:攻击者使用相同的handle替换密钥用户重新加载一个密钥后会收到一个handle。
尽管攻击者可能通过使用相同的handle来替换用户的密钥,
但是因为密钥的授权需要正确的名称,
显然攻击者的密钥计算出的名称和原始的密钥不相同,
所以攻击会因为HMAC授权不通过而失败。

TPM分析笔记(九)TPM资源实体-句柄相关推荐

  1. TPM分析笔记(十)TPM 组织架构(TPM hierarchy)

    目录 一.TPM组织架构 1.1 三种持续性组织架构 1.1.1 平台hierarchy 1.1.2 存储hierarchy 1.1.3 背书hierarchy 1.2 非持久性组织架构 1.2.1 ...

  2. TPM分析笔记(十一)TPM 密钥组织架构(TPM Key Hierarchy)

    目录 一.Key hierarchies 1.1 EK密钥 1.2 SRK 1.3 Attesting keys 二.密钥作用介绍 接上文TPM分析笔记(十)TPM 组织架构(TPM hierarch ...

  3. Clamav杀毒软件源码分析笔记 九

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Clam ...

  4. Clamav杀毒软件源码分析笔记[九]

    Clamav杀毒软件源码分析笔记[九] 刺猬@http://blog.csdn.net/littlehedgehog [数据流病毒扫描] 数据流病毒扫描,听上去貌似很牛逼的称呼,其实就是一个传送数据流 ...

  5. TPM分析笔记(七)TPM 模块中的密码算法家族。

    目录 密码攻击 暴力破解 根据类型来计算算法强度 针对算法本身的攻击 安全的定义 密码家族 哈希(摘要) 哈希扩展(HashExtend) 基于哈希的消息认证码(HashedMessageAuthen ...

  6. TPM分析笔记(四)TPM-TSS协议栈

    目录 TPM-TSS文档下载路径 开源软件工程 TPM-TSS 协议栈 TSS2.0软件栈结构 SAPI 软件栈结构 TPM TSS SAPI关键API分析(持续完善中) 命令上下文申请函数 命令执行 ...

  7. TPM分析笔记(一) TPM历史

    目录 TPM的历史 为什么选择用TPM? TPM 1.1b到1.2的发展历史 TPM由1.2发展到2.0版本 TPM2.0规范的开发历程 发展历程小结 TPM标准 TPM常见用途 TPM的规范其描述文 ...

  8. TPM分析笔记(十二)TPM PCR操作

    目录 一.PCR初始化(Initializing PCR) 二.PCR的扩展(Extend of a PCR) 2.1 其他PCR命令 三.使用PCR Banks进行扩展(Using Extend w ...

  9. TPM分析笔记(三)TPM Architecture规范之Trusted Platforms(第9章)

    目录 一.可信 1.可信计算基础思想 二.可信计算概念 1.信任根&信任边界 2.传递信任(Transitive Trust)& 信托机构(Trust Authority) 1.信托机 ...

最新文章

  1. 人工智能功能级别与框架|《远望译品》
  2. 开发日记-20190822 关键词 读书笔记《Unix环境高级编程(第二版)》《掌控习惯》DAY 2
  3. 牛客网_PAT乙级_1020完美数列(25)【vector sort 最后一个测试用例超时】
  4. 减少联调、高效集成,试试这个工具
  5. (大数据工程师学习路径)第二步 Vim编辑器----Vim文档编辑
  6. webpack插件实现自动抽取css中的主题色样式,并动态切换主题色(element-ui)
  7. [ANE for Android]Java接口部分引用第三方JAR的解决办法
  8. Mac 安装 CentOS镜像 及 VMware虚拟机
  9. 造数神器mocker带你10分钟完成千万级别数据量的造数能力-高级用法篇
  10. P1801 黑匣子 题解
  11. 基于CST电磁仿真软件的7-10GHz的微带带通滤波器的设计
  12. [Android系统]android7.1 修改系统默认输入法
  13. 小程序成为多社交平台引流利器
  14. [FFmpeg]编译av1的dav1d解码库
  15. Python实战之提取豆瓣华语新碟榜数据
  16. 双指针法总结之倚天屠龙
  17. Python for Data Analysis:Numpy
  18. kindle取消注册与注册教程
  19. 金蝶K3服务器一键配置精灵
  20. 如何把图片扫描成word文档?

热门文章

  1. GRANT ALL PRIVILEGES
  2. 数组every方法使用
  3. 使用Fiddler抓取微信小程序二维码请求地址
  4. java阶段七容器集合之Map------练习2
  5. 羊吃草-区间端点问题
  6. NS2 队列管理机制
  7. 计算机安全面临的常见问题分析
  8. bing搜索分析网站的方法
  9. 两个向量组线性相关是不是也能说成两个向量组等价 向量组等价 线性相关 向量组等价和矩阵等价的区别
  10. 【转摘】在Word中使用SmartArt绘制组织结构图