图略
认证一般涉及几个安全过程,这些过程共同构建一个值得信赖的生态系统。认证有很多协议,从私有系统到试图做到标准化的组织,如FIDO、TCG和Global Platforms。
PSA不试图定义或替换任何认证协议。相反,它提供了一个框架和最小的通用安全特性,为OEM和服务提供商提供了一种互操作和独立于硬件的方式,以便在PSA信任根上集成任何认证协议。
这是通过在PSA RoT级别引入初始认证令牌(IAT)和初始认证服务来实现的。
上图概述了一个通用的示例,目的是为了适用于几乎任何认证方案的典型角色和关系。认证的一般工作流程如下:
图略
基本认证模型支持对系统上已认证的端点和系统状态进行认证。
在PSA中,经过验证的端点是一个安全的分区,他是可知、可信的组件。
所有协议都可以从(包含相应数据的)挑战应答开始:角色A是验证实体。这些相应的数据会根据协议的具体情况出现,也可能就无此数据,例如验证实体的一些身份信息,或者随机数、公钥或初始DH参数。
经过验证的端点与自己的私有数据绑定:角色B,表明任何客户端侧的密钥交换信息(例如,公钥或初始DH参数),以及所选认证协议要求的任何其他数据。
认证端请求来自PSA可信根的初始认证,初始认证结构如下:
规则 |
描述 |
备注 |
系统必须在制造商处提供不可变的初始认证密钥。 |
|
|
初始认证密钥必须是非对称密钥。 |
允许生态系统中的任意实体进行验证。 |
RSA or ECC. |
系统必须在制造时用不可变的 实例ID,唯一地标识初始认证密钥。 |
作为PSA RoT实例的唯一安全标识符 |
初始密钥的公共部分的哈希值 |
系统必须提供一个不可变的实现ID,惟一地标识基于PSA不可变可信根的底层实现 |
必须能够验证从初始认证密钥到不可变PSA RoT的底层实现及其属性的全部环节 |
|
通过认证挑战,调用分区必须能对初始认证起到帮助 |
允许调用分区将附加元数据绑定到初始验证 |
用原数据的哈希绑定初始验证值 |
初始认证服务的对象记录必须至少包含以下来自主引导状态的安全信息:
|
|
验证实体可以使用引导种子来确保在同一个引导会话中生成多个报告。例如一个应用提供多个认证端点,或者用于扩展认证用例。 |
初始认证服务应产生初始认证令牌 (IAT)包括:
|
对于boot state、身份、调用分区会有特殊的认证协议参数(挑战认证值) |
|
图略
前面概述的基本认证模型可以扩展为允许在认证链中进行授权认证。这种模型在多阶段引导设备上更常见,在这些设备中每个阶段都验证自己的状态。
在两阶段引导方案中,上图展示了两级授权模式的主要区别。
绑定二级认证密钥到初始引导状态(角色C)和二级认证服务分区的分区ID(二级认证密钥的所有者)。这是一个密钥认证的例子。
二级认证服务可以生成认证报告而无需返回给PSA可信根。初始认证报告对整个启动会话都有效,因为安全状态只有在重置(复位)后才会更改,但是这些报告仍然受基于PSA可信根的初始认证的约束,同时PSA不可变可信根可以追溯其实现。
认证系统必须能够正确、可靠地确定被认证对象的状态和可信根的基础状态,即使在调试模式下也要满足。
PSA提供了两种通用机制来确保认证报告的新鲜性:
在挑战应答中包含一个随机数可以保证报告的新鲜性,这种方法在上面的基本认证示例中进行了说明。如果将这种方法应用与授权认证模型,必须在初始认证令牌和二次认证报告用提供同样新鲜性的随机数,用这样的方法可以防止初始认证令牌被读取(读取后也没有用了)。
使用这样的方法,如果设备在非安全生命周期状态下,二级认证服务就无法访问相同的二级认证密钥了。
如果将此方法用于授权认证,那么验证实体可以确定的是,如果它可以完成验证签名,那么这个验签操作一定是处于受保护的生命周期状态下由二级认证服务完成。由于此时设备受信,故二级认证服务可以读取初始认证令牌而不会降低其安全性。
根据认证协议的要求,每次生成二级认证报告时都可以包含一个具有新鲜性的随机数,但是无需包含在初始认证令牌中。
可信子系统事由设备提供的附加组件和安全特性,它由特定的认证配置文件约束,在本文中没有定义。
这些子系统的任何可更新组件必须在启动状态中测量并包含其中,且必须作为初始认证的一部分进行认证。
规则 |
描述 |
备注 |
任何经过验证和测量的可信子系统的boot ROM记录的引导状态都必须包含在初始认证中 |
与验证任何其他可更新组件的启动状态相同 |
|