深入浅出理解TEE

随着Face ID、指纹识别、5G、AI等技术的发展,移动互联网已经悄然根植于现代生活中,伴随着日常生活的移动化,移动终端中存储的各种敏感信息日益增多,移动终端自身的安全性面临着巨大的挑战。

移动端系统运行的环境叫做REE(Rich Execution Environment),在其中运行的系统叫做Rich OS(Operating System),如最常见的Android系统,但是REE是一个开放的环境,容易收到恶意软件的攻击,比如敏感数据被窃取、数字版权被滥用、移动支付被盗用等。因此,2010年7月GP(Global Platform,全球平台组织)提出了TEE(Trusted Execution Environment)可信执行环境的设计。TEE是一个与REE并存运行的独立执行环境,它具有其自身的执行空间,比Rich OS的安全级别更高,为Rich OS提供安全服务,如指纹的录入比对、支付校验认证等操作。本文主要介绍的是TEE基本原理和架构以及TEE与指纹识别技术的结合。

TEE基本原理

TEE是在Arm Trustzone技术上建立起来的一套可信执行环境,通过硬件和软件隔离,实现normal world和secure world,也就是REE和TEE。TrustZone 技术是基于 ARM 架构系统级别层次的对 service 以及 device 进行保护的一项技术, 为了支撑该保护技术, ARMV8 本身支持名为 secure mode 的模式,用来区分 normal mode, 其通过设置 Secure Configuration Register 系统寄存器来使能该模式的支持,该寄存器的最后 1 bit 为 0 的话,则表示当前 CPU 处于为 secure mode,如下图所示,并且 ARM 本身支持将系统资源配置成 secure 状态,通过操作 TZPC 控制寄存器可以将系统总线、内存、DMA、cache 等资源配置成 secure 态,配置成 secure 态之后,normal 端运行的程序无法访问其硬件资源。

TEE基本原理

TEE软件框架

TEE软件框架

Tbase的软件架构符合GPD TEE的基本构架,整个软件架构分为REE和TEE两部分,通过Monitor Mode进行安全和非安全状态切换。REE部分是指normal world,在REE中运行的系统和应用分别是Rich OS和CA。而TEE部分是指secure world,分别对应Trusted OS和TA。

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环境。

TEE软件流程

TEE技术日益发展成熟,例如Trustonic公司的Tbase,得到了GlobalPlatform授权认可的商业产品;Linaro开源的OPTEE;Samsung的Mobicore,主要应用在Samsung手机上;Qualcomm的QSEE,在高通CPU的手机平台上有广泛应用;华为的HW-iCOS,主要服务华为手机。

下面将介绍TEE的软件交互流程,使用GlobalPlatform组织定义的GP API接口。

CA与TA通信需要使用下列接口完成整个会话流程

CA侧接口如下:

  • TEEC_InitializeContext:对变量Context进行初始化配置,用来建立CA和TEE的联系,向TEE申请共享内存地址用于存放数据。
  • TEEC_OpenSession:建立一个CA和TA间的session,用于CA和UUID指定的TA进行通信,是CA连接TA的起始点。
  • TEEC_InvokeCommand:依靠打开的session,将传送命令请求给TA,并将必要的指令执行参数一并发送给TA。
  • TEEC_CloseSession:关闭session,关闭CA和TA之间的通道。
  • TEEC_FinalizeContext:释放Context,结束CA与TEE的连接。

TA侧接口:

  • TA_CreateEntryPoint:为CA建立接入点,使得TA可以被CA调用。
  • TA_DestroyEntryPoint:移除CA的接入点,结束TA的功能。
  • TA_OpenSessionEntryPoint:建立CA与TA之间的通讯通道,作为CA连接TA的起点。
  • TA_CloseSessionEntryPoint:关闭CA与TA的通讯通道
  • TA_InvokeCommandEntryPoint:接收CA传送的指令和参数,并在这TEE侧执行。

在 GP 标准中,CA 要与 TA 进行通信,需要建立如下所示的软件逻辑流程

1)首先CA 需要与 Trusted OS 之间建立一个 Context,以后此 CA 与 TEE 环境的所有通信均基于此 Context。

2)然后 CA 会向 Trusted OS 申请与请求的 TA 建立一个 Session。

3)CA 与 TA 之间的 Session 建立完成后,CA 就可以向 TA 发送 Command。

4)Command 及其参数会通过共享内存的方式传递,TA 从共享内存中获取到 CA 的请求以及请求参数。

5)TA 在 TEE 环境下执行处理,得到的处理结果重新填充到共享内存中,CA 通过共享内存就可以获取到处理结果。

6)获得处理结果后,如不需要进一步请求,则由 CA 发起关闭 Session 的请求,Trusted OS 回收 TA 相关资源,最后 CA 发起销毁 Context 的请求,完成一次完整交互。

TEE软件流程

TEE应用举例

由于tee有较高的安全性的同时,硬件成本和开发成本相对都不是很高,tee技术被广泛应用于移动设备中,下面将介绍在Android智能手机上电容指纹技术与TEE的结合。

指纹软件框架

如下图是Android上的指纹软件框架,REE环境下主要分为APP,Framework,HAL和linux kernel。APP主要负责指纹录入解锁调用逻辑,Framework主要负责回调HAL层相关函数,HAl层负责和硬件以及指纹TA交互。而TEE主要是指纹TA,指纹TA负责控制指纹sensor和执行指纹算法相关函数。

  • Fingerprint TA:主要进行基本操作,比如控制finger sensor采图,特征提取,指纹算法处理等操作。
  • finger CA:负责与Fingerprint TA进行通信,发送指令,向Fingerprint HAL提供REE与TEE的通信接口。
  • Secure SPI driver:TEE与指纹sensor通信的SPI安全驱动
  • finger lib:指纹算法库,主要是对指纹图像特征提取比对等算法实现
  • Fingerprint HAL:指纹hal,调用CA的接口向TA下发指令,同时通过Fingerprint Device Driver实现对GPIO,Power,INT等管脚和功能控制。
  • Fingerprint service:指纹framework,回调hal层相关函数,控制指纹录入解锁等流程
  • App:指纹最上层的代码,主要是负责指纹录入解锁调用逻辑

指纹软件框架

指纹录入流程

Hal中指纹的录入流程为:指纹sensor初始化(begin enroll)->采图(do capture)->录入(do enroll)->结束录入(do enroll)->指纹模板存储(store template)。对应TA的录入流程为:指纹sensor init(begin enroll)->采图(capture image)->将采集的指纹数据传输回TA->录入(do enroll)->结束录入(end enroll)->模板加密存储到secure memory(encrypt)。

HAL中主要进行的是与TA交互,给TA发送指令,同时还会对指纹硬件进行操作,比如指纹sensor上下电等。TA收到CA的command,则需要处理敏感数据和一些安全性要求高的动作,如TA通过secure spi控制指纹sensor采图,图像传输,图像处理,图像比对,模板存储等。这些都是在TEE环境下进行操作的,所以指纹解锁是一种相对比较安全的解锁方式。

指纹录入流程

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程