可信执行环境(安全机制篇)
概要
物联网的快速发展在给人类带来无比便利的同时也带来了安全隐患,时刻影响人类的生活。物联网的碎片化特性对不同产品的应用需求提出了有不同的安全等级。根据物联网市场上对产品的安全等级主要分为三种等级:
SE
采用SE作为可信根的安全方案,安全等级高,但成本也高。
TEE
采用TEE作为可信根的安全方案, 安全等级中上,但成本相比SE方案降低很多。
安全MCU
采用安全MCU为可信根的安全方案,安全等级低,但成本更低。
我们提出了TEE in MCU方案,是将一个物理处理器虚拟出两个逻辑内核,两个逻辑内核有自己的专门的控制寄存器,分别运行在TEE和REE里,由于运行在TEE的逻辑处理器具有最高的执行权限,不能被运行在REE里的逻辑处理器访问,从而实现了执行环境的物理隔离。一旦REE程序需要访问可信执行里的资源,就必须通过调用可信应用服务实现。
可信执行环境安全方案集成高,安全性较高,对资源要求少,非常适合这种功能简单单一,资源受限的MCU领域的物联网设备。
专业术语
术语缩写 | 全称 | 解义 |
---|---|---|
TEE | Trusted Execution Environment | 可信执行环境 |
REE | Rich Execution Environment | 丰富执行环境 |
SE | Secure Element | 安全元素 |
AP | Application Processor | 应用处理器 |
TA | Trust Application | 可信应用 |
CA | Client Application | 客户端应用 |
WSC | World Switch Calling | 世界切换调用指令 |
RTE | Return To Exception | 世界切换返回指令 |
RoT | Root of Trust | 可信根 |
安全组件介绍
硬件安全组件
TEE安全方案采用软硬结合的方式,先在硬件层面将处理器、外设、存储区域划分成可信和非可信的物理属性,再通过软件层面对用户的敏感数据进行安全管理。
主要特点
硬件物理隔离,安全性高
总线数据加扰,一机一密
设备区域管理,灵活可控
硬件安全集成度高
1. 安全处理器
C-SKY安全处理器支持可信内核和非可信内核。可信内核包含程序状态字, 程序计数器, 堆栈指针等控制寄存器,非可信内核也包含程序状态字, 程序计数器, 堆栈指针等控制寄存器,从而组成逻辑上的两个内核实现了物理上的隔离。可信内核和非可信内核通过安全任务调用和中断响应自动切换方式。2. 存储加扰器
为了更好的保护数据安全,防止攻击者利用探测仪器进行浸入式攻击读取存储区上的数据,硬件上提供了一机一密的加扰密钥供存储控制器在读写存储区的时候使用。该加扰密钥在芯片第一次上电启动时生成,存于可信执行环境区域,直到芯片生命周期结束。3. 安全访问控制器
上电后BOOTROM和OTP区域处于可信区域, FLASH和RAM存储区域默认处于非可信区域,可以通过安全访问区域控制器将FLASH和RAM划分成可信的区域和非可信的区域分别给TEE和REE使用。TEE镜像运行在可信区域里,保证不被运行在非可信区域的REE镜像访问。一旦发生无权限访问,系统会触发一个总线异常。需要注意的是安全访问控制器必须在TEE里才能访问。4. 可信设备控制器
上电后有些外设是默认是可信设备,比如RSA, AES等算法引擎设备,其他的非可信的设备可以通过可信设备控制器配置成可信设备。一旦设备被配置为可信属性后,意味着REE镜像不能直接对该设备进行访问操作。只有TEE镜像才具有权限访问该设备。同时,该设备的中断也被赋予可信属性,只能在TEE的中断处理函数里执行。需要注意的是可信设备控制必须在TEE里才能访问。软件安全组件
1. BOOTROM
芯片ROM的启动程序在上电后或者唤醒时被执行,此时系统处于可信执行环境,BOOTROM提供了以下三种与安全相关的处理机制:
- 安全启动的起点,验签下一个子镜像的合法性
- 设备调试开关的管理
- 低功耗唤醒后的安全现场还原管理
2. BOOTLOADER
BOOTLOADER位于芯片BOOTROM的下一级镜像,此时系统处于可信执行环境,BOOTLOADER主要功能是支持FOTA升级,为TEE OS 和 REE OS镜像升级提供升级服务。主要提供了以下四种与安全相关的处理机制:
- 验证升级镜像包的完整性和真实性
- 实时记录整个升级过程,支持升级掉电保护
- 防御版本降级攻击
- 验签下一次子镜像的合法性
3. TEE OS
TEE OS提供了完整的安全调用流程,正确处理来自REE消息命令,由于MCU资源受限,OS采用单任务处理安全命令,只有当前的安全命令执行完了以后才能接受执行一下一个安全命令。同时,TEE OS对硬件支持的算法加速器进行了算法库的封装,对可信内核与非可信内核的上下文做了统一管理。主要特性如下:
- TEE内核
- TEE上下文管理
- TEE服务框架接口
- 消息接收处理机制
- 算法密码库
4. Trusted Application
可信应用是TEE提供服务的核心部件,通过调用TEE INTERNEL API实现。TEE OS需要为每一个可信应用程序指定一个UUID,然后实现可信应用的五个调用接口,最后注册到可信节点链表里去。TEE OS接收到来自REE的消息命令后,根据消息的UUID找到对应的可信应用的入口,在服务框架接口里依次调用可信应用的五个接口来完成安全调用。
5. Client Application
客户端应用是调用TEE的可信应用的入口,通过调用TEE CLIENT API实现。 TEE CLIENT API会调用内核切换指令实现内核的切换和完成参数的传递。用户的业务程序通过调用客户端应用接口实现对TEE可信应用的调用。