PSA架构之安全模型1.0(DEN0079)之6:初始认证(Initial attestation)

  1. 初始认证(Initial attestation)
    1. 通用介绍(介绍性)

图略

认证一般涉及几个安全过程,这些过程共同构建一个值得信赖的生态系统。认证有很多协议,从私有系统到试图做到标准化的组织,如FIDO、TCG和Global Platforms。

PSA不试图定义或替换任何认证协议。相反,它提供了一个框架和最小的通用安全特性,为OEM和服务提供商提供了一种互操作和独立于硬件的方式,以便在PSA信任根上集成任何认证协议。

这是通过在PSA RoT级别引入初始认证令牌(IAT)和初始认证服务来实现的。

上图概述了一个通用的示例,目的是为了适用于几乎任何认证方案的典型角色和关系。认证的一般工作流程如下:

  1. 在制造过程中,设备由PSA不可变硬件根参数提供信任的根,包括唯一的初始认证密钥(IAK)、实例ID(instance ID)和实现ID(implementation ID):
  1. IAK必须对于PSA信任根的实现实例是唯一的
  2. 实例ID惟一地标识IAK
  3. 实现ID唯一地标识了PSA 不可变RoT
  1. 生产报告必须到位,以跟踪签发和生产的身份,以及相关硬件的状态
  1. 实现验证一方必须能够跟踪和验证制造者的身份及其相关的安全属性,例如认证状态
  1. PSA可信根服务根提供了一个通用的初始认证服务。初始认证服务产生初始认证令牌(IAT),允许一个经过认证的端点将任何认证协议绑定到:
  1. 基于PSA RoT的boot state(启动状态值)
  2. 基于PSA RoT的安全状态值
  3. 调用分区(需要是已验证的端点)
  4. 协议的基本特性——通过认证端点提供的一个身份验证挑战
  1. 被认证的端点应该可以实现任何针对应用程序的认证协议,一个被认证的端点描绘了认证协议所需的所有应用程序逻辑。它可以是,例如:
  1. 用于设备认证和认证协议的设备端点
  2. 应用程序级密钥认证服务,例如,用户凭证或别名身份密钥
  3. 匿名化服务的端点,例如直接匿名认证(DAA)
  1. 验证实体可取得初始认证报告同时支持如下内容:
  1. 验证PSA可信根的实现、其制造状态(例如生产设备或开发设备)及其认证状态
  2. 验证设备上当前加载的可更新组件
  3. 验证正在验证的特定设备实例上的PSA可信根的安全状态
    1. 基本认证(强制要求)

图略

基本认证模型支持对系统上已认证的端点和系统状态进行认证。

在PSA中,经过验证的端点是一个安全的分区,他是可知、可信的组件。

所有协议都可以从(包含相应数据的)挑战应答开始:角色A是验证实体。这些相应的数据会根据协议的具体情况出现,也可能就无此数据,例如验证实体的一些身份信息,或者随机数、公钥或初始DH参数。

经过验证的端点与自己的私有数据绑定:角色B,表明任何客户端侧的密钥交换信息(例如,公钥或初始DH参数),以及所选认证协议要求的任何其他数据。

认证端请求来自PSA可信根的初始认证,初始认证结构如下:

  1. 认证端来验证挑战,计算方式是角色A和角色B的哈希。哈希必须至少包括验证实体所有的原数据,作为协议的一部分
  2. 初始认证服务要和角色C(自己)的原数据关联起来:
  1. 被测量的boot state
  2. 基于PSA可信根的当前安全生命周期管理的状态值
  3. 调用的分区和分区ID
  1. 初始认证服务将计算自己(角色C)和挑战验证值的哈希
  2. 然后使用初始认证密钥对这个摘要进行签名,只有PSA RoT才能访问它
  3. 初始认证令牌(IAT)现在可以构建出来:角色C,挑战验证值,和签名
  4. 通过组合初始认证令牌和角色B,进行挑战应答,可以完成一个端点认证
  5. 验证实体可以使用报告验证PSA信任根及其实现的可信度,验证角色B的真实性以及最初发起挑战的角色A的环境
  6. 现在可以基于角色A和角色B的挑战值,使用所选认证协议的适当会话密钥协商机制,来建立到已认证端点的安全连接(例如,SSL或TLS连接,或完成DH交换)

规则

描述

备注

系统必须在制造商处提供不可变的初始认证密钥。

 

 

初始认证密钥必须是非对称密钥。

允许生态系统中的任意实体进行验证。

RSA or ECC.

系统必须在制造时用不可变的

实例ID,唯一地标识初始认证密钥。

作为PSA RoT实例的唯一安全标识符

初始密钥的公共部分的哈希值

系统必须提供一个不可变的实现ID,惟一地标识基于PSA不可变可信根的底层实现

