目录
一、概念
二、使能方式
三、TEE软件框架
四、TEE软件流程
一、概念
- REE(Rich Execution Environment):比如Android系统,是一个开放的环境,容易收到恶意软件的攻击,比如敏感数据被窃取、数字版权被滥用、移动支付被盗用等。运行的系统和应用叫做Rich OS和CA(Client APP)。
- TEE(Trusted Execution Environment):可信执行环境,在目前的移动安全领域,默认就是指基于ARM Trustzone技术的TEE。运行的系统和应用叫做Trusted OS和TA(Trusted APP)。
2010年7月GP(Global Platform,全球平台组织)提出了TEE(Trusted Execution Environment)可信执行环境的设计。TEE是一个与REE并存运行的独立执行环境,它具有其自身的执行空间,比Rich OS的安全级别更高,为Rich OS提供安全服务,如指纹的录入比对、支付校验认证等操作。TEE OS各家厂商和组织都有各自的实现方式,但是所有方案的外部接口都会遵循GP(GlobalPlatform)标准:
二、使能方式
Normal world和Secure world分别对应于REE和TEE。通过切换 Secure Configuration Register 系统寄存器来使能该模式的支持,该寄存器最后1bit为0,表示当前CPU处于secure mode。并且 ARM 本身支持将系统资源配置成 secure 状态,通过操作 TZPC 控制寄存器可以将系统总线、内存、DMA、cache 等资源配置成 secure 态,配置成 secure 态之后,normal 端运行的程序无法访问其硬件资源。
三、TEE软件框架
REE中的系统结构:
- CA(Client APP)对应一些上层应用,比如指纹采集、支付应用等,通过调用TEE Client API实现与TEE环境的交互。
- REE Communication Agent为TA和CA之间的消息传递提供了REE支持
- TEE Client API是REE中的TEE驱动程序提供给外部的接口,可以使运行在REE中的CA能够与运行在TEE中的TA交换数据。
TEE中的系统结构:
- TA(Trusted Application)是TEE中完成特定功能的应用。由于TEE中完成计算因此具有较高的安全性。每一个TA在REE中有一个或者多个对应的CA,在REE环境中可以通过调用CA的接口,将信息传送到TEE环境中执行TA,完成对应功能然后返回计算结果。
- TEE Communication Agent是可信操作系统的特殊组成部分,它与REE Communication Agent一起工作,使TA与CA之间安全地传输消息。
- TEE Internal Core API是TEE操作系统提供给TA调用的内部接口,包括密码学算法,内存管理等功能。
- Trusted Device Drivers可信设备驱动程序,为专用于TEE的可信外设提供通信接口。
- Shared Memory是一块只有CA和TA可以访问的一块安全内存,CA和TA通过共享内存来快速有效传输指令和数据
CA与TA交互流程如下:CA首先调用TEE Client API触发系统调用,进入REE的操作系统内核态,根据CA调用的参数找到对应的REE驱动程序,REE驱动程序通过调用SMC汇编指令进入Monitor模式,并将处理器切换到安全内核状态,进入安全模式。切换进入TEE以后,CA的服务请求通过总线传到TEE侧,然后TEE OS通过TEE Internal API调用对应的TA,最后TA运行结束后将运行结果和数据返回给CA,执行完以后回到TEE内核态调用SMC汇编指令进入Monitor切回REE环境。
更简清晰的软件交互如下:
简要描述:REE侧的Client APP是通过调用TEE Client API接口来跟TEE OS交互,具体交互流程是TEE Client API通过ioctl系统调用对TEE Driver通信,TEE Driver通过SMC指令实现 OpenSession,InvokeCommand,CloseSession 等的命令转发,同时也会处理来自 TEE 的请求,如请求REE的资源就让TEE Helper Daemon处理。Secure Monitor主要用于REE和TEE的环境切换、转发请求等。
详细描述:
- REE 部分 Client Applications(CA) 一般是指指纹录入,支付应用等上层应用,其通过调用 TEE Client API 接口来与 TEE 环境的 Trusted OS 进行交互,这里的 TEE Client API 包括 TEE 厂商自定义的一些接口或 GlobalPlatform(GP) 全球组织定义的通用 API,其目的是制定一套标准的编程接口,方便开发者在不同软硬件平台下使用同一套代码实现其功能。
- TEE Client API 通过 ioctl 系统调用对 TEE Driver 进行操作,TEE Driver 是沟通 REE 和 TEE 的桥梁,其通过 SMC 指令,实现将上层的 OpenSession,InvokeCommand,CloseSession 等标准调用的请求转发到 TEE 环境,同时其也会处理来自 TEE 的请求,将请求转发到 TEE Helper Daemon 让其处理。
-
TEE Helper Daemon 是一个辅助进程,用于 TEE 请求 REE 的资源。 一般来说,TEE 需要获得存储在 EMMC 的数据文件(例如安全加密文件,TA 可执行镜像文件等),而读写 EMMC 操作需要复杂的内核驱动的支持,显然如果把读写 EMMC 的驱动放到 TEE 侧运行会使软件复杂度会变得很高,因此 REE 需要一个可以访问这些资源的辅助进程支持,这就是 TEE Helper Daemon 的基本功能。TEE Helper Daemon 在软件逻辑实现上比较简单,以 OP-TEE 的 tee-supplicant 辅助进程为例,整体上是一个循环流程: 其首先通过 ioctl 接口查询是否有来自 TEE 的请求,如果没有,则进入睡眠等待状态,等待 TEE Driver 的唤醒信号,当 TEE Driver 收到来自 TEE 的请求后,会唤醒 tee-supplicant 辅助进程,然后根据请求号进行相应处理(读写数据文件,读写 EMMC 设备分区等),最后返回结果到 TEE Driver,完成一次循环。
- TEE 侧的 Secure Monitor 的主要作用是实现 REE 和 TEE 环境的切换,转发请求到 Trusted OS。当 Secure Monitor 收到 TEE Driver 的 SMC 请求后,会将 CPU 切换到 Secure 状态,然后转发请求到 Trusted OS 来处理,Trusted OS 会找到请求对应的 Trusted App(TA) 去处理请求,具体逻辑流程会在下一节中详细说明。 另外 Secure Monitor 还用于开机时候 Trusted OS 的引导工作。
Trusted OS 是运行在 TEE 侧的小型操作系统,简单来说,其作用是:
- 构建满足 TA 运行的安全运行环境
- 提供安全外设(SPI,I2C,Timer 等)的驱动程序
- 根据 REE 的请求,调度相应 TA 处理请求
- 提供 TA 运行所需要的加解密,随机数生成,证书生成校验等通用函数库
上文提到 GlobalPlatform(GP) 全球组织定义的通用 API,TEE Client API 供 REE 侧的 CA 使用,TEE Internal API 则是供 TA 调用 Trusted OS 资源的标准 API,同样是用于方便 TA 开发者在不同软硬件平台进行开发。
四、TEE软件流程
- 首先 CA 需要与 Trusted OS 之间建立一个 Context(InitializeContext),以后此 CA 与 TEE 环境的所有通信均基于此 Context。
- 然后 CA 会向 Trusted OS 申请与请求的 TA 建立一个 Session(OpenSession)。
- CA 与 TA 之间的 Session 建立完成后,CA 就可以向 TA 发送 Command(InvokeCommand)。
- Command 及其参数会通过共享内存的方式传递,TA 从共享内存中获取到 CA 的请求以及请求参数。
- TA 在 TEE 环境下执行处理,得到的处理结果重新填充到共享内存中,CA 通过共享内存就可以获取到处理结果。
- 获得处理结果后,如不需要进一步请求,则由 CA 发起关闭 Session 的请求(CloseSession),Trusted OS 回收 TA 相关资源,最后 CA 发起销毁 Context 的请求(FinalizeContext),完成一次完整交互。
各步骤时序图:
参考优秀博客:
深入浅出理解TEE|极客笔记 (deepinout.com)文章来源:https://www.toymoban.com/news/detail-670324.html
TEE 软件交互流程概述 - 魅族内核团队 (meizu.com)文章来源地址https://www.toymoban.com/news/detail-670324.html
到了这里,关于一文看懂REE OS、TEE OS、CA以及TA概念、架构、流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!