一、什么是“安全域”?
安全域(Security Domain / Security World)
是 ARM 架构(从 Cortex-A 以后到 Cortex-M33)在硬件级别上
把整个系统分成两块相互隔离的世界:
Secure World(安全世界)
Non-secure World(普通世界)
两边的 CPU、内存、外设访问权限都由硬件强制区分。
二、为什么要分安全域?
目的是防止系统被入侵后“一锅端”。
举个例子:
以前所有代码都跑在一个环境里,
如果应用程序被攻击者利用漏洞提权,
他就能直接访问加密密钥、固件升级接口、存储分区……
结果:整机安全性全失。
现在通过 TrustZone 安全域分离:
-
安全世界(Secure World):保存敏感数据和安全服务(加密、签名、密钥管理、固件更新验证)。
-
普通世界(Non-secure World):跑 Linux、Android、应用程序、UI 等。
-
两者通过 受控接口(SMC / Secure Call)通信。
就像两个房间:一个普通办公室,一个保险库,中间只有一扇受控门。
三、硬件是怎么实现的?
在 Cortex-A (ARMv8-A) 上:
有两个执行状态:
-
Secure ELx(安全执行级)
-
Non-secure ELx
CPU 在硬件里有一个状态位 SCR.NS(Non-secure bit)
→ 控制当前是在安全世界还是普通世界。
有专门的指令 SMC(Secure Monitor Call)
→ Linux/Android 只能通过这个调用安全世界的服务(例如访问密钥、签名验证)。
安全世界的 OS 通常是 OP-TEE (Open Portable Trusted Execution Environment),
由 TF-A (BL31) 启动。
在 Cortex-M33 (ARMv8-M) 上:
同样有两个内存与外设访问域:
-
Secure
-
Non-secure
通过两个硬件单元控制:
-
SAU (Security Attribution Unit)
-
IDAU (Implementation Defined Attribution Unit)
它们决定哪块内存属于安全域,哪块属于非安全域。
CPU 会自动阻止 Non-secure 世界访问 Secure 区域。
安全世界运行 TF-M (Trusted Firmware-M),
Non-secure 世界运行普通应用或 FreeRTOS。
四、软件栈上的安全域分层
| 层级 | 角色 | 跑在安全域? | 说明 |
|---|---|---|---|
| BootROM | ✅ | Secure | 芯片上电后第一段安全代码 |
| TF-A / TF-M | ✅ | Secure | ARM 官方安全固件框架 |
| OP-TEE | ✅ | Secure | 安全世界操作系统 (A 系列) |
| U-Boot / Linux / Android | ❌ | Non-secure | 普通系统与应用 |
| 应用程序 | ❌ | Non-secure | 用户空间 |
五、通俗理解
把整个芯片想成一栋楼:
| 区域 | 比喻 | 权限 |
|---|---|---|
| Secure World | 保密机房(有金库) | 只有安保系统能进 |
| Non-secure World | 办公区 | 员工自由进出 |
| TrustZone 门 | 安全网关 | 控制从办公区到机房的访问 |
六、STM32MP 平台的安全域实践
| 平台 | 安全域在哪 | 安全 OS |
|---|---|---|
| STM32MP1 | Cortex-A7 上的 OP-TEE | OP-TEE |
| STM32MP2 (A-first) | 同上,A35 Secure EL1 | OP-TEE |
| STM32MP2 (M-first) | M33 Secure World | TF-M |
所以:
-
MP1 / MP2 A-first 模式 → Secure World 在 A 核;
-
MP2 M-first 模式 → Secure World 在 M33 上。
七、总结
「安全域」是 ARM 硬件层面把系统分为 Secure(安全世界) 和 Non-secure(普通世界),
使得只有受信任的固件/代码能访问敏感资源。A 系列用 TrustZone-A + OP-TEE + TF-A
M 系列用 TrustZone-M + TF-M
换句话说:
有了“安全域”,
Linux 再也不是系统里最信任的那一层 ——
真正的安全根在 TF-A / TF-M + Secure World 里。
1854

被折叠的 条评论
为什么被折叠?



