☰
Android学习31(Secure Boot)
2026/11/6 3:08:53 网站建设 项目流程

1 原理

首先,Secure Boot功能的目的是什么?查了下资料,就是不让设备刷第三方的固件。类似圆环套圆环,圆环第一环是CPU,CPU定制了空间保存密钥,然后就是Boot,然后是OS,最后一直套到最后APP。

安卓的Secure Boot(安全启动)是整个 Android 移动设备安全架构的第一道防线和根基(Root of Trust)。它的核心目标是:确保设备从通电开机的那一刻起,到加载操作系统内核的全过程,每一行代码都是合法的、未被篡改的,从而防止恶意软件在底层植入(如 Rootkit)或刷入被篡改的系统。

如下图:

高通芯片流程如下,基本和上面的差不多,就是Bootloader分成了两个:

之后的启动过程如下:

  • 第一环:硬件信任根(Root of Trust, RoT)

    • 在芯片出厂时,制造商会将一个公钥的哈希值(Hash)烧录到芯片内部一次性可编程寄存器(eFuse)中。这个硬件级别的烧录是物理不可逆的,无法被软件篡改。

  • 第二环:芯片固化引导(PBL - Primary Bootloader)

    • 手机按下开机键后,CPU 首先运行固化在芯片内部硅片 ROM 中的代码(PBL)。

    • PBL 会去读取并加载下一级引导程序(如 XBL 或 SBL),并使用硬件 eFuse 中的公钥去解密/验证下一级程序的数字签名。

  • 第三环:引导程序层层校验(Secondary Bootloader & Bootloader)

    • 每一级引导程序在被执行前,必须先对紧接着的下一级引导程序进行 RSA / ECDSA 签名验证。

    • 如果验证通过,才把控制权交接给下一级。

  • 第四环:操作系统内核与校验(Verified Boot / vbmeta)

    • 当引导进入到 Android 内核(boot.img、init_boot.img)以及分区元数据(vbmeta.img)时,系统会通过AVB(Android Verified Boot)机制,对整个文件系统的区块(dm-verity)进行哈希校验。

这里稍微要注意的就是有一个efuse,保存了根密钥的hash值,可以用来验证后面的hash是否正确。就是电子保险丝,一旦写入之后就不能更改。

可以看到的是以后手机,刷机成了不再可能的事情了,甚至可能刷一个软件都不行。。。

在Andorid的层面,又进行了扩展。搞了一个Verified boot,运行时也可以校验。

最后,在开发阶段,Secure Boot其实一般不都弄。可能在量产的时候会在产线上做,到时候会有专门的设备和人员,甚至区域做这个。。。

2 用Openssl生成密钥

可以看下面这篇,我觉得写的还不错:

https://zhuanlan.zhihu.com/p/492475360

3 以高通为例

在高通平台上,提供了一套python的工具,用的是Openssl,还有一个V3.ext。

官方的流程大概是以下几步。(下面所有的命令均是示例)

3.1 Generate secure boot keys

3.1 3.2 3.3这几步通常在安全的离线主机(Offline Security Workstation)上通过 OpenSSL 完成。就是把openssl,和v3.ext的相关文件拷贝到一个文件夹。同时配置配置文件。

# 1. 生成根 CA 私钥 (RSA 4096位) openssl genpkey -algorithm RSA -out root_ca.key -pkeyopt rsa_keygen_bits:4096 # 2. 生成根 CA 自签名证书 (有效期 10 年) openssl req -x509 -new -nodes -key root_ca.key -sha256 -days 3650 \ -out root_ca.crt -subj "/CN=OEM Root CA/O=MyCompany/C=CN"

3.2 Generate root key pair and certificate

生成根CA密钥对和证书。使用四个openssl命令。

3.3 Generate attestation CA key pair and certificate

生成认证CA密钥对和证书。这样同样也是4个openssl命令完成。

Attestation CA / Sub-CA:中间认证 CA,用于对下级的二级签名密钥(如 OS 镜像签名密钥、Bootloader 签名密钥)进行授权。

