ARM CCA机密计算安全模型之CCA认证
安全之安全(security²)博客目录导读
目录
1、基本的认证流程
2、令牌格式和签名方案
3、隐私保护认证
4、委托的Realm认证
5、本地认证
CCA认证允许依赖方(使用由Realm提供的服务的用户)确定Realm的可信度以及CCA平台实现的可信度。
依赖方可以是:
- 远程客户端——远程认证
- 本地客户端(在同一系统上)——本地认证
大多数CCA认证是按照远程认证的定义进行的。本地认证遵循相同的基本流程和步骤,但在验证方式和所能提供的安全保证方面有所不同。
成功认证的期望结果通常是在Realm中的认证端点和依赖方之间建立一个安全的点对点连接。一个Realm可以实现多个经过认证的端点。
认证协议可以是例如SSL风格的协商会话或Diffie-Hellman密钥协商。
认证协议不在CCA的范围内。CCA认证旨在使Realms能够实现任何认证协议。
CCA认证采用基于令牌的模型,将特定于认证端点的元数据绑定到Realm的认证启动状态,以及绑定到CCA平台底层实现的认证启动状态。
1、基本的认证流程
基本的 CCA 认证流程概述如上图所示。
Realm请求来自Realm管理安全域的Realm认证。该请求包含一个Realm挑战,例如协议元数据的哈希值。
Realm管理安全域负责维护每个Realm的启动状态。Realm启动状态定义了Realm的内容测量和安全配置,本文档中未定义。
[R0087] Realm启动状态与Realm挑战相结合,形成一个Realm认证令牌。这创建了服务特定元数据与Realm认证的加密绑定(哈希锁)。
然后,Realm管理安全域请求一个CCA平台认证。该请求包含一个RMM挑战。
[R0088] RMM挑战被计算为Realm认证令牌的哈希值。
在启用了CCA HES的CCA实现中,认证请求通过Monitor安全域传递给CCA HES。
CCA HES持有CCA HES主机自身、CCA系统安全域(包括所有受信子系统)以及CCA应用PE固件的启动状态。
[R0089] CCA平台启动状态与RMM令牌挑战相结合,形成CCA平台认证。
[R0090] CCA平台认证是CCA HES主机、CCA系统安全域中的每个受信子系统、不变的CCA系统安全域实现以及Monitor和Realm管理安全域分别的CCA应用PE固件的认证令牌的集合。
[R0129] 每个令牌都带有在启动过程中建立的一组测量值。
[R0091] CCA平台认证由CCA平台认证密钥(CPAK)签名(见CCA身份管理)。
这创建了Realm认证令牌与CCA平台认证的加密绑定(哈希锁)。
2、令牌格式和签名方案
[R0092] 所有认证令牌都是PSA认证令牌的实例。PSA认证令牌是一种基于IETF实体认证令牌(EAT)和远程认证程序(RATS)的标准紧凑格式。
[R0093] 远程认证需要使用非对称签名方案。有关算法和密钥大小的通用建议,请参见加密推荐。
3、隐私保护认证
隐私保护认证旨在防止跟踪或推断信息,例如:
- 使用Realm认证将Realm(或设备用户)链接到设备唯一标识符
- 使用Realm认证推断两个Realm实例位于同一物理设备上
[R0025] Arm建议最小的隐私保护措施是为具有相同安全属性的一组实现派生或配置一个IAK,而不是为每个实例配置唯一IAK。
其他更复杂的方案可能会被部署,例如一次性CPAK的配置或派生。这些方案是特定于生态系统的,超出了本文档的范围。
4、委托的Realm认证
委托认证不在当前版本的CCA范围内,仅在此处提及以便完整性。
上面描述的基本认证模型要求在每次Realm认证请求时,Realm都要与CCA HES进行完整的往返通信。
在具有高频率Realm认证请求的部署中,例如数据中心部署,基本模型可能无法扩展。
作为替代方案,Realm管理安全域可以在启动时派生一个或多个Realm认证密钥(RAK),并在启动时对RAK进行认证(密钥认证),将RAK公钥的哈希绑定到CCA平台认证。
这样,CCA平台认证可以在Realm管理安全域级别进行缓存。后续的Realm认证请求可以直接由Realm管理安全域签署,而不需要与CCA HES进行往返通信。
为了保持隐私保护属性,RAK的派生应遵循类似于CPAK派生的模式。见隐私保护认证。
5、本地认证
本地认证不在当前版本的CCA范围内,仅在此处提及以便完整性。
本地认证是支持离线用例的一个要素,在这种情况下,依赖方位于与认证端点相同的系统上,且依赖方可能无法访问远程验证服务。
一个示例模式如下:
- 一个交互式应用程序部署在Realm中
- 该应用程序使用第三方媒体处理IP,后者本身作为本地服务部署在另一个Realm中
- 当应用程序首次安装时,它会进行激活过程,包括应用程序Realm和提供第三方服务的Realm的远程认证
- 如果成功,应用程序会获得元数据,允许其在不与外部交互的情况下(离线使用)操作,只要其自身、第三方服务和CCA平台的认证状态不变
要完全支持这种用例,需要:
- 本地认证
- CCA派生的Realm绑定密钥,用于本地保护持久化Realm资产(本文档未定义)
CCA派生的绑定密钥可保证Realm只有在自身和CCA平台的实现处于可信状态时,才能访问持久数据。
本地认证本身提供了减少的认证保证。它证明了一对或一组Realm是在同一系统上启动并处于相同的安全状态——即它保证了激活过程中的原始配对或分组。但本地认证本身并不保证CCA平台的底层实现的可信度。
本地认证遵循与远程认证相同的基本流程,但具有以下扩展:
- 认证令牌使用只能在本地验证的本地认证密钥签名,例如在启动时派生的对称密钥
- 提供一个CCA服务来验证本地认证
本地认证通常使用对称签名,而非非对称签名。