一、TEE GP规范文档合集

参考书籍:《手机安全和可信应用开发指南》

参考博客:TEE原理及应用举例

参考规范:GPD TEE API Specification合集下载

官方规范文档地址

  • Trusted User Interface API v1.0
  • TEE System Architecture v1.3
  • TEE Secure Element API v1.1.2
  • TEE Client API Specification v1.0
  • TEE Internal Core API Specification v1.1

二、TEE 开发入门知识

1. 概述

REE(Rich Execution Environment)富执行环境 是指移动端系统的运行环境,运行的系统称为Rich OS(Rich Operating System),如常见的Android、iOS操作系统。

REE 是一个开放的环境,容易受到恶意软件的攻击,比如 敏感数据被窃取、数字版权被滥用、移动支付被盗用 等。因此,2010年7月 GP(Global Platform,全球平台组织)提出了 TEE (Trusted Execution Environment) 可信执行环境 的设计。

例如:Trusty,就是 Google 基于 ARM 架构的 Trustzone 技术实现的一套运行环境,通过硬件和系统软件层面的隔离,实现 normal worldsecure world,也就是 REE和TEETrustzoneARM-v6 即开始支持,且在 ARM-v8 上增强了secure mode,TrustZone 技术能提供芯片级别对硬件资源的保护和隔离,当前在手机芯片领域已被广泛应用。而Google也规定从 Android M 版本以后所有的 人脸、指纹、虹膜识别 的隐私数据都需要使用TEE环境进行安全保护,否则无法通过Google的 CTS认证授权

TEE 是一个与 REE 并存运行的独立执行环境,它具有自身完全可信的执行空间,即使设备被 root 也依旧安全,它可以访问设备主处理器和内存的全部功能,但完全隔离。Trusted OSRich OS 的安全级别更高,因此为Rich OS提供安全服务,如 指纹的录入比对、支付校验认证 等操作。

ARM-v8 上的 Trustzone 技术

2. OP-TEE

OP-TEE 由非营利的开源软件工程公司 Linaro 按照 GP规范 开发,所有源代码均可在 Github 上下载到。支持 QEMU、Hikey(Linaro推广的96Board系列平台之一,使用Hisilicon处理器)以及其他通用的 ARMv7/ARMv8 平台,开发环境搭建方便,便于开发者开发自有的 上层可信应用 ,且OP-TEE提供了完整的 SDK ,方便编译 TA和CA

OP-TEE 遵循 GP规范 ,支持各种 加解密和电子签名验签算法 以便实现 DRM、在线支付、指纹和虹膜识别 功能。OP-TEE 也支持在芯片中集成第三方的硬件加解密算法。除此之外,在 IoT和车载芯片 领域也大都使用 OP-TEE 作为TEE解决方案。

3. TEE Internal Core API Specification

常用术语概念

术语    |               全称             |       解释
-----   | ----------------------------  | --------------- REE    | Rich Execution Environment    |      富执行环境    TEE    | Trusted Execution Environment |  可信任执行环境   GP     |   Global Platform             |  全球平台组织SE     |   Secure Element              |
Client  |        指REE端                  |
Trusty  |        指TEE端                 |CA      |   Client Application          |  运行在REE上的应用程序TA     | Trusted Application         |  运行在TEE上的应用程序UUID   | Universally Unique Identifier |  TA的通用唯一身份标识符CA 与 TA 交互规范中的名词概念:
Contexts            | 上下文             | CA与TA连接使用的上下文,用于打开会话,TEEC_InitializeContext
Session             | 会话              | 发送命令的通道,TEEC_OpenSession
Commands            | 命令              | 通过指定命令ID,CA向TA发送实际指令
Share Memroy        | 共享内存        | CA和TEE之间数据交互的区域
Memory References   | 共享内存区       | 固定范围的共享内存块
UUID                | 通用唯一身份标识   | TA的身份标识ID,用于CA调用某TA时,TEE通过UUID启动某TA镜像Panic                 |
Task                    |
Command Identifier      | 命令标识符,一个32位的整型数
Single Instance Trusted Application  | 单实例运行环境
Multi  Instance Trusted Application  | 多实例运行环境加解密或摘要算法:
CMAC | Cipher-based Message Authentication Code
HMAC | Hash-based Message Authentication Code
AE   | Authenticated Encryption
AES  | Advanced Encryption Standard
DES  | Data Encryption Standard
RSA  | Rivest,Shamir,Adleman asymmetric algorithm
MD5  | Message Digest 5
SHA  | Secure Hash Algorithm

