当前位置:首页 >知识 >关于TEE,你需要知道的五大要素 当然除了这两个系统之外

关于TEE,你需要知道的五大要素 当然除了这两个系统之外

2024-06-30 16:19:16 [百科] 来源:避面尹邢网

关于TEE,关于你需要知道的知道五大要素

原创 精选 作者: 赵青窕 移动开发 移动应用 现在手机已经成为我们每个人生活的必需品,那安卓手机的关于安全就成为了最为重要的一部分。

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

关于TEE,你需要知道的五大要素 当然除了这两个系统之外

1.TEE和安卓架构

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

关于TEE,你需要知道的五大要素 当然除了这两个系统之外

关于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 TEE安卓手机安卓手机

(责任编辑:热点)

    推荐文章
    热点阅读