一、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 内核黑科技 | 技术文章 | 精选教程

TEE原理及应用举例相关推荐

  1. CRC循环校验码原理及计算举例

    循环冗余校验码(CRC),简称循环码,是一种常用的.具有检错.纠错能力的校验码,在早期的通信中运用广泛.通过某种数学运算来建立数据位和校验位的约定关系.这种数学运算就是"模2除法" ...

  2. [图] AOE网-关键路径|关键活动-原理、手算举例、C语言实现

    文章目录 AOE网 AOE的应用(AOE的相关概念) 原理:求关键活动和关键路径 求ve.vl(顶点) 求ee.el(边) 求关键路径,关键活动 手算举例 C语言实现 AOE网 [有向无环图]活动在边 ...

  3. 机器学习——使用ID3算法从原理到实际举例理解决策树

    文章目录 一.什么是决策树 二.介绍建立决策树的算法 三.决策树的一般流程 四.实际举例构建决策树 使用ID3算法的原理实现构建决策树 参考链接 一.什么是决策树 基本概念 决策树是一种树形结构,其组 ...

  4. mysql数据库sql注入原理_SQL注入原理解析以及举例1

    sql注入是指web应用程序对用户输入数据的合法性没有判断,导致攻击者可以构造不同的sql语句来实现对数据库的操作. sql注入漏洞产生满足条件: 1:用户能够控制数据的输入. 2:原本需要执行的代码 ...

  5. 安卓中adb命令工作的底层原理及使用举例

    目录 1. adb安卓调试桥 2.adb的组成 3.adb命令的使用举例: 3.1什么是应用包?什么是应用界面? 3.2 adb 命令如何获取应用应用包名和应用界面名? 1. adb安卓调试桥 adb ...

  6. TEE 开发入门知识

    一.TEE GP规范文档合集 参考书籍:<手机安全和可信应用开发指南> 参考博客:TEE原理及应用举例 参考规范:GPD TEE API Specification合集下载 官方规范文档地 ...

  7. 苏大微型计算机原理与应用题库,苏州大学计算机原理及应用考研复习题.pdf

    苏州大学计算机原理及应用考研复习题.pdf 专业课复习资料(最新版)专业课复习资料(最新版) 封封 面面 复习题 1复习题 1 判断指令是否正确判断指令是否正确 1. MOV AH,BX(F) 2. ...

  8. HBase运维基础——元数据逆向修复原理

    摘要: 鉴于上次一篇文章--"云HBase小组成功抢救某公司自建HBase集群,挽救30+T数据"的读者反馈,对HBase的逆向工程比较感兴趣,并咨询如何使用相应工具进行运维等等. ...

  9. 机器学习爬大树之(GBDT原理)--回归篇

     集成学习(ensemble learning)想必应该是最为火爆的机器学习算法了,它通过构建并结合多个学习器来完成学习任务:类似于我们长说的"采百家之长",目前的集成学习方法大致 ...

最新文章

  1. 五角大楼公布UFO报告,不明飞行物到底是什么?(全文)
  2. QQ相册后台存储架构重构与跨IDC容灾实践
  3. MYSQL查表的字段名称,字段类型,字段长度,字段注释的SQL语句
  4. [计组]寄存器的基本含义
  5. 25q64存储多个数据_一篇文章看懂,存储虚拟化在不同用例中的实践与优势
  6. CodeForces 841C (C) Leha and Function 贪心
  7. Docker容器中常见的十种误区
  8. 职称计算机考试excel内容,2020年职称计算机考试EXCEL试题练习
  9. 海康ehome协议分析(3):PTZ云台控制
  10. 算法:限流之令牌桶算法实现
  11. 小图标下载、gif设计、图片压缩、代码优化
  12. 老哥们着急求助一下:报错ORA-39083,ORA-00001
  13. 国外不良资产证券化经验总结
  14. 读取XML-致冷冽同学
  15. ASEMI快恢复二极管SFP3006和瞬态二极管一样吗?SFP3006和TVS能否代换
  16. Latex编译报错 “Undefined control sequence. \chapter“
  17. n行Python代码系列:三行程序实现从视频截取子窗内容输出
  18. linux xfce占用资源,Xfce之所以大行其道的七大原因
  19. 【抽样技术系列03】分层随机抽样ST
  20. Redis安装和入门

热门文章

  1. json教程从入门到使用
  2. BeautifulSoup 使用
  3. 央视315让AI主播预热,人类主播会失业吗?
  4. VS生成的winform项目各个文件意义和解决方案资源管理器作用
  5. python 吉他_python - 终极吉他API和终极api的使用[关闭] - SO中文参考 - www.soinside.com...
  6. Guitar Pro 如何添加装饰音?
  7. 使用VNC软件与花生壳进行内网穿透实现在嵌入式平台中进行广域网下的远程控制
  8. Android+ESP8266+路由器实现远程控制(基于花生壳域名方式访问)
  9. 短视频矩阵-短视频seo源码开发搭建
  10. 在安装软件时出现,“错误1327。无效驱动器:G: \”