了解 TEE OS

关于本文,是一篇会议纪要,会议主题是《从 Linux Kernel 角度看 TEE》,主讲人是周贺贺。它适用于嵌入式系统开发/驱动开发/内核设计/安全业务设计从业者,目的是让自己掌握 TEE 基本概念,知道大系统软件架构。同时也解答下面几个问题

  • armv7 有几种模式?
  • armv8/armv9 有几种安全状态?
  • 现在的手机上都是双操作系统吗
  • 什么是 IRQ,FIQ?
  • 什么是 TEE,什么是 TEE OS?

1 软件/安全架构

学习 Trustzone/TEE ,其实就是学习 arm 架构,建议选择新架构而不是早期架构,比如 armv8-aarch64 和 armv9 来进行学习。

1.1 软件架构(2022)

![[202209172011.png]]

1)两个执行状态:Non-secure 状态;Secure 状态

2)四个安全等级:PL0,PL1,PL2,PL3

1…2 发展历程(2002…2022)

在这里插入图片描述

1)发展历程:Trustzone -> Hypervisor(EL2) -> S-EL2 -> FF-A -> CCA(RME) -> …

2)演变趋势:越来越复杂,也理解操作系统的权限越来越小(最小特权原则)

1.3 主流架构(2022)

在这里插入图片描述

1)TEE 是可信执行环境,运行在 secure 侧的所有程序;TEE OS 特指运行在 secure 侧的 OS

2)从 Kernel 的角度看,业务可能会从 non-secure 侧切换到 secure 侧,这样就让内核开发从白盒变黑盒

1.4 Secure boot 模型

在这里插入图片描述

1)BL1: 是 BootROM,它的其中一个功能是加载 BL2 镜像到内存,并启动 BL2

2)BL2:用于加载并验证 BL31/BL32/BL33 镜像到内存

3)BL31: 是 ATF,维持 Runtime 状态,用于切换 CPU 上下文(BL32 和 BL33)

4)BL32: 进入 secure 状态,干活

5)BL33:进入 non-secure 状态,干活

1.5 Runtime 模型

在这里插入图片描述

1)双操作系统,分别指 non-secure 侧的非安全状态和 secure 侧的安全状态

2)ATF(BL31)是运行时的一段程序,用于切换上下文

3)通信机制:apps <–> libteec.so <–> tee_driver <–> opteed <–> optee_os <–> TAs

2 TEE 与内核相关

2.1 交互接口

在这里插入图片描述

1)对于业务开发商,需要进行安全业务设计,比如基于 SDK 调用 API 接口,或者开发设备 Driver

2)对于 TEE 厂商,需要客制化 TEE 驱动,实现安全操作

2.2 内存隔离

在这里插入图片描述

1)内存隔离:secure 空间和 non-secure 空间不是同一个虚拟地址空间。

2.3 调度模型

在这里插入图片描述

1)一个模式是 user 线程调用 TEE 库

2)另一个模式是 user 线程 进入 kernel 线程,然后通过 tee_work 线程统一调用 TEE

3)即使线程 Normal 切换到 Secure 状态,不影响 kernel 线程调度(从 Kernel 的视角,随时将线程从 TEE 状态唤醒)

3 标准和规范

在这里插入图片描述

1)GP:应用角度只需要了解这个规范,关于如何使用 API

2)PSCI:启动从核时,对 Power 的标准与约束

3)FF-A:关于运行时如何切换,如何启动相关标准

4)SMCCC:规范 smc_abi ,约束 TEE 厂商和 SOC 厂商的接口和使用

5)SEDI:关于系统资源的规范,不介绍

6)SCMI:关于系统资源的规范,不介绍

3.1 示例:多核启动

在这里插入图片描述

1)启动从核:Linux Kernel 发出请求

2)EL3 初始化:N/A

3)S-EL1&0 初始化:N/A

Logo

更多推荐