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 来实现对应的处理内容。

相关文章
|
资源调度 前端开发 JavaScript
开源项目:Linux系统docker安装jeecg-boot低代码开发平台(更新于2022.2.14)
开源项目:Linux系统docker安装jeecg-boot低代码开发平台(更新于2022.2.14)
611 0
开源项目:Linux系统docker安装jeecg-boot低代码开发平台(更新于2022.2.14)
|
3月前
|
运维 数据安全/隐私保护 Docker
深入浅出Python装饰器《Docker容器化技术在运维中的应用与实践》
【8月更文挑战第29天】装饰器在Python中是一个强大而神秘的存在,它能够轻松地改变一个函数的行为而不修改其源代码。本文将通过浅显易懂的语言和生动的比喻,带你一步步揭开装饰器的神秘面纱,从基本概念到实际应用,让你轻松掌握这一魔法般的工具。
|
3月前
|
Kubernetes Linux 开发者
【实战秘籍】从零开始:用.NET与Docker打造现代化容器化应用之旅
【8月更文挑战第28天】本文详细介绍如何使用 .NET 框架构建并部署 Docker 容器化应用程序,涵盖环境搭建、项目创建、Dockerfile 编写等关键步骤。首先安装必要软件,如 Visual Studio 2022 及 Docker Desktop。接着创建 .NET Core 控制台应用,并在项目根目录编写 Dockerfile 文件。使用 .NET 运行时基础镜像,复制二进制文件,指定入口点。运行命令构建镜像并测试容器。为实现通信,映射端口。最后,标签化镜像并推送到 Docker Hub,为生产环境部署做好准备。掌握这些步骤,即可轻松应对从小型项目到大规模应用的各种需求。
142 0
|
缓存 JavaScript 安全
Docker学习路线12:开发者体验
到目前为止,我们只讨论了使用Docker来部署应用程序。然而,Docker也是一个极好的用于开发应用程序的工具。可以采用一些不同的建议来改善开发体验。
132 2
|
6月前
|
Cloud Native Shell Linux
云原生专题 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
云原生专题 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
85 0
|
6月前
|
虚拟化 开发者 Docker
深入浅出:利用Docker容器化技术加速Web开发流程
在本篇文章中,我们将探讨Docker容器化技术如何为Web开发带来革命性的效率提升。通过具体案例和实操示范,我们不仅会介绍Docker的基本概念和工作原理,还将深入分析如何利用Docker容器化技术简化开发环境的搭建、提高应用的可移植性以及加快部署速度。本文旨在为读者提供一种全新的视角,理解并实践如何通过Docker优化现代Web开发流程,无论是对于个人开发者还是团队项目,都将带来前所未有的便捷和效率。
|
6月前
|
Ubuntu 应用服务中间件 nginx
Docker入门指南:从基础到实践
在当今软件开发领域,Docker已经成为一种不可或缺的工具。通过将应用程序及其依赖项打包成轻量级的容器,Docker实现了开发、测试和部署的高度一致性。本文将深入研究Docker的基本概念,并通过详细的示例代码演示如何应用这些概念于实际场景中。
|
人工智能 算法 开发者
《AI开发者的Docker实践》电子版地址
本文档主要面向算法开发同学,从0基础实现将代码打包docker镜像-调试-提交仓库-提交云服务训练模型/天池大赛提交/学校服务器训练 等流程。也同样适用于初次接触docker的同学,帮助大家快速上手大赛提交和远程服务器训练。
73 0
《AI开发者的Docker实践》电子版地址
|
应用服务中间件 Linux nginx
企业应用交付Docker镜像进阶实战笔记(上)
企业应用交付Docker镜像进阶实战笔记
106 0
企业应用交付Docker镜像进阶实战笔记(上)
|
Ubuntu Linux 开发工具
Yoc应用开发 | 学习笔记
快速学习Yoc应用开发
Yoc应用开发 | 学习笔记
下一篇
无影云桌面