社区编辑申请
注册/登录
关于TEE,你需要知道的五大要素 原创
移动开发 移动应用
现在手机已经成为我们每个人生活的必需品,那安卓手机的安全就成为了最为重要的一部分。

我们通常提到的安卓手机不仅仅只有安卓系统,还有与安全息息相关的TEE系统,当然除了这两个系统之外,还会有其他系统,在此我仅仅阐述TEE与安卓是如何并存的,先向大家介绍下这两个系统如何部署,紧接着从SMC调度和通信方式,库的角度来分别说明两个系统的通信机制,最后为大家简单说明一下TEE API的GP标准。

1.TEE和安卓架构

首先,我们从整体大方向上,先看一下安卓系统和TEE系统是如何并存的。如下图 1 TEE和安卓系统并存架构所示:

图 1 TEE和安卓系统并存架构

上图中的左半部分非安全侧(Non-secure)就是大家熟悉的安卓系统,通常我们称之为REE,右半部分安全侧(Secure)就是TEE系统,目前市场上存在多种TEE系统,如高通的QSEE,Trustonic,开源的OPTEE等。

图中的EL0,EL1,EL3是ARM架构中的异常等级,其中EL0和EL1是必须实现的,可以粗略的认为EL0是应用层,EL1是系统内核层,其中最重要的是REE侧EL1中需要部署TEE相关驱动,REE侧最后是通过该驱动,同后面提到的EL3进行通信,进而完成一些功能的。EL2主要提供对虚拟化的支持,在本文中先忽略EL2。EL3是比较重要的部分,提供了REE侧(Non-secure)和安全侧(Secure)的功能切换。从图中也可以看出,只有EL3横跨REE侧和安全侧,从而为这两个系统提供了通信的接口,比如我们常用的指纹功能和支付功能就需要REE侧和安全侧交互的,后面内容中我会给大家具体阐述两个系统的通信。

在ARM提供的Trustzone白皮书中有提到,为了使系统更加健壮,建议EL3中的Monitor模式在执行时,关闭中断。

2.SMC

在此我首先强调一点,TEE系统和安卓系统是两个完全独立的系统,这两个系统独立运行。但在实际实用中,这两个系统需要进行通信,比如我们手机锁屏或者使用指纹进行解锁时,均需要安卓系统和TEE系统共同配合完成,其通信是通过SMC指令来完成的,其本质上就是触发一个SMC的中断(如下图2中红色框中所示),从而让安卓或者TEE跳转到Monitor模式(下图中的Monitor/Firmware),而SMC的中断处理类似于系统中的上下文切换。

图 2 环境切换

至此大家应该对SMC有了简单的认识,但在此我需要明确一点,进入Monitor模式并非只有SMC一种方式,比如直接写寄存器CPSR等。

3. REE/TEE传输方式

上面简单说明了SMC,那当REE和TEE侧要进行数据传输时,又该如何处理呢?在现有的处理方案中采用了共享内存,包括静态的共享内存和动态的共享内存。由于静态的共享内存是REE侧和TEE侧约定好的一块共享内存,不管是否需要,都会预留一块区域,比较浪费内存。动态共享内存,操作步骤较复杂,需要我们先申请内存,再进行mmap映射(TEE侧和REE侧都需要进行映射)),然后通过共享内存进行数据传输。

那大家再思考一个问题, TEE侧传输数据到REE侧和REE侧传输数据到TEE侧时,其共享内存分别是由谁申请的?解答此问题前,我需要引入一个Session的名词,TEE侧和REE侧通信前都需要建立一个Session,在REE侧建立Session时,共享内存就准备好了,之后不管数据是从哪边传递到哪边,均使用的是之前已经准备好的共享内存。

大家有机会看CA(REE侧的一个可执行程序)的代码,会发现都会先建立Session,之后就可以进行响应的业务处理。目前市场有不同的TEE厂商,他们实现细节会存在一些差异,但其思路都是一致的。

4. 库

一般TEE厂家会给我们提供TEE相关的库,这个库里面会通过调用TEE对应驱动进而完成各项功能。通常在开发需要TEE环境的程序时,最好可以找对应TEE厂家索要Demo,有这个Demo后,我们就知道该如何基于对应的TEE进行程序开发。

5.GP

我在同一些从事安卓的朋友交流时,发现他们要么是不知道TEE,要么是知道TEE,但不知道GP。试想一下,市场上存在很多TEE厂商,比如我们熟悉的豆荚,Trustonic等,每一家都有他们独有的API接口,那对于一些基于TEE的功能,如指纹,支付等,那是不是需要针对每一个TEE,要进行不同的适配?而GP全称是Global Platform,它提供了一些安全相关的API要求,假如所有项目上均采用GP的方式,那基于TEE的模块(如常见的指纹,支付等),就无需做很大的改动,且在同这类供应商沟通时,需要告知供应商,当前项目上是否采用GP接口的方式。

总结

至此,我已经介绍了我们需要知道的五大要素,此时,我们来思考一下,假如我的项目上需要增加指纹功能,我需要做什么工作呢?

  • TEE环境的部署,包含TEE系统本身,Monitor, REE侧同TEE相关的驱动,库等,其他的细节可以同TEE供应商沟通。
  • 同指纹厂商沟通,告知其项目上使用的TEE系统和TEE版本是否采用GP接口,项目上采用的指纹器件型号等。

本文中,我把TEE拆分为五要素,但实际上,TEE系统远比本文介绍的要复杂,希望大家可以通过本文对TEE有一个大框架的认识,在此基础上,可以继续深入研究。

作者介绍

赵青窕,51CTO社区编辑,从事多年驱动开发。研究兴趣包含安全OS和网络安全领域,发表过网络相关专利。

责任编辑:华轩 来源: 51CTO
相关推荐

2022-05-18 23:42:08

网络安全安全分析工具

2022-05-20 14:54:33

数据安全数字化转型企业

2022-05-17 14:03:42

勒索软件远程工作

2022-05-09 15:08:56

存储厂商NFV领域华为

2022-05-11 15:08:52

驱动开发系统移植

2022-05-16 10:36:08

GitHub开源项目

2022-05-16 13:37:12

Sysrv僵尸网络微软

2022-05-16 10:49:28

网络协议数据

2022-04-26 23:42:08

Windows 10微软升级

2022-05-11 14:48:33

腾讯云寿险民生保险

2022-04-25 14:06:28

数据分析人工智能机器学习

2022-04-28 09:46:20

Nginx文件Linux

2022-05-12 14:44:38

数据中心IT云计算

2022-04-20 11:57:30

物联网人工智能

2022-05-07 10:09:01

开发Java日志

2022-05-23 10:55:19

华为数字化转型架构蓝图

2022-05-10 14:11:05

网络安全网络犯罪

2022-05-05 20:24:37

智能领域应用

2022-05-09 07:08:14

LinuxBashShell

2022-05-11 14:05:11

区块链网络安全存储

同话题下的热门内容

携程机票跨端跨框架 UI 自动化测试方案 Flybirds携程基于BookKeeper的延迟消息架构落地实践移动端日历组件设计与实现

编辑推荐

Safari不是唯一选择:8款优秀iPhone Web浏览器应用!从安卓智能手机控制PC的五款最佳应用软件谁说苹果手机不能截长屏?教你3种方法,别再说不知道了推荐两款iOS端磁力下载工具后悔药来了!iOS 15刷机降级iOS 14.6详细图文教程
我收藏的内容
点赞
收藏

51CTO技术栈公众号