前言
以下部分内容来自我对tpm2-tools API文档、《A Practical Guide to TPM 2.0》的翻译和理解
关于TPM2基本原理、特性、密钥、层次、PCR等内容,TPM-JS这个项目有较详细的说明:
TPM-JShttps://google.github.io/tpm-js/#pg_welcome想自学以及更深入了解的同学可以参考tpm2-tools doc :Home - tpm2-tools
TPM 的外部编程接口规范: https ://trustedcomputinggroup.org/tpm-library-specification/
TPM2.0实用指南 《A Practical Guide to TPM 2.0》:
https://link.springer.com/content/pdf/10.1007/978-1-4302-6584-9.pdf
增强授权(enhanced authorization, EA)
TPM 2.0规范有一个完全不同的概念,称为增强授权(enhanced authorization, EA)。它使用以下几种授权:
- 密码(明文):在TPM 1.2中没有这个。在某些环境中,例如BIOS在OS启动之前就控制了TPM,使用哈希消息验证码(HMAC)获得的额外安全性不值得额外的软件成本和使用HMAC授权来使用TPM服务的复杂性。
- HMAC密钥(如1.2):在某些情况下,特别是当与TPM对话的操作系统不受信任,但与TPM对话的软件是受信任的,使用HMAC进行授权所增加的成本和复杂性是值得保证的。例如,在远程系统上使用TPM。
- 签名(例如,通过智能卡):当IT员工需要对TPM进行维护时,智能卡是防止IT组织特权滥用的一种好方法。智能卡可以在员工离职时取回,但不像密码那样容易暴露。
- 带有额外数据的签名:例如,额外的数据可以是通过特定的指纹识别器识别的指纹数据。这是EA的一个特别有用的新功能。例如,一个生物识别阅读器可以报告一个特定的人匹配了他们的生物识别,或者一个GPS可以报告一个机器在一个特定的区域。这样TPM就不必匹配指纹或理解GPS坐标的含义。
- 在系统启动时作为系统状态代理的PCR值: 它的一个用途是防止在系统管理模块软件被破坏时释放全磁盘加密密钥。
- 作为特定命令来源的代理的Locality:到目前为止,它只用于表明命令是否来自CPU,以响应一个特殊的请求,就像Intel TXT和AMD在AMD-v中实现的那样。
- 时间:策略可以限制密钥的使用时间。这就像银行的时间锁,只允许保险库在营业时间打开。
- 内部计数器值:一个对象只能在内部计数器位于某些值之间时使用。这种方法对于设置只能使用一定次数的密钥非常有用。
- NV索引的值:只有当某些位设置为1或0时,才能使用一个密钥。这对于撤销对密钥的访问非常有用。
- NV索引:根据NV索引是否已写进行授权。
- 实体存在: 这种方法需要证明用户实际拥有平台。
上述提供了如何使用新策略授权模式的示例。此外,通过将这些形式的授权与逻辑AND或or操作相结合,可以创建更复杂的策略。例如:
- A用一个HMAC密钥和一张与公钥关联的智能卡来标识自己。
- B通过公钥识别的特定读取器用指纹认证来识别自己。
- 这把钥匙A或B都可以用。
可以创建简单或复杂的策略,TPM的所有对象或实体(包括TPM的层次结构)都可以拥有与之相关联的策略。EA极大地扩展了TPM的可能用途,特别是在管理授权方面;然而,最终的结果是减少了创建TPM所需的代码量,消除了用于委托的NVRAM。
健壮的策略设计实际上可以允许对您所能想到的密钥使用进行任何限制,尽管有些限制(例如限制一个文档只能使用一种文档处理程序)可能会非常困难,新的EA允许许多新的场景,包括以下:
- 资源多因素认证
- 资源多用户认证
- 仅使用n次资源
- 仅在一定时间内使用的资源
- 取消资源使用
- 限制不同人使用资源的方式