TEE 应用开发入门|学习笔记

简介: 快速学习 TEE 应用开发入门。

开发者学堂课程【阿里云物联网安全:TEE 应用开发入门】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/570/detail/7772


TEE 应用开发入门


内容介绍:

一、 回顾

二、 REE 和 TEE 的交互原理

三、 CA 与 TA 建立联系的四个基本要素

四、 通过GP API 具体函数调用角度介绍 REE 和 TEE 的交互原理

五、参考和引用

 

一、回顾

处理器分为两个状态,正常态和安全态,正常态对应 REE 侧,安全态对应 TEE侧,两种状态下,按照特权级由低到高的顺序依次有用户模式、内核模式、monitor模式。

 

二、REE 和 TEE 的交互原理

image.png

以 RAMv7架构为例,如图所示,从 CA 调用到 TA 需要五个步骤。首先,CA 调用 GP 标准定义的 Client API 接口从user 模式进入到 REE 侧的 kernel 模式,在 kernel 模式下通过 SMC 指令切换到 monitor 模式,monitor 模式是处理器的最高特权模式,因此,monitor 本身就处在了安全态,此时处理器已处在安全态。

再从 monitor 模式切换到安全模式下的kernel模式,TEE 运行在该模式下会根据 CA 传递过来的 TA UID 加载对应的TA,再切换到安全态下的 user 模式继续运行。

在 TA 侧也有GP 定义的标准接口,称为 Internal API,包含算法、内存、TA 交互调用等通用功能。

TA 会根据 CA 传递过来的秘密 ID 以及共享内存的内容完成相关的任务后重新返回值,再通过 syscall 返回 TEE OS,同样 TEE OS 会通过 SMC call 指令返回 monitor 模式,再用 monitor 切换到正常态下的 kernel 模式,接下来返回到上层的 user 模式,这时 CA 就可以通过返回值和更新后的内存内容来获取 TA 的处理结果。


三、 CA 与 TA 建立联系的四个基本要素

1、UUID:TA 的唯一标识码,CA 需要告诉 TEE 正常的 UUID 才能和 TA 建立联系。

2、Context:建立的基础,用来保存 CA 与 TEE之间的上下文。

3、Session:在 Context 中可添加,用来保存 CA 与特定 TA 的会话。

4、Shared Memory:在 Session 中可添加,连接 CA 和 TA 之间的共享内存,用于两者之间数据交互。

 

四、通过 GP API 具体函数调用角度介绍 REE 和 TEE 的交互原理

GP API 函数调用顺序:

1、调用 TEEC Initialize Context 创建 CA 与 TEE 之间的上下文。

2、通过 TEEC OpenSession 传入对应的 UIID,创建 CA 与对应 TA 的会话。

3、如果在交互过程中需要用到共享内存,则通过 TEEC AllocateShareMemory 创建 CA 和 TA 之间的内存。

4、通过调用 TEEC InvokeCommand 对应的 Command ID 以及共享内存的起始地址和大小,等 TA 处理完对应秘密ID 的过程后,结果通过该行数直接返回。

接下来的三步是对1-3步的清理流程:

1、释放共享内存

2、关闭 CA/TA 会话

3、清空 Context

注:在开发 CA 过程中,需要保证行数的成对使用,以防止内存泄漏或无法创建新的 CA/TA 会话等。

TA的代码相对更简单些,在 TA 内部,会有 CA 对应侧的行数对应入口,比如 CA 调用完 TEE C OpenSession 后,TEE OS 会进入 TA-OpenSessionEntryPoint  里完成 TA 对应初始化相应内容。

当 CA 侧调用 TEEC-Invoke Command 时,会对 TA 的函数入口 TA-Invoke CommandEntry Point,在该函数里,需要根据 Command ID 来实现对应的处理内容。

相关文章
|
4月前
|
人工智能 JavaScript Go
介绍 Agency: 使AI与Go语言无缝对接
介绍 Agency: 使AI与Go语言无缝对接
|
7月前
|
存储 运维 Linux
精彩推荐 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
在使用Docker时,管理维护工作可能会显得复杂。然而,实际上,Docker提供了许多便捷且人性化的工具,这些工具的使用技巧可以大大简化维护工作,并提升效率。通过掌握这些技巧,你不仅能够更轻松地管理Docker环境,还能展现出专业的能力。接下来我们就给大家介绍一下对于我在工作当中对于Docker容器使用的技术实战总结
84 2
精彩推荐 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
|
7月前
|
Cloud Native Shell Linux
云原生专题 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
云原生专题 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
97 0
|
7月前
|
Cloud Native Linux 虚拟化
云原生专题 |【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(底层实现系列)
云原生专题 |【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(底层实现系列)
206 0
|
7月前
|
虚拟化 开发者 Docker
深入浅出:利用Docker容器化技术加速Web开发流程
在本篇文章中,我们将探讨Docker容器化技术如何为Web开发带来革命性的效率提升。通过具体案例和实操示范,我们不仅会介绍Docker的基本概念和工作原理,还将深入分析如何利用Docker容器化技术简化开发环境的搭建、提高应用的可移植性以及加快部署速度。本文旨在为读者提供一种全新的视角,理解并实践如何通过Docker优化现代Web开发流程,无论是对于个人开发者还是团队项目,都将带来前所未有的便捷和效率。
|
人工智能 算法 开发者
《AI开发者的Docker实践》电子版地址
本文档主要面向算法开发同学,从0基础实现将代码打包docker镜像-调试-提交仓库-提交云服务训练模型/天池大赛提交/学校服务器训练 等流程。也同样适用于初次接触docker的同学,帮助大家快速上手大赛提交和远程服务器训练。
75 0
《AI开发者的Docker实践》电子版地址
|
Ubuntu Linux 开发工具
Yoc应用开发 | 学习笔记
快速学习Yoc应用开发
Yoc应用开发 | 学习笔记
|
Cloud Native 前端开发 Go
探索 Golang 云原生游戏服务器开发,5 分钟上手 Nano 游戏服务器框架
探索 Golang 云原生游戏服务器开发,5 分钟上手 Nano 游戏服务器框架
584 0
|
运维 Java API
阿里云开发者学堂配套教材《JVM实战》开放下载
Java虚拟机不仅是一种跨平台的软件,而且是一种新的网络计算平台。该平台包括许多相关的技术,如符合开放接口标准的各种API、优化技术等。
阿里云开发者学堂配套教材《JVM实战》开放下载
|
人工智能 并行计算 Shell