# 1. 生成二级认证 CA 私钥 openssl genpkey -algorithm RSA -out attestation_ca.key -pkeyopt rsa_keygen_bits:4096 # 2. 生成二级 CA 的证书签名请求 (CSR) openssl req -new -key attestation_ca.key -out attestation_ca.csr \ -subj "/CN=OEM Attestation CA/O=MyCompany/C=CN" # 3. 使用根 CA 对二级 CA 证书进行签名授权 openssl x509 -req -in attestation_ca.csr -CA root_ca.crt -CAkey root_ca.key \ -CAcreateserial -out attestation_ca.crt -days 1825 -sha256

3.4 Configure PK hash in fuse

生成电子熔断中的根证书hash。用openssl digest命令。

这里生成根证书的 SHA-256 哈希值,并通过高通的工具(如 QFIL / Prommer 烧录器)写入芯片的OEM_PK_HASH寄存器(eFuse)。

一旦通过高通的 9008 烧录模式将这个 Hash 写入 eFuse 并执行熔断,芯片在物理层就被彻底“锁定”了。此后,芯片内部的 PBL(Primary Bootloader)在每次开机时,都会拿当前引导程序的签名去和这个 eFuse 里的 Hash 做数学比对。如果对不上,直接拒绝启动。

# 1. 提取根证书中的公钥并转换为 DER 格式 openssl x509 -in root_ca.crt -pubkey -noout | openssl pkey -pubin -outform DER > root_pubkey.der # 2. 计算 SHA-256 哈希值(这就是需要写入 eFuse 的目标哈希) openssl dgst -sha256 -binary root_pubkey.der | xxd -p -c 32 > oem_pk_hash.txt echo "生成的 OEM_PK_HASH 内容为:" cat oem_pk_hash.txt

3.5 Generate sec.elf image

生成加密分区。虽然是叫做加密分区,当时实际是一个配置程序。

# 典型的高通 SecImage 工具调用示例(依赖高通 BSP 提供的 Sectools 脚本) python3 ${SECTOOLS_PATH}/sectools.py secure-policy \ --image_in sec.dat \ --config_path security_config.xml \ --sign_config sign_config.xml \ --output_dir ./output_sec

这里的sec.elf实际就是XBL之后一个配置安全的程序。主要做的事情有两个:

1 配置硬件隔离控制器:它通过向芯片内部的 TZASC(TrustZone Address Space Controller)和 TZPC(TrustZone Protection Controller)等硬件寄存器写入参数,把物理内存和外设严格切割为 Secure World(安全世界)和 Non-Secure World(普通世界)。

2 初始化密码学上下文:为后续运行在安全世界里的 TEE(如 QSEE / Trusty)初始化硬件加密引擎、真随机数发生器(TRNG)和安全存储接口。

3.6 Sign the images

对各个分区镜像进行签名。这里可以看到,高通常规的操作是对各个分区进行验证。如果私下对有的分区进行了烧写,就可能导致校验不过无法启动。

# 使用高通 Sectools 对单个镜像(如 boot.img)进行签名的命令示例 python3 ${SECTOOLS_PATH}/sectools.py sign \ -ih boot.img \ -sa \ --config ${SECTOOLS_PATH}/config/integration_config.xml \ --un-signed-image boot.img \ --output_dir ./signed_output \ --exponent 3 \ --key attestation_ca.key \ --cert attestation_ca.crt

3.7 Flash signed image on device

将签名后的各个镜像通过 Fastboot(或生产线上的 9008 / QFIL 工具)烧录到设备的对应物理或逻辑分区中。

# 进入 Fastboot 模式后,直接刷入签名后的镜像 fastboot flash boot signed_output/boot_signed.img fastboot flash vbmeta signed_output/vbmeta_signed.img fastboot flash xbl signed_output/xbl_signed.elf # 重启设备 fastboot reboot

4 参考

https://source.android.com/docs/security/features/verifiedboot?hl=zh-cn

Secure boot and image authentication in mobile tech | Qualcomm

android手机系统的启动流程-secureboot流程(以MTK平台为例)_android secure boot怎么开启-CSDN博客

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询