CA与TA之间的关系

CA 即执行在 REE 中的 普通应用程序TA 则是执行在 TEE 中的 完全被信任安全程序。涉及到安全方面的操作时(如:人脸比对、指纹校验),CA就需要与TA交互,从TA中获取到结果。


REE中的系统结构:

CA(Client Application)对应 REE 层应用,比如指纹采集、支付能力等,通过调用 TEE Client API 实现与 TA 进行交互。CA通过接口让TA完成工作,完成对应功能然后返回计算结果,CA不需关心计算过程。

REE Communication Agent 为TA和CA之间的消息传递提供了REE支持

TEE Client API 是REE中的TEE驱动程序提供给外部的接口,用于 CATA 交互。


TEE中的系统结构:

TA(Trusted Application)是TEE中完成特定功能的应用。由于TEE中完成计算因此具有较高的安全性。每一个TA在REE中有一个或者多个对应的CA。TEE Internal Core API 则是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通过共享内存来快速有效传输指令和数据



三、TEE软件交互接口定义

下面是TEE的软件交互流程,使用GlobalPlatform组织定义的 GP API 接口。

CA与TA通信需要使用下列接口完成整个会话流程:

CA侧接口如下:

  • TEEC_InitializeContext / TEEC_FinalizeContext:

    对变量Context进行初始化和释放,用来建立和结束CA和TEE的联系,向TEE申请共享内存地址用于存放数据。

  • TEEC_OpenSession / TEEC_CloseSession:

    建立和关闭一个CA和TA间的session,用于CA和UUID指定的TA进行通信,是CA连接TA的起始点和终点。

  • TEEC_InvokeCommand:

    依靠打开的session,将传送命令请求给TA,并将必要的指令执行参数一并发送给TA。

  • TEEC_RegisterSharedMemory / TEEC_ReleaseSharedMemory:

  • TEEC_AllocateSharedMemory / TEEC_ReleaseSharedMemory:

    同样是申请共享内存缓冲区,为更接近实现 零拷贝数据传输TEEC_AllocateSharedMemory 是首选,其次才是 TEEC_RegisterSharedMemory。共享内存是由 REE 拥有 并映射到 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 发送 Commands。

4)Commands 及其参数会通过共享内存的方式传递,TA 从共享内存中获取到 CA 的请求以及请求参数。

5)TA 在 TEE 环境下执行处理,得到的处理结果重新填充到共享内存中,CA 通过共享内存就可以获取到处理结果。

6)获得处理结果后,如不需要进一步请求,则由 CA 发起关闭 Session 的请求,Trusted OS 回收 TA 相关资源,最后 CA 发起销毁 Context 的请求,完成一次完整交互。

交互原理:

CA 通过调用 TEE Client API 触发系统调用,进入 REE 的操作系统内核态,系统根据 CA 的入参来找到需要执行的 REE 驱动程序,REE驱动程序通过 SMC (secure monitor call,安全监控模式调用) 汇编指令进入 Monitor模式,并修改 安全状态读写信号位(Non-secure bit,NS bit)将CPU切换到安全内核状态(改变寄存器最后1bit为0,1为非安全),进入 secure world

切换到 TEE 后,CA 的服务请求通过 Binder 传到TEE侧,然后 TEE OS 通过 TEE Internal API 拉起对应的 TATA 运行结束后将结果和数据返回给 CA 。执行完后回到 TEE内核态,再通过 SMC 汇编指令进入 Monitor 切换到 REE 环境。

