我们通常所说的安卓手机,不仅仅是安卓系统,还有与安全息息相关的TEE系统。当然,除了这两个系统之外,还会有其他的系统。这里我只是解释一下TEE和Android是如何共存的。首先给大家介绍一下这两个系统是如何部署的,然后从SMC调度、通信方式、库的角度来说明这两个系统的通信机制。最后给大家简单讲解一下TEEAPI的GP标准。一、TEE与Android架构首先我们从整体的角度来看一下Android系统和TEE系统是如何共存的。如图1TEE与Android系统共存架构:图1TEE与Android系统共存架构。安全端(Secure)的一半是TEE系统。市面上的TEE系统有很多,比如高通的QSEE、Trustonic、开源的OPTEE。图中的EL0、EL1、EL3是ARM架构中的异常级别。必须实现EL0和EL1。可以大致认为EL0是应用层,EL1是系统内核层。最重要的是REE端的EL1需要DeployTEE相关的驱动,REE端最终通过驱动与后面提到的EL3进行通信,进而完成一些功能。EL2主要提供对虚拟化的支持,本文忽略EL2。EL3是比较重要的部分,它提供了REE端(Non-secure)和安全端(Secure)之间的功能切换。从图中也可以看出,只有EL3跨越了REE侧和安全侧,从而为两个系统提供了一个通信接口。比如我们常用的指纹功能和支付功能,都需要REE端和安全端的交互。后面的内容中,我会给大家详细讲解两个系统之间的通信。ARM提供的Trustzone白皮书中提到,为了让系统更加健壮,建议在EL3中执行Monitor模式,禁止中断。2.SMC这里要强调一下,TEE系统和Android系统是两个完全独立的系统,这两个系统是独立运行的。但实际上,这两个系统需要进行通信。比如我们在锁屏或者指纹解锁的时候,就需要Android系统和TEE系统的配合。通过SMC命令完成通讯。就是触发一个SMC中断(如下图2红框所示),让Android或者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端传输数据时,谁来申请共享内存?在回答这个问题之前,需要先介绍一个会话术语,TEE端和REE端通信之前,需要先建立一个Session。当REE端建立Session后,共享内存就准备好了。之后无论数据从哪里传过来,都使用之前准备好的共享内存。如果有机会看一下CA(REE端的可执行程序)的代码,会发现会先建立Session,然后才能进行相应的业务处理。目前市场上有不同的TEE厂商,在实现细节上可能存在一些差异,但思路是一致的。4.库一般TEE厂商都会为我们提供TEE相关的库,通过调用相应的TEE驱动来完成各种功能。通常,在开发需要TEE环境的程序时,最好找相应的TEE厂商提供demo。有了这个demo,我们就知道如何基于相应的TEE开发程序了。5.GP我在和一些安卓朋友交流的时候,发现他们要么不知道TEE,要么知道TEE,但是不知道GP。试想一下,市面上有很多TEE厂商,比如大家熟悉的pods、Trustonic等,每家都有自己独特的API接口,所以对于一些基于TEE的功能,比如指纹、支付等,是否有必要针对每个TEE需要进行不同的调整?GP的全称是GlobalPlatform,提供一些安全相关的API需求。如果所有项目都采用GP的方式,那么基于TEE的模块(比如常见的指纹、支付等),不需要做大的改动,并且在与此类供应商沟通时,需要告知供应商是否当前项目使用GP接口。综上所述,我介绍了我们需要知道的五大要素。至此,让我们考虑一下。如果我的项目需要添加指纹功能,我需要做什么?TEE环境的部署包括TEE系统本身、Monitor、REE端与TEE相关的驱动、库等,其他细节可以和TEE供应商沟通。与指纹厂商沟通,告知他们项目中使用的TEE系统和TEE版本是否使用GP接口,项目中使用的指纹设备型号等。本文我将TEE拆分为五个要素,但实际上,TEE系统远比本文介绍的要复杂。希望通过这篇文章,你可以对TEE有一个大概的了解。在此基础上,可以继续深入学习。笔者介绍赵庆尧,51CTO社区编辑,从事驱动开发多年。他的研究兴趣包括安全操作系统和网络安全,并发表了与网络相关的专利。
