1.3 TrustZone技术详解
目录
- 1.3.1 TrustZone基本概念
- 1.3.2 处理器实现机制
- 1. 安全状态切换
- 2. 内存隔离机制
- 3. 外设隔离
- 1.3.3 系统级实现
- 1. 中断处理流程
- 2. 典型TrustZone系统组成
- 1.3.4 TF-A中的TrustZone支持
- 1. 关键实现模块
- 2. 典型配置流程
- 1.3.5 安全扩展应用
- 1. 典型用例
- 2. 性能考量
- 1.3.6 安全威胁与防护

1.3.1 TrustZone基本概念
TrustZone是ARM架构中实现硬件级安全隔离的关键技术,它通过将系统划分为**安全世界(Secure World)和非安全世界(Non-secure World)**两个物理隔离的执行环境:
- 安全世界:运行可信执行环境(TEE)、安全监控模式(EL3)和安全服务
- 非安全世界:运行普通操作系统(Rich OS)和应用程序
- 硬件隔离:通过总线信号(NS bit)实现内存、外设和中断的物理隔离
[TrustZone架构图]
1.3.2 处理器实现机制
1. 安全状态切换
- 监控模式调用(SMC):通过
smc指令触发世界切换 - 异常级别转换:EL3作为安全世界和非安全世界的桥梁
- 上下文保存:自动保存通用寄存器、系统寄存器状态
// 典型SMC调用示例
mov x0, #SERVICE_ID
smc #0
2. 内存隔离机制
| 属性 | 安全世界 | 非安全世界 |
|---|---|---|
| 访问权限 | 可访问所有内存 | 仅限非安全内存 |
| TLB标记 | 带安全属性缓存 | 无安全属性 |
| 总线信号 | NS=0 | NS=1 |
3. 外设隔离
- TZPC(TrustZone Protection Controller):配置外设安全属性
- TZASC(TrustZone Address Space Controller):划分内存区域安全属性
1.3.3 系统级实现
1. 中断处理流程
- 中断触发时检查安全配置(GIC安全分组)
- 根据中断目标世界自动切换处理器状态
- 安全中断可抢占非安全世界执行
2. 典型TrustZone系统组成
graph TDA[Boot ROM] --> B[BL1(TF-A)]B --> C[BL2(TF-A)]C --> D[BL31(TF-A)]D --> E[BL32(OP-TEE)]D --> F[BL33(UEFI/Linux)]
1.3.4 TF-A中的TrustZone支持
1. 关键实现模块
- bl31/tspd:TEE调度器处理SMC调用
- services/spd:安全服务分发器
- plat/arm:平台特定TrustZone配置
2. 典型配置流程
// 初始化安全世界环境
void bl31_plat_arch_setup(void) {// 配置MMU安全属性mmap_add_region(BASE_NS_MEM, BASE_NS_MEM, SIZE_NS_MEM, MT_NS | MT_RW);mmap_add_region(BASE_SEC_MEM, BASE_SEC_MEM, SIZE_SEC_MEM, MT_SEC | MT_RW);// 初始化TZASCtzc400_init(PLAT_ARM_TZC_BASE);tzc400_configure_region(0, BASE_NS_MEM, TOP_NS_MEM, TZC_REGION_S_NONE);
}
1.3.5 安全扩展应用
1. 典型用例
- 安全支付:指纹认证在TEE中完成
- DRM保护:媒体解密在安全世界执行
- 设备认证:密钥存储和加密操作隔离
2. 性能考量
- 上下文切换开销:约1000-2000个时钟周期
- 缓存影响:安全/非安全世界TLB需要分别维护
- 优化技术:批处理SMC调用、共享内存缓冲区
1.3.6 安全威胁与防护
| 威胁类型 | 防护机制 |
|---|---|
| 侧信道攻击 | 时序随机化、缓存隔离 |
| 权限提升 | 严格的边界检查 |
| 安全世界污染 | 输入参数验证 |
| 安全监控漏洞 | 最小化EL3代码量 |
注:TrustZone不是万能的,必须配合良好的安全实践才能构建完整的安全方案