TEE 开发入门知识相关推荐

  1. 移动H5开发入门知识,CSS的单位汇总与用法

    说到css的单位,大家应该首先想到的是px,也就是像素,我们在网页布局中一般都是用px,但是近年来自适应网页布局越来越多,em和百分比也经常用到了.然后随着手机的流行,web app和hybrid a ...

  2. 第一章 51单片机开发入门知识介绍

    第一章 单片机开发入门知识介绍 1.1 51单片机介绍 51单片机是对所有兼容Intel 8031指令系统的单片机的统称. 该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技 ...

  3. QGIS开发入门知识

    坐标系基础知识 QGIS图层数据接口类源码解析 QgisPlugin插件开发 1. 基础知识 QGIS是一个开源的基础地理信息系统平台软件,是在 GNU 公共许可证 (GPL) 版本 2 或更高版本下 ...

  4. html5移动开发入门知识

    1.先来看淘宝无线wiki要求在页面中添加的meta标签. <meta content="width=device-width, initial-scale=1.0, maximum- ...

  5. 网游服务端开发入门知识

    本文版权归 博客园 游戏开发:主席 所有,转载请标明原创作者及出处,以示尊重! 作者:游戏开发:主席 原文:http://www.cnblogs.com/GameDeveloper/archive/2 ...

  6. js 串口通信mscomm接收undefined_VB串口通信应用开发入门知识讲解

    VB是一门功能强大.简单易学的程序语言.它可以方便快捷地编制适用于数据处理.多媒体等方面的程序,而且利用ActiveX控件中的MSComm部件还能十分方便地开发出使用计算机串口的通信程序. 今天,我们 ...

  7. 51单片机程序开发入门知识

    51单片机在我的理解上来说,就是遵循51指令集工作的芯片.他就像一台超微型的电脑,里面有内存.硬盘.CPU等基本配备. 而他所谓的CPU使用的就是51指令集,他的硬盘就是内置的Flash,他的内存也是 ...

  8. iOS开发入门知识归纳

      四.iOS-UI基础 1.UI控件介绍 2.UI布局-屏幕适配 五.iOS-多线程基础 六.iOS-网络处理 七.iOS-数据持久化详细介绍 八.iOS--知识综合应用成就时髦小功能点 转载于:h ...

  9. Web前端开发入门之网页制作三要素!

    Web前端开发是由网页制作演变而来的,主要由HTML.CSS.JavaScript三大要素组成.专业的Web前端开发入门知识也一定会包含这些内容,今天小千就给大家简单介绍一下. HTML,超文本标记语 ...

最新文章

  1. Shell脚本基础介绍
  2. 分区视图(转自小春BOOK)
  3. Android发送邮件
  4. 2020-06-15 有理分式矩阵及其互质分解
  5. 【白话机器学习】算法理论+实战之K近邻算法
  6. 《每日一题》738. Monotone Increasing Digits 单调递增的数字
  7. Java面向对象(3.1)--方法的重载,可变个数的形参,值传递机制,递归
  8. Hexo 博客自定义一个不使用主题模板渲染的独立页面
  9. 干支纪年法简便算法_@谢氏宗亲:可知道我国为何放弃黄帝纪年,而选择耶稣诞辰纪年法...
  10. 安卓马赛克view_Android马赛克效果MosaicView
  11. Hadoop云计算大数据书籍分享
  12. S35VB100-ASEMI日本新电元平替整流桥S35VB100
  13. Intent.ACTION_VIEW
  14. 注意PHP的下一个千年虫:Y2K38
  15. Docker swarm搭建及常用命令、yml文件
  16. 360极速了浏览器 HTML5的浏览器,360极速浏览器4大HTML5特性 领先全球
  17. 转自51cto(http://smailes.blog.51cto.com/rss.php?uid=28248)
  18. 中科院大牛博士是如何进行文献检索和阅读
  19. java手机appium的move方法_appium移动自动化详解
  20. 【愚公系列】2022年01月 MinIO文件存储服务器-客户端创建和桶操作(Python版)

热门文章

  1. MinGW、MSYS、Cygwin、Git Bash Shell
  2. 【Python】python通配符,使用通配符进行字符串匹配
  3. mysql团购活动报名_社区团购平台如何策划营销活动
  4. CSS实现侧边栏导航
  5. 央视315让AI主播预热,人类主播会失业吗?
  6. 排序算法10——图解基数排序(次位优先法LSD和主位优先法MSD)
  7. 2008服务器系统启动不了网,活用Windows Server 2008命令 解决网络疑难杂症
  8. olist巴西电商数据分析项目 sql+tableau
  9. c语言简单木马源代码,【C语言】后台木马程序
  10. python培训机构调研最多的股票_使用python爬取东方财富网机构调研数据