图略
PSA设备可信根是一个多层的可信根,它由不可变的和可变的组件共同工作来确保如下安全特性:
- 设备及其可更新组件的完整性;
- 设备内部和生态系统内部的信任链的完整性;
- 密钥的机密性和完整性,以及使用密钥进行操作的机密性和完整性;
- 能从相对不可信的组件中分离和隔离出相对可信的组件。
PSA隔离的核心特性是可信硬件免于不可信软件的攻击,并确保不可信软件不会自动危害到啊可信软件的安全。在联网设备上,这一特性至关重要,因为未经授权的软件对敏感信息的任何访问都会危及这些信息,即使问题没有暴露出来。
在兼容PSA的设备上,PSA可信根充当主可信根,PSA可信根的实现可选择合并次可信根,也可不合并。比如SE(SIM或者TPM)设备,也实现了部分或者全部PSA的安全性能。这是一种实现方式,本文档没有讨论(见【TBSA】)。
PSA可信根本身分为可更新部分和不可更改部分。不可变的可信根是所有可信服务的初始可信根,并且始终不会在生产设备上更改。可更新的PSA可信根形态为所有可信软件的组件的结合,提供了一个通用的可信平台。
应用程序的可信根表示在PSA可信根之上,针对应用程序的安全服务的实现。例如,PSA可信根提供了一个通用的认证令牌,可用于绑定在应用程序可信根上实现任何针对此应用程序的认证协议。
最后,PSA可信根的总体状态和功能由PSA安全生命周期控制。PSA安全生命周期定义了PSA可信根的安全生命周期发生变化时机的规则——从制造到生成使用到维修和调试,以及这些生命周期的变化如何影响PSA信任根的密钥管理。
将通用可信平台和针对某应用程序的特性实现和协议分离开,可以围绕PSA安全模型构建个中生态系统和供应链。PSA可信体系结构的可信根被设计成可以对应到标准可信体系结构,比如TCG和GP,这种映射见下表。
组件 | 描述 | 对应 | 备注 |
PSA不可变的可信根 | 不可变的、防篡改的硬件安全资源,例如Boot ROM和根参数(root parameters) | 初始可信根 |
|
PSA可更新的可信根 | 系统上最受信任的软件,实现直接在可信硬件或者设备敏感信息上操作的通用安全服务。 其他软件不能访问。
| 增强可信根 | 本规范中规定了PSA可信根的使用范围,包括初始认证、绑定、固件验证和隔离等功能。 |
PSA可信根 | PSA不可变可信根和可变可信根的组合 | 主可信根 | 芯片供应商提供好,或者相关技术专家移动到芯片中 |
应用程序可信根 | 实现应用程序级别的安全服务,扩展PSA可信根的功能,用以提供更高级别的应用程序安全服务。 应用程序可信根不应能直接访问PSA不可变可信根,同时也不能直接访问任何PSA可变可信根的内部资源 | 增强可信根 | 应用可信根服务表示应用软件使用的服务可信,比如安全存储、终端认证、协议 应用程序可信根应该只针对应用程序,且应该比PSA可信根更加复杂 |
PSA安全生命周期 | 定义基于PSA信任根的安全生命周期改变时的规则,从制造到生成使用,到维修调试,以及生命周期改变如何影响PSA信任根的密钥管理 | 没有对应 | 看PSA安全生命周期部分 |
PSA的主要目标之一是提供一个通用的硬件强制隔离框架,用以支持设计健壮的软件,同时确保在正常操作中不可信软件不会破坏可信软件。
PSA可信根信任如下两种隔离边界:
隔离类型 | 描述 | 备注 |
时间性(时差性)隔离 | 在时间边界上之前运行的代码必须是当下运行的唯一代码。 在时间边界之前的代码应是可预期、可重复的方式完成执行,然后进入到时间边界之后的下一阶段。 在时间边界之前执行的代码可能会留下状态供之后的下一阶段查询使用。 在时间边界之后执行的代码不应访问在时间边界之前执行代码的私有资源,只能访问在前一阶段上界上被确定良好的状态值。 | 在启动阶段的过程中,需要使用时间性隔离机制。 |
运行时隔离 | 在正常运行中,软件并行执行。 PSA运行时隔离模型将代码分为多个安全分区。 安全分区提供一个隔离的执行环境,保护安全分区中的代码和数据不被其他分区中代码访问。 安全分区访问控制策略由专用的PSA信任根服务(安全分区管理器(SPM))执行。 | 运行时隔离是在应用程序(或主程序)完成引导后并发执行的组件(需要在SPM初始化之后) 看【FF】 |
通常情况下,安全分区应承载一个或多个信任根,为提高效率,共享底层功能或数据相关服务可以在同一个安全分区中实现,但是不相关的服务应该保存在不同的分区中。
但是,安全分区只能实现完全在PSA可信根下的可信服务,或者完全在应用程序可信根之下,或者完全在非安全(NS)空间内。一个安全分区不能跨越这些边界。
根据可用的底层硬件隔离机制,【FF】定义了三个隔离级别。一个设备上能够支持的隔离级别,取决于设备上的硬件协助隔离(硬件外设)的级别。PSA设备在软件维度的设计应使用考虑最大程度的隔离,才能提供较好健壮性和高可移植性的代码。
【FF】定义的隔离级别如下:
隔离级别 | 目的 | 描述 |
一级 | 安全进程环境(secure Processing Environment,SPE)隔离 | PSA可信根和ARoT(应用可信根)与非安全应用隔离,但是不是互相隔离。 |
二级 | PSA可信根隔离 | PSA可信根和ARoT(应用可信根)与非安全应用隔离,且互相隔离 |
三级 | 最大限度隔离 | 即使在特定的安全区,各个安全区也是彼此隔离(PSA RoT、ARoT、NS) |
如下通用隔离要求适用所有PSA设备:
规则 | 描述 | 备注 |
应用程序可信根不应能够访问PSA可更新可信根的内部资源,也不应直接操作PSA不可变可信根。 | PSA可信根包含最受信的安全服务,应该保护它不受其他代码影响。 | 在设个级别上如果没有硬件强制隔离,设备可能无法恢复。 |
应用软件不能访问应用程序可信根的内部资源,也不能访问PSA可信根。 | 不安全的应用程序包含不受信代码,不能访问应用可信根或者PSA可信根。 |
|
任何PSA设备必须至少支持一级隔离 | 不安全应用被破坏后,必须始终能够恢复 |
|
二级隔离是强烈推荐级别 | 在应用可信根或者不安全程序被破坏后,应该可以被恢复 |
|
一个系统可能提供本文档中未提及的硬件安全设备特性,比如加速加解密设备、安全时钟源、可信显卡等。任何此类特性在不包含可更新组件或配置的情况下,都被视为不可变PSA可信根的一部分。
对于任何包含可更新组件或者配置的如上硬件安全特性,视为可信的子系统。
可信子系统是在功能上超出PSA可信根范围的任何系统,但是其在PSA可信根的可信边界之内——它们是功能上分开且不能直接访问PSA可信根,但是它们正确执行和配置都必须由PSA可信根进行认证。
可信子系统可以完成其第二个可信根的认证以及第二个可信根的生命周期管理,但是由于它的配置和状态都必须由PSA可信根确定,所以其必须受PSA可信根管控。
规则 | 描述 | 备注 |
任何对设备整体安全特性和可靠性有贡献的系统特性,都必须经由PSA可信根的认证 | 验证实体必须能够验证其设备,包括任何可信子系统 |
|
PSA不可变可信根默认是安全的,它是由硬件设备标识认证的 |
| 如果系统安全特性在制造时是固定的,并且不能在生产设备上修改或更新,那么可以将它视为不可变可信根的一部分。 |
任何包含可更新组件的系统安全特性都必须被视为可信子系统,它们的安全状态和配置必须经过PSA可信跟的验证和验证 | 验证实体必须能够验证设备的完整安全配置。 | 示例: 图形硬件固件更新或任何其他可信设备,都必须认为是可信子系统,其安全配置需要在认证之中。
|
系统安全特性的安全配置必须只能由PSA可信根直接访问,并且必须是可测试的 | 如果有系统安全特性操作的选项,包括对设备的全部或部分启用或禁用,或选择具有不同安全属性的操作模式,那么此类配置必须由PSA信任根控制并包含在认证中。 | 例如,内存保护引擎的配置。 |
-
- PSA可信根服务(强制要求)
图略
本文档定义了PSA可信根服务的最小集,这些服务必须始终出现在任何符合PSA的实现中。
如果有需要,可以在这个级别上定义针对某实现的服务,该规范的未来版本有可能需要额外的服务。本文档根据所需要的安全属性和功能定义了这些服务。软件接口在技术规范中单独定义。
规则 | 介绍 | 备注 |
必须要实现安全启动 | 管理安全生命周期状态、以及状态的改变 | |
必须要实现安全分区管理(SPM) | 执行分区级隔离访问控制策略 | |
必须具备加解密能力 | 提供通用加解密服务,能隐藏、保存密钥,并且保证密钥真实值远离非可信代码 | |
必须具备绑定功能 | 允许将数据和敏感数据绑定到对应分区、设备实例等上 | |
必须实现内部可信存储 | 管理隔离区域——具有物理隔离属性的区域,这些位置只能通过PSA可信根访问。 | |
必须实现初始认证操作 | 发出初始认证令牌(IAT),用以证明设备的当前启动状态 | |
其他实现:
| 例如:为实现特定可信硬件(例如安全时钟源、或者电源管理控制器)管理访问控制的服务。 |
|
-
- PSA可信根密钥、身份认证,以及其他相关参数(强制要求)
图略
一个符合PSA的设备需要许多不可变的参数,包括身份信息和密钥,这些参数是在设备制造商在安全工厂工厂化过程中写入的。
为了建立PSA安全模型,定义下列PSA参数的安全类别:
安全等级 |
属性 | 描述 |
私有 | 不能被未授权的角色访问的敏感数据,包括外设、调试口和未授权的代码。 | 例如,认证私钥。 |
公有 | 可以在设备内部和外部共享的值 | 例如,启动验证密钥或实例ID |
根据实现的情况,这些参数可以是如下几类:
- 直接设计在隔离区域的:存储区域受物理隔离保护,且只能访问可信代码
- 直接设计在屏蔽区域:隔离区域也有一定程度的抗干扰能力
- 启动时存放于屏蔽区域上的导出的随机数(种子)
私有值应该存放于屏蔽区域,或者在启动(引导)时导出。同时公有值也应在启动时导出,或者至少存放于隔离区以保证不被修改(如克隆或者复制)。
根据相关配置文件,配置参数可能使用不同技术存储,比如:
- 在受保护的只读Flash中
- 在受保护的独立片上OTP上
- 在SE中,例如SIM或TPM
不管何种情况,PSA在确定的时间性隔离边界上指定了一种启动架构,也指明了启动状态必须存储在受保护的RAM中(片上,或者加密的)。
时间隔离边界后的代码只应根据边界前运行的代码的引导状态进行执行。启动代码应该直接操作隔离区域或者屏蔽区域提供的PSA参数,PSA可信根的代码应该只在启动状态下执行。
此模型为PSA信任根提供了一个额外隔离,同时提供了多种管理策略,且直接保护PSA参数。
在这个模型中,PSA定义了以下类型的PSA参数:
参数类型 |
属性 | 描述 |
初始参数: 在屏蔽区域直接提供的参数 | 应该只能被引导代码直接访问。 可以直接为启动状态值的一部分,也可以在启动状态下作为一个派生的种子 | 通常为启动(引导)验证密钥,启动加密密钥(如果需要使用),和至少有一个硬件唯一密钥(HUK) |
PSA可信根参数:完成PSA可信根服务所需参数 | 或者是使用初始参数作为启动状态值一部分,或者是从一些种子中派生出来,比如HUK | 例如,初始验证密钥,实例ID,实现ID(Implementation ID),或绑定的跟密钥 |
具体是直接提供,还是用某种派生方案,依赖于具体实现。
在一般情况下,派生方案可能更灵活和更具有前瞻性,它对保护PSA 可信根私有参数提供了附加的策略,同时也可能降低设备制造过程中私有参数被暴露的风险。但它也可能在启动时需要额外的计算资源。
任何兼容PSA的设备必须至少提供以下硬件安全特性:
特性 |
描述 | 备注 |
Boot ROM | 引导ROM是在设备上执行的第一个软件,因此是所有软件的信任的最初信任根 | 启动ROM可以为真实的ROM,或锁定的片上闪存,这取决于认证配置文件的设置。 |
硬件级协助隔离 | 在PSA软件组件之间实现隔离所需的所有硬件。 | 硬件辅助隔离的例子包括, Tz-style隔离和物理隔离(协处理器,或能够承载应用程序的SE)。 看[TBSA-M] |
下列通用硬件健壮性规则适用于PSA不可变看可信根:
规则 |
描述 | 备注 |
抗干扰: 屏蔽区域必须具有一定程度的抗干扰性。 | 屏蔽区域保存各种敏感数据,包括PSA 可信根密钥。应该有一定程度的扛干扰性,以防止有人试图窃取这些机密。 | 根据认证文件和部署要求,抗干扰可以解决许多问题,包括:
|
访问控制和隔离:PSA初始参数只能通过引导代码直接访问。 PSA 可信根参数应该只能直接访问到PSA 可信根(在完成引导之后)。
| 受保护参数不受未经授权的访问和修改。 | 依赖于认证的配置文件和硬件的能力,多种实现都可满足相关需求:软件实现、PSA隔离访问控制,可锁定的硬件寄存器。 |
不可修改(不可变) | PSA参数必须是固定的,在正常运行中不能改变 | 依赖于认证的配置文件和硬件的能力,软件实现、PSA安全生命周期管理,可锁定的硬件寄存器。 |
调试保护 | 设备的调试和维修支持不能破坏PSA参数。 |
|