RK3568 Trust
文章目录
- 1、环境介绍
- 2、前言
- 3、ARM TrustZone
- 3.1、什么是ARM TrustZone
- 3.2、cpu特权等级
- 3.3、ARM Trusted Firmware
- 4、Rockchip 平台的 Trust
- 4.1、实现机制
- 4.2、启动流程
- 4.3、生命周期
- 4.4、Trust 编译打包流程分析
- 5、总结
1、环境介绍
硬件:飞凌ok3568-c开发板
软件:原厂rk356x sdk(Linux)
2、前言
最开始的目的是为了了解 RK3568 的安全启动,但在学习过程中不小心先了解了 Rockchip Trust。后来发现,安全启动本身的实现并不依赖 Trust。不过,Trust 的存在可以在系统运行时提供更细粒度的安全保障,使得整体安全策略更完善。
关于 Rockchip 平台上 Trust 的实现和作用,在官方文档《Rockchip_Developer_Guide_Trust_CN.pdf》
已有详细介绍。本文主要记录个人学习后的总结。
3、ARM TrustZone
在此之前,需要先理清ARM TrustZone、cpu特权等级、ARM Trusted Firmware、OP-TEE OS等名词概念,可以直接参考《Rockchip_Developer_Guide_Trust_CN.pdf》
,本章节仅做个小结。
3.1、什么是ARM TrustZone
ARM TrustZone是一个硬件机制,是ARM公司在CPU和SoC中提供的一种硬件安全扩展机制
。
核心思想就是把一个系统划分成安全世界 (Secure World) 和非安全世界 (Normal World)。安全世界可以访问所有资源(安全 + 非安全),非安全世界只能访问属于自己的资源,尝试访问安全资源会被硬件阻止。
3.2、cpu特权等级
CPU 特权等级(Exception Level,EL) 定义了 CPU 执行代码的权限级别。系统中运行的每个任务都有一个对应的特权等级,用来表示它的权限大小。不同 EL 可以访问的资源和可执行的指令不同,EL 越高权限越大。对于 AArch64(64 位 ARM)架构,CPU 特权等级主要分为 EL0~EL3:
- EL0:用户态应用,权限最小,只能访问普通资源。
- EL1:内核态,权限较高,可访问系统资源和控制硬件。
- EL2:Hypervisor(虚拟化管理),管理虚拟机。
- EL3:Secure Monitor,权限最高,负责安全/非安全世界切换。
3.3、ARM Trusted Firmware
上面提到ARM TrustZone是硬件层面的,有了硬件隔离,还需要软件来管理和使用:
- ARM Trusted Firmware (TF-A): 是 ARM 官方提供的一套开源固件,运行在 EL3(最高特权级),提供“世界切换”的管理程序 Secure Monitor。
- OP-TEE OS: 是一个轻量级操作系统,专门运行在安全世界 EL1,提供安全服务,比如密钥管理、加密、认证。
- 普通 OS(Linux/Android):运行在非安全世界,只能通过调用(SMC 指令)去请求安全服务。
所以,TrustZone 提供硬件隔离。TF-A 和 OP-TEE 在这个硬件基础上,形成了安全执行环境。
4、Rockchip 平台的 Trust
首先,如何理解 Trust 呢? Trust 是一套安全机制和软件实现,它基于 ARM TrustZone 的硬件隔离特性,将系统划分为安全世界和非安全世界,也就是上面提到的那些内容。因此,在讨论 Rockchip 平台的 Trust 时,实际上就是在讨论 Rockchip 对安全世界的实现及管理方式。
4.1、实现机制
目前 Rockchip 平台上的 64 位 SoC 平台上使用的是 ARM Trusted Firmware + OP-TEE OS 的组合;32位 SoC 平台上使用的是 OP-TEE OS。
4.2、启动流程
ARM Trusted Firmware 的体系架构里将整个系统分成四种安全等级,分别为:EL0、EL1、EL2、EL3。将整个安全启动的流程阶段定义为:BL1、BL2、BL31、BL32、BL33,其中 ARM Trusted Firmware 自身的源代码里提供了 BL1、BL2、BL31 的功能。Rockchip 平台仅使用了其中的 BL31 的功能,BL1 和 BL2 是rk自己实现的一套方案。所以在 Rockchip 平台上我们一般也可以“ 默认” ARM Trusted Firmware 指的就是 BL31,而 BL32 使用的则是 OP-TEE OS。
如果把上述这种阶段定义映射到 Rockchip 的平台各级固件上,对应关系为:Maskrom(BL1)、Loader (BL2)、Trust(BL31:ARM Trusted Firmware + BL32:OP-TEE OS)、U-Boot(BL33)。
固件启动顺序:
Maskrom -> Loader -> Trust -> U-Boot -> kernel
4.3、生命周期
Trust 自上电初始化之后就始终常驻于内存之中,完成着自己的使命。
4.4、Trust 编译打包流程分析
rk提供了闭源的BL31(ATF)、BL32(OP-TEE),位于:
# BL31
<sdk>/rkbin/bin/rk35/rk3568_bl31_v1.44.elf
# BL32
<sdk>/rkbin/bin/rk35/rk3568_bl32_v2.11.bin
由<sdk>/rkbin/RKTRUST/RK3568TRUST.ini
指定,uboot编译过程中会用到该文件:
目前,rk uboot镜像默认打包方式走的是FIT(Flattened Image Tree)
,即根据.its
文件打包成.itb
。
its文件位于:
<sdk>/u-boot/fit/u-boot.its
/** Copyright (C) 2020 Rockchip Electronic Co.,Ltd** Simple U-boot fit source file containing ATF/OP-TEE/U-Boot/dtb/MCU*//dts-v1/;/ {description = "FIT Image with ATF/OP-TEE/U-Boot/MCU";#address-cells = <1>;images {uboot {description = "U-Boot";data = /incbin/("u-boot-nodtb.bin");type = "standalone";arch = "arm64";os = "U-Boot";compression = "none";load = <0x00a00000>;hash {algo = "sha256";};};atf-1 {description = "ARM Trusted Firmware";data = /incbin/("./bl31_0x00040000.bin");type = "firmware";arch = "arm64";os = "arm-trusted-firmware";compression = "none";load = <0x00040000>;hash {algo = "sha256";};};atf-2 {description = "ARM Trusted Firmware";data = /incbin/("./bl31_0xfdcc1000.bin");type = "firmware";arch = "arm64";os = "arm-trusted-firmware";compression = "none";load = <0xfdcc1000>;hash {algo = "sha256";};};atf-3 {description = "ARM Trusted Firmware";data = /incbin/("./bl31_0x0006b000.bin");type = "firmware";arch = "arm64";os = "arm-trusted-firmware";compression = "none";load = <0x0006b000>;hash {algo = "sha256";};};atf-4 {description = "ARM Trusted Firmware";data = /incbin/("./bl31_0xfdcd0000.bin");type = "firmware";arch = "arm64";os = "arm-trusted-firmware";compression = "none";load = <0xfdcd0000>;hash {algo = "sha256";};};atf-5 {description = "ARM Trusted Firmware";data = /incbin/("./bl31_0xfdcce000.bin");type = "firmware";arch = "arm64";os = "arm-trusted-firmware";compression = "none";load = <0xfdcce000>;hash {algo = "sha256";};};atf-6 {description = "ARM Trusted Firmware";data = /incbin/("./bl31_0x00069000.bin");type = "firmware";arch = "arm64";os = "arm-trusted-firmware";compression = "none";load = <0x00069000>;hash {algo = "sha256";};};optee {description = "OP-TEE";data = /incbin/("tee.bin");type = "firmware";arch = "arm64";os = "op-tee";compression = "none";load = <0x8400000>;hash {algo = "sha256";};};fdt {description = "U-Boot dtb";data = /incbin/("./u-boot.dtb");type = "flat_dt";arch = "arm64";compression = "none";hash {algo = "sha256";};};};configurations {default = "conf";conf {description = "rk3568-evb";rollback-index = <0x0>;firmware = "atf-1";loadables = "uboot", "atf-2", "atf-3", "atf-4", "atf-5", "atf-6", "optee";fdt = "fdt";signature {algo = "sha256,rsa2048";key-name-hint = "dev";sign-images = "fdt", "firmware", "loadables";};};};
};
最后将构建出的u-boot.itb生成成uboot.img:
u-boot.its -> u-boot.itb -> uboot.img
整个uboot的编译涉及的编译脚本如下,可自行分析:
<sdl>/u-boot/make.sh
<sdk>/u-boot/scripts/fit.sh
关于uboot镜像的打包方式在uboot menuconfig中有如下宏开关进行选择:
# FIT打包。默认开启。最后生成uboot.img和loader.bin,其中uboot.img已经包括了ATF和OPTEE
CONFIG_ROCKCHIP_FIT_IMAGE_PACK=y
# DECOMP打包。
CONFIG_SPL_DECOMP_HEADER=n
# 若以上两个选项都不启用,最后生成uboot.img、trust.img、loader.bin。即把trust.img独立了出来。
5、总结
TrustZone 提供了系统运行时的可信执行环境,使得开发者可以保护敏感数据和关键操作。理解 Trust 的存在与作用,有助于开发更安全的应用,也让对芯片安全特性的理解更加完整。
参考文章:
https://zhuanlan.zhihu.com/p/23529470235
rk3568安全启动功能实践_rk3568 安全启动-CSDN博客