赞
踩
关于本文,是一篇会议纪要,会议主题是《从 Linux Kernel 角度看 TEE》,主讲人是周贺贺。它适用于嵌入式系统开发/驱动开发/内核设计/安全业务设计从业者,目的是让自己掌握 TEE 基本概念,知道大系统软件架构。同时也解答下面几个问题
学习 Trustzone/TEE ,其实就是学习 arm 架构,建议选择新架构而不是早期架构,比如 armv8-aarch64 和 armv9 来进行学习。
1)两个执行状态:Non-secure 状态;Secure 状态
2)四个安全等级:PL0,PL1,PL2,PL3
1)发展历程:Trustzone -> Hypervisor(EL2) -> S-EL2 -> FF-A -> CCA(RME) -> …
2)演变趋势:越来越复杂,也理解操作系统的权限越来越小(最小特权原则)
1)TEE 是可信执行环境,运行在 secure 侧的所有程序;TEE OS 特指运行在 secure 侧的 OS
2)从 Kernel 的角度看,业务可能会从 non-secure 侧切换到 secure 侧,这样就让内核开发从白盒变黑盒
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)双操作系统,分别指 non-secure 侧的非安全状态和 secure 侧的安全状态
2)ATF(BL31)是运行时的一段程序,用于切换上下文
3)通信机制:apps <–> libteec.so <–> tee_driver <–> opteed <–> optee_os <–> TAs
1)对于业务开发商,需要进行安全业务设计,比如基于 SDK 调用 API 接口,或者开发设备 Driver
2)对于 TEE 厂商,需要客制化 TEE 驱动,实现安全操作
1)内存隔离:secure 空间和 non-secure 空间不是同一个虚拟地址空间。
1)一个模式是 user 线程调用 TEE 库
2)另一个模式是 user 线程 进入 kernel 线程,然后通过 tee_work 线程统一调用 TEE
3)即使线程 Normal 切换到 Secure 状态,不影响 kernel 线程调度(从 Kernel 的视角,随时将线程从 TEE 状态唤醒)
1)GP:应用角度只需要了解这个规范,关于如何使用 API
2)PSCI:启动从核时,对 Power 的标准与约束
3)FF-A:关于运行时如何切换,如何启动相关标准
4)SMCCC:规范 smc_abi ,约束 TEE 厂商和 SOC 厂商的接口和使用
5)SEDI:关于系统资源的规范,不介绍
6)SCMI:关于系统资源的规范,不介绍
1)启动从核:Linux Kernel 发出请求
2)EL3 初始化:N/A
3)S-EL1&0 初始化:N/A
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。