1. 课程导论与背景
1.1 安全固件与TEE的基本概念
在嵌入式系统领域,安全固件是指存储在非易失性存储器(如Flash、ROM)中,具备安全启动、加密存储、可信执行等能力的底层软件。它不仅是硬件与操作系统之间的桥梁,更是整个设备安全信任链的起点。
可信执行环境(TEE)是一种在处理器内部构建的安全区域,与富执行环境(REE,如Linux/Android)并行运行。TEE通过硬件隔离机制确保敏感代码和数据在受保护的环境中执行,即使REE被攻破,攻击者也无法访问TEE内部资源。
核心要点: TEE不是虚拟化,而是基于硬件安全扩展(如ARM TrustZone、Intel SGX、RISC-V PMP)实现的隔离执行环境。REE与TEE共享同一物理CPU,但通过硬件总线过滤和内存隔离实现“安全世界”与“非安全世界”的切换。
REE与TEE对比
| 维度 | 富执行环境(REE) | 可信执行环境(TEE) |
|---|---|---|
| 典型OS | Linux、Android、Windows | OP-TEE、Trusty、QSEE |
| 安全等级 | 低(易受Root/恶意App攻击) | 高(硬件隔离+签名验证) |
| 内存访问 | 全部内存(非安全区域) | 仅安全内存(受TZASC保护) |
| 外设访问 | 全部外设 | 仅安全外设(受TZPC控制) |
| 典型应用 | UI、网络、游戏 | 密钥管理、DRM、支付、生物识别 |
安全固件信任链
安全固件的核心价值在于建立一条从硬件复位到操作系统启动的信任链。每个阶段在加载下一阶段之前,必须验证其数字签名或哈希值,确保未被篡改。
信任链典型流程:
1. BootROM(不可修改)→ 验证SPL/FSBL签名
2. SPL/FSBL → 验证TEE镜像签名
3. TEE → 验证U-Boot/ATF签名
4. U-Boot/ATF → 验证Linux内核签名
5. Linux内核 → 验证文件系统dm-verity哈希树
1. BootROM(不可修改)→ 验证SPL/FSBL签名
2. SPL/FSBL → 验证TEE镜像签名
3. TEE → 验证U-Boot/ATF签名
4. U-Boot/ATF → 验证Linux内核签名
5. Linux内核 → 验证文件系统dm-verity哈希树
1.2 OP-TEE项目简介
OP-TEE(Open Portable Trusted Execution Environment) 是Linaro社区维护的开源TEE实现,基于ARM TrustZone硬件安全扩展。它是目前嵌入式Linux生态中最广泛使用的TEE方案之一,被广泛应用于移动设备、IoT网关、汽车电子等领域。
OP-TEE架构组件
| 组件 | 运行位置 | 功能描述 |
|---|---|---|
| OP-TEE OS | 安全世界(S-EL1) | 核心内核,提供TA加载、调度、内存管理、密码学服务 |
| TA(Trusted Application) | 安全世界(S-EL0) | 运行在TEE中的安全应用,如密钥管理、DRM解密 |
| OP-TEE Client | 非安全世界(REE) | 用户空间库(libteec),REE端TA通信接口 |
| OP-TEE Linux Kernel Driver | 非安全世界(REE内核) | REE与TEE之间的消息传递通道(SMC调用) |
| Secure Monitor | Monitor(EL3) | 安全世界与非安全世界切换的底层固件(ATF/ARM-TF) |
注意: OP-TEE并非唯一TEE方案。Google Trusty主要用于Android设备,QSEE(Qualcomm Secure Execution Environment)是高通私有方案。OP-TEE的优势在于开源、跨平台、社区活跃,且支持多种开发板(RPi3/4、i.MX、STM32MP1、Xilinx Zynq等)。
1.3 课程目标与学习路径
本课程旨在帮助嵌入式开发者和安全工程师掌握从零开始部署安全固件、移植OP-TEE驱动以及开发可信应用(TA)的完整技能。课程采用理论+实战双线并行的方式,每个知识点都配有可复现的实验案例。
课程核心目标
- 理解安全固件信任链:掌握从BootROM到Linux内核的完整安全启动流程。
- 掌握OP-TEE移植方法:能够在主流开发板上编译、部署和调试OP-TEE。
- 开发TEE驱动与TA:学会编写OP-TEE内核驱动和用户空间可信应用。
- 实现安全通信:掌握REE与TEE之间的数据传递、共享内存和加密通道。
- 应对实际挑战:解决驱动适配中的内存隔离、中断处理、电源管理等难题。
学习路径与章节规划
| 阶段 | 章节范围 | 核心内容 |
|---|---|---|
| 基础篇 | 第1-4章 | 安全固件概念、OP-TEE架构、开发环境搭建、编译部署 |
| 驱动篇 | 第5-12章 | OP-TEE驱动框架、SMC通信、共享内存、中断处理、DMA安全 |
| 应用篇 | 第13-20章 | TA开发、安全存储、密码学服务、远程证明、密钥管理 |
| 实战篇 | 第21-26章 | 典型平台移植(i.MX8M、STM32MP1、RPi4)、性能优化、调试技巧 |
| 进阶篇 | 第27-30章 | 多核安全、虚拟化支持、安全固件更新、Fuzzing测试 |
前置知识要求:
• 熟悉C语言和Linux内核编程基础
• 了解ARM体系结构(异常等级、MMU、中断控制器)
• 具备嵌入式Linux交叉编译和设备树(DTB)修改经验
• 对密码学基本概念(对称/非对称加密、哈希、签名)有初步认识
• 熟悉C语言和Linux内核编程基础
• 了解ARM体系结构(异常等级、MMU、中断控制器)
• 具备嵌入式Linux交叉编译和设备树(DTB)修改经验
• 对密码学基本概念(对称/非对称加密、哈希、签名)有初步认识
1.4 课程实验环境概览
本课程所有实验均基于以下软硬件环境,建议学员提前准备或使用课程提供的预配置虚拟机镜像。
| 组件 | 推荐配置 | 备注 |
|---|---|---|
| 开发板 | STM32MP157D-DK2 / i.MX8M Mini EVK | 支持TrustZone,社区支持完善 |
| 主机OS | Ubuntu 22.04 LTS (x86_64) | 用于交叉编译和调试 |
| 交叉编译器 | gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf | ARM 32位,Cortex-A7 |
| OP-TEE版本 | OP-TEE 4.0.0 (LTS) | 基于Linux 5.15 LTS内核 |
| ATF版本 | ARM Trusted Firmware 2.8 | 提供Secure Monitor |
| U-Boot | U-Boot 2023.04 | 支持OP-TEE启动参数传递 |
快速开始: 课程第2章将提供完整的开发环境搭建脚本(Dockerfile + 一键编译脚本),学员无需手动配置工具链。建议提前安装Docker和Git,并确保主机有至少20GB空闲磁盘空间。