必须能够验证从初始认证密钥到不可变PSA RoT的底层实现及其属性的全部环节

 

通过认证挑战,调用分区必须能对初始认证起到帮助

允许调用分区将附加元数据绑定到初始验证

用原数据的哈希绑定初始验证值

初始认证服务的对象记录必须至少包含以下来自主引导状态的安全信息:

  1. 启动时加载的每个可更新组件的启动状态
  2. 系统当前的安全生命周期状态
  3. 启动种子
  4. 系统的实例ID
  5. 系统的实现ID

 

验证实体可以使用引导种子来确保在同一个引导会话中生成多个报告。例如一个应用提供多个认证端点,或者用于扩展认证用例。

初始认证服务应产生初始认证令牌

(IAT)包括:

  1. 角色C
  2. 挑战认证
  3. 调用分区ID
  4. 使用初始认证密钥的签名

对于boot state、身份、调用分区会有特殊的认证协议参数(挑战认证值)

 

 

    1. 授权认证(可选)

图略

前面概述的基本认证模型可以扩展为允许在认证链中进行授权认证。这种模型在多阶段引导设备上更常见,在这些设备中每个阶段都验证自己的状态。

在两阶段引导方案中,上图展示了两级授权模式的主要区别。

  1. Boot ROM验证和测量基于PSA可信根和应用可信根(SPE)的boot state,同时记录初始认证的结果(角色C),包括当前的boot seed。
  2. 应用程序可信根的二级引导阶段,验证和度量应用程序,同时记录二级认证的结果(角色D),包括当前的boot seed。
  3. 二级认证服务,在引导时生成自己的二级认证密钥(随机),并将其绑定到初始的认证令牌上。

绑定二级认证密钥到初始引导状态(角色C)和二级认证服务分区的分区ID(二级认证密钥的所有者)。这是一个密钥认证的例子。

  1. 认证端点现在从二级认证服务请求认证:
  1. 二级认证服务生成一个二级认证报告,覆盖二级启动状态(角色D)
  2. 二级报告由二级认证密钥签名
  3. 二级认证服务返回初始认证令牌(二级认证密钥的认证密钥)和二级认证报告(由二级密钥认证密钥签名)
  1. 验证实体可以:
  1. 验证两个报告中的boot seed是否是匹配的(他们都是在相同的引导会话中生成的)
  2. 使用初始认证令牌验证软件可信根和软件的实现
  3. 使用初始认证令牌验证二级认证密钥
  4. 使用二级认证密钥验证二级报告和角色A和B
  5. 使用二次认证报告对应用软件进行验证
  6. 基于角色A和B执行认证协议

二级认证服务可以生成认证报告而无需返回给PSA可信根。初始认证报告对整个启动会话都有效,因为安全状态只有在重置(复位)后才会更改,但是这些报告仍然受基于PSA可信根的初始认证的约束,同时PSA不可变可信根可以追溯其实现。

    1. 关于认证和新鲜性的说明(介绍性)

认证系统必须能够正确、可靠地确定被认证对象的状态和可信根的基础状态,即使在调试模式下也要满足。

PSA提供了两种通用机制来确保认证报告的新鲜性:

  1. 在所有认证报告中包含来自验证实体的一次性或者其他新鲜性数据

在挑战应答中包含一个随机数可以保证报告的新鲜性,这种方法在上面的基本认证示例中进行了说明。如果将这种方法应用与授权认证模型,必须在初始认证令牌和二次认证报告用提供同样新鲜性的随机数,用这样的方法可以防止初始认证令牌被读取(读取后也没有用了)。

  1. 在授权认证的情况下,从一个安全的根密钥中衍生出二级认证密钥

使用这样的方法,如果设备在非安全生命周期状态下,二级认证服务就无法访问相同的二级认证密钥了。

如果将此方法用于授权认证,那么验证实体可以确定的是,如果它可以完成验证签名,那么这个验签操作一定是处于受保护的生命周期状态下由二级认证服务完成。由于此时设备受信,故二级认证服务可以读取初始认证令牌而不会降低其安全性。

 

根据认证协议的要求,每次生成二级认证报告时都可以包含一个具有新鲜性的随机数,但是无需包含在初始认证令牌中。

    1. 认证可信子系统(Attested trusted subsystems)(强制要求)

可信子系统事由设备提供的附加组件和安全特性,它由特定的认证配置文件约束,在本文中没有定义。

这些子系统的任何可更新组件必须在启动状态中测量并包含其中,且必须作为初始认证的一部分进行认证。

规则

描述

备注

任何经过验证和测量的可信子系统的boot ROM记录的引导状态都必须包含在初始认证中

与验证任何其他可更新组件的启动状态相同

 

你可能感兴趣的:(密码与安全,PSA)