目录
[oem_root_public area](#oem_root_public area)
[unchecked area for vendor](#unchecked area for vendor)
虽然都是海思的产品,但不同型号在启动方式的控制上有所区别,而目前看到启动方式控制比较全的芯片资料为3403。本文主要记录non-tee及TEE的相关流程。
而TEE除了开源的OP-TEE,目前看海思3403和瑞芯微基于此做的TEE系统。海思有些芯片的TEE是内部自研不对外的。
TEE OS相关我们并不涉及,仅仅清楚其为一个非常简单的OS。REE通过规范的接口可以访问TEE的资源。
但是TEE 存在owner,不同的owner对固件的生成及验签所需要的密钥来源不同,导致安全启动流程可能依赖于海思。
3403安全启动
3403支持的启动类型

芯片使用何种启动方案由 OTP 控制。出厂时,OTP 被默认配置为非安全启动,可通过配置 OTP 来更改启动方案
Non-TEE安全启动流程

TEE安全启动

TEE安全启动布局

第一块为 Boot image,整合了****GSL 和 U-Boot 二进制文件以及 DDR 表格的内
容,布局如图 3-1 所示。
● 第三块为 Linux 内核。
● 第四块为文件系统
问题: 前面三个 public key area是谁生成的?并合成到boot img文件中的?这三个是后面验签的基础 。
答复:
应该编译时生成后两个key area,用密钥生成的,并加密了 。然后启动的时候先用OTP里面的密钥合成实际的密钥,然后解密public key中的内容得到密钥,作为验签基础。
Non-TEE 安全启动的 Boot image 不仅包含了 GSL 镜像和 U-Boot 镜像,还包含了用于保证 Boot image 完整性、合法性和机密性的数据,包括非对称秘钥、对称 秘钥、 MSID 和版本号 等,这些数据由每个区域的 Owner 来管理
oem_root_public area



unchecked area for vendor
该 SCS_simulate_flag 标志为在安全启动情况下,调试 "3.3.5 Boot Flash Mapping"区域预留的一个开关,当 OTP 相应 KEY 等信息位烧写后,OTP 相应的安全启动标志位(字段:secure_boot_en)在未使能的情况下,该标志位生效。其作用为当用户烧写OTP 后,不使能安全启动标志位,可通过配置该标志位模式来模拟使能安全启动标志位的情况进行调试

密钥生成

TEE的使能
本安全启动方案支持对镜像完整性校验,支持使用加密镜像。每一级镜像是否加密,以及使用的加密密钥都可以独立控制 。对于加密的镜像,启动流程遵循先解密后验签 的原则。安全启动方案支持第三方进行再次签名,双重确认 镜像完整性
owner
GSL 为一级 Bootloader。对于 TEE 安全启动,GSL 是一个 TEE 的Bootloader;其他情况下,GSL 仅仅是一个普通的一级 Bootloader。- U-Boot 为二级 Bootloader,客户根据产品需要,可在 U-Boot 中配置、开发对应的功能,如 Flash 驱动,Linux 系统的引导等

此表所示的vendor即为海思,OEM 为你们这些基于3403做板卡的厂商。
可以看到当TEE 时,固件里面有两部分海思 提供的。
SoC 公钥层级架构设计支持芯片启动过程中,从 OTP 根公钥哈希值开始,对每一级镜像进行完整性校验,以及对下一级公钥进行完整性校验。以此实现启动流程中,各个阶段的信任传递。安全启动的验签使用的是 RSA4096 算法和 HASH256
使能及owner配置


TEE 安全启动时,owener 可以配置为OEM ?? 是的。采用这种方式就不需要vendor 厂商提供了!!!
OTP的访问
find ./ -name write_otp_fun.c
./boot/image_map/sample/write_otp_fun.c
./uboot/boot/image_map/sample/write_otp_fun.c
验签流程
下图各部分,主要关注到Non-TEE和TEE owner为OEM时,不需要vendor区域的public key area。也就不需要海思提供相关。而owner为vendor时,验签则需要海思提供。



3559安全启动
TEE默认使能

Root_Public_Key_Area 用于替换fastboot 中的Root_Public_Key_Area,位置为fastboot
中地址偏移0x00-0x200区间
将Root_Public_Key_Hash烧写到芯片OTP中
OTP烧写分两个过程:0
● 芯片使能成安全芯片,并****打开 TEE 能力 ,此步骤在芯片厂商提供的Boot镜像中完成,客户不需要关注。
● 打开安全启动,关闭调试开关,如果有TEE业务需要,可控制TA加载,此步骤需要客户产线完成
签名及验签流程
BOM Management and PCB | Mermaid Chart

TEE文件
3559 的TEE采用下面红色的文件,在工具烧结时需要选择烧结,由海思提供。trustedcore_signed.img 这个文件只有2.89M,即海思的TEE OS 。它本质上是一个运行在 CPU 安全世界中的极简内核,只需要完成几件事:
-
管理安全内存(把敏感数据锁住)
-
提供密码学运算(加密、解密、签名)
-
调度可信应用(指纹比对、支付验证)
-
与普通世界通信(接收来自 Android/iOS 的请求)
| 方案名称 | 主导/主要使用厂商 | 主要应用领域 |
| Kinibi | Trustonic (三星、联发科等大量使用) | 智能手机、汽车、IoT |
| QSEE/QTEE | 高通 (Qualcomm) | 搭载高通骁龙芯片的手机 |
| TrustedCore | 华为 (Huawei) | 华为/荣耀手机及生态设备 |
| TEEOS (鸿蒙) | 华为 (OpenHarmony 社区) | 基于微内核的 TEE OS,目前已部分开源 |
| Mobicore | Trustonic (早期方案) | 较早期的安卓设备 |
|---|
代码
bootloader/source/drivers/otp/cmd/cmd_otp_test.c:76: ret = uapi_otp_get_taid_and_msid(index, &taid[index], &msid[index]);
uapi/otp/basic/source/test_code/otptool.c:744: ret = uapi_otp_get_taid_and_msid(ta_index, &taid, &msid);
密钥
| 分类 | 常见算法/标准 | 作用(含签名/验签标识) | 特点 | 海思 (Hisilicon) 常用算法 | 瑞芯微 (Rockchip) 常用算法 |
|---|---|---|---|---|---|
| 对称加密 | AES, DES, 3DES, SM4, | • 数据加密/解密 (保护机密性) | 单一密钥,加解密快,适合大量数据;密钥分发是难点 | AES (ECB/CBC/CTR/CCM/XTS模式,支持128/192/256位密钥) • 支持SM4 (国密) | AES (硬件加速) • 部分路由/低端型号支持ECB/CBC等模式 |
| 非对称加密 | RSA, ECC (ECDSA), SM2, DSA | • 数据加密 (如加密对称密钥) • ✅ 数字签名/验签 :私钥签名,公钥验签 • 密钥交换 (如ECDH) | 公私钥对,速度慢,适合小数据;安全性高 | RSA (用于安全启动签名验证) • ECC/SM2 (Cipher安全模块支持非对称算法,用于签名验签) | RSA2048 (主流安全启动方案) |
| 哈希算法 (Hash) | SHA-256, SHA-1, MD5, SM3 | • 生成数据指纹 (完整性校验) • ✅ 签名/验签的输入 (先Hash再签名) • 密码存储、HMAC | 单向不可逆,固定输出,防篡改 | SHA-256 (安全启动校验) • SM3 (国密哈希) • MD5/SHA-1 (部分通用计算) |
-
安全启动 :海思芯片(如Hi35xx系列)通常采用RSA 非对称算法进行签名验签。公钥的Hash值会存储在芯片内部的OTP(一次性可编程存储器)中,确保固件不会被篡改
-
主流方案 :瑞芯微(如RK33xx、RK32xx系列)广泛采用RSA2048 + SHA256 的组合进行安全启动和固件验证。通过烧录eFuse来锁定公钥Hash,防止未签名固件运行
总结
虽然都是海思的芯片,但是海思对各种芯片安全启动支持的层级不同(快速启动、NON-TEE安全启动,TEE OEM安全启动、TEE vendor安全启动),在采用芯片时需要区分。
参考资料
ReleaseDoc\zh\01.software\board\SS928V100╱SS927V100安全启动脚本配置说明.pdf