TEE原理及应用举例
一、TEE介绍随着Face ID、指纹识别、5G、AI等技术的发展,移动互联网已经悄然根植于现代生活中,伴随着日常生活的移动化,移动终端中存储的各种敏感信息日益增多,移动终端自身的安全性面...
一、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软件框架
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技术被广泛应用于移动设备中,下面将介绍在Android智能手机上电容指纹技术与TEE的结合。
1. 指纹软件框架
如下图是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:指纹最上层的代码,主要是负责指纹录入解锁调用逻辑
2. 指纹录入流程
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环境下进行操作的,所以指纹解锁是一种相对比较安全的解锁方式。
参考资料:
[1]Global Platform specification and Technology Document
[2]http://kernel.meizu.com/2017/08/17-33-25-tee_fp.html
[3]https://www.jianshu.com/p/c238bfea3e46
长按关注
内核工匠微信
Linux 内核黑科技 | 技术文章 | 精选教程
更多推荐
所有评论(0)