安全之安全(security²)博客目录导读
目录
一、固件启用的调试
二、CCA系统安全生命周期
三、重新供应
四、可信子系统与CCA HES
启用 CCA(机密计算架构)的安全系统是指 CCA 平台的实现处于可信状态。
由于多种原因,CCA 启用系统可能处于不安全状态,例如:
- 在制造组装、测试和配置过程中
- 在供应链配置过程中
- 在调试、诊断和维修阶段
Secure world(安全世界)和Normal world(正常世界)的安全生命周期不属于 CCA 及本文件的范围。
预期 Normal world 或 Secure world 的调试和诊断可启用,而不影响 CCA 的安全保障。
一、固件启用的调试
CCA 固件是指可能影响 CCA 安全保障的所有固件,包括应用 PE 固件和受信子系统固件。
[R0103] CCA 固件的可信性始终可证明。
在安全系统上,CCA 仅会在启动时加载授权的 CCA 固件。
CCA 固件的功能,包括可能会妥协 CCA 安全保障的功能,总是反映在签署的固件身份元数据中,捕获在启动状态中,并包含在 CCA 平台证明中。
[R0104] 可能危及 CCA 安全保障的功能包括可能泄露 CCA 资产或影响 CCA 固件或 Realm(领域)执行流的任何功能。
例如,可能危及 CCA 安全保障的功能包括调试功能,如自托管调试和远程调试,或暴露诊断。
仅对 CCA 固件的功能进行证明,而不会证明这些功能在运行时是否被实际使用。
例如,支持调试功能的 CCA 固件可能会实施额外的授权步骤,如访问远程调试或揭示诊断的额外授权流程。但是证明的属性是这些功能的存在,而不是它们是否被实际使用。
[R0105] 依赖方始终能够通过 CCA 平台证明中的启动状态确定 CCA 固件的全部功能。
依赖方可以通过直接验证 CCA 固件测量值实现这一点。或者,它也可以通过验证签署的 CCA 固件身份元数据和受信固件签署者实现。
当前 CCA 版本不支持 CCA 派生的 Realm 密钥,也不支持 CCA 固件用于 CCA HES 以外的 CCA 密钥派生功能。
此类密钥派生功能可能会在未来版本中添加。届时,必须制定额外的规则,以确保调试启用的 CCA 固件无法派生与安全 CCA 固件相同的密钥。此类规则可能会要求在固件身份元数据中的签署者 ID 和安全版本控制,用于 CCA 密钥派生。
二、CCA系统安全生命周期
CCA 系统安全域将经历如图 10 所示的安全生命周期。
实际实现可能在供应过程中有额外的子状态,以支持更复杂的供应链和部署模型。
CCA 不限制或约束实际的供应过程,除了最终结果应具有此处描述的可证明属性。
为定义 CCA 启用系统的可证明属性,本文件使用了较为简单的模型。
生命周期从 CCA 启用系统的制造和测试开始。在此阶段,系统没有证明身份,系统的任何安全功能可能被禁用或绕过。
下一步是配置 CCA 硬件配置参数。
[R0106] 在安全配置之前,系统会进行安全锁定,确保只能运行授权的 CCA 固件,且外部诊断和调试接口已禁用或锁定,以免暴露 CCA 硬件配置参数。
例如,在启用 CCA HES 的系统上,可能只需禁用 CCA HES 主机调试即可保护 CCA 硬件配置参数。建议锁定整个系统,并可能需要保护非 CCA 的安全功能。
一旦供应完成,生命周期将进入安全状态,系统可以与实施验证者注册,以便依赖方验证部署在系统上的Realms(领域)。
[R0107] 只有当系统已完成所有CCA硬件参数的供应锁定时,供应过程才算完成。硬件参数被成功提供后,其值将不可更改。
不可更改意味着CCA硬件参数在整个CCA安全生命周期内不会改变。一些实现可能支持硬件恢复机制,例如允许系统在维修中心进行重新供应后获得新身份。在CCA平台安全生命周期中,这等同于退役先前身份并重新启动新身份的安全供应状态。
系统原则上可以在CCA安全供应状态下进行验证,只要它能够派生出有效的CPAK(平台认证密钥)。但是,这种状态下的系统不应被信任,因为它可能尚未完全供应或锁定。因此,系统只有在进入安全状态后才能与验证者注册。
从安全状态,系统可以进入启用可能破坏CCA安全保证的调试或诊断状态。这可以通过加载支持调试的CCA固件或启用外部调试或诊断接口来实现。
为了系统保持可验证,其验证状态在运行时不能改变。
[R0108] 在安全系统上,只有在系统重启后、初始启动代码完成之前,才能启用CCA固件启用的调试或外部调试功能。
[R0109] 在安全系统上,只有CCA HES可以启用外部调试或诊断接口。
[R0110] 只有经过明确授权,外部调试或诊断接口才能启用。
[R0111] 授权只能由可信源发出,并由CCA HES验证。
CCA未规定特定的硬件级调试授权协议,但任何此类协议应至少与CCA验证启动的加密安全性相当。
调试状态可以是可恢复的,也可以是不可恢复的。
[R0112] 系统只能在重启后恢复到安全状态。
[R0113] CCA HES确保所有调试接口在恢复到安全状态之前已关闭,并且只能加载授权的CCA固件。
[R0114] 领域管理调试状态代表影响领域世界的外部或CCA固件调试功能。它既可验证也可恢复。
[R0115] 根调试状态代表影响监控器安全域和CCA系统安全域的外部或CCA固件调试功能。在支持CCA HES的CCA系统上,这种状态既可验证也可恢复。
[R0116] 退役状态代表影响CCA HES的外部或CCA固件调试功能。
[R0117] Arm建议在CCA安全系统上永久禁用所有影响CCA HES的调试功能。
[R0118] 在进入退役状态之前,至少应将CCA硬件参数永久置于无法使用的状态。
退役状态不可验证且不可逆。
[R0124] 对于退役系统,CCA验证身份必须撤销,无法恢复或重复使用。
当前版本的CCA不支持派生的Realm密钥,也不支持CCA固件在CCA HES外部的密钥派生。这些功能可能会在未来版本中添加,届时将引入额外的规则,确保在调试状态下派生的密钥与安全状态下的密钥不同。例如,可以通过在CCA密钥派生中包含CCA平台安全生命周期状态来实现。
三、重新供应
严格来说,CCA系统安全生命周期定义了不可变的CCA系统安全域属性的生命周期。这包括不可变的初始启动代码、安全供应的硬件参数,以及CCA系统安全域不可变的硬件元素的安全属性。
不可变的CCA系统安全域属性构成了CCA启用系统最根本的信任根。
[R0138] 不可变的属性通过CCA平台验证密钥和身份间接验证。这意味着这些属性以及相关的CCA平台验证密钥必须在CCA系统安全生命周期的任何可验证状态下保持不变。
进入任何不可验证状态可能会撤销或使不可变的安全声明无效,并且验证者无法确定CCA平台的可信度。
[R0139] 不可变的CCA系统安全域属性只能在供应状态下或在特定的实现恢复过程中(如退役后)被修改。对不可变属性的任何更改都构成重新供应事件,因为CCA平台验证密钥和身份必须更改以反映新的不可变安全属性。
这也包括当CCA平台验证密钥和身份本身发生更改时(例如更新安全算法或恢复被破坏的CCA平台密钥后)。任何重新供应事件都会撤销先前的CCA平台验证密钥和身份,并发放新的CCA平台验证密钥和身份。
Arm CCA不定义供应、重新供应或恢复过程,这些是特定实现和生态系统相关的内容,不在本规范的范围内。
四、可信子系统与CCA HES
预计可信子系统将遵循与主CCA系统安全生命周期相同的模式和规则。
[R0145] 可信子系统可以将其安全生命周期管理委托给另一个可信子系统。例如,电源管理子系统可以将其安全生命周期管理委托给CCA HES主机。
[R0119] 任何CCA可信子系统都不受根调试影响。
[R0120] 任何影响CCA可信子系统的外部或CCA固件启用的调试功能只能在系统重置后启用。
[R0121] 任何影响CCA可信子系统的外部或CCA固件启用的调试功能只能由CCA HES启用。
[R0122] Arm建议在CCA安全系统上永久禁用所有影响CCA HES的调试功能。