📺 B站视频讲解(Bilibili):https://www.bilibili.com/video/BV1k1C9BYEAB/
📘 《Yocto项目实战教程》京东购买链接:Yocto项目实战教程
Jetson AGX Orin Secure Boot 全面解析:原理、流程与实战指南
Jetson AGX Orin 作为 NVIDIA 面向高性能边缘计算的旗舰平台,在自动驾驶、机器人、工业计算机、医疗影像等领域广泛使用。在这些场景中,系统安全是一个核心需求——用户需要确保:
- 设备启动的每一条指令都是可信任的。
- 固件无法被篡改、替换或注入恶意代码。
- OTA 升级体系不被攻击者利用。
- 量产设备具备唯一且可验证的加密身份。
这些目标的基础就是 Secure Boot(安全启动)。本文将以 Jetson AGX Orin 为例,深入讲解 Secure Boot 的原理、完整启用步骤、关键配置文件解析、签名工具流程,以及企业量产化时的密钥管理方案。

文章结构如下:
a. Secure Boot 原理(Root-of-Trust / PKC / SBK / UEFI)
b. Jetson AGX Orin 的启动链结构解析
c. 实战:从零启用 Secure Boot(含完整命令与文件示例)
d. UEFI Secure Boot 的工作方式与配置指南
e. Yocto 体系中如何整合 Secure Boot
ef. 安全验证方法(破坏测试)
g. 工厂量产建议(密钥管理)
第 1 章:Secure Boot 原理(深入讲解)
Secure Boot 的目标非常简单:确保芯片自上电开始执行的每一条指令都来自可信来源,没有被攻击者替换或修改。
但要做到这一点,需要围绕 3 个核心要素构建安全链:
1.1 Root of Trust(RoT:硬件信任根)
Jetson 的安全链始于 BootROM(硬固化在 SoC 内部的代码)。BootROM 具备以下特点:
- 无法被改写
- 是设备启动的第一条可执行指令
- 包含签名校验逻辑
BootROM 会从芯片内部的 eFuse 读取关键安全参数,包括:
- PKC 公钥哈希(用于验证上层 bootloader 签名)
- Secure Boot Enable 位
- SBK(Secure Boot Key)加密密钥
- OEM 密钥与生产模式位(ODM Production)
BootROM 是整个系统的根,它来决定“什么可以被启动”。
Root-of-Trust 的重要性
Root-of-Trust 是可信链条中的第一环。之后每一级 bootloader 都必须验证下一阶段的镜像,形成如下链式结构:
BootROM → MB1 → MB2 → UEFI → Kernel → RootFS
任何一级无法通过验证,启动即会被中断。
1.2 PKC(Public Key Cryptography)机制:签名验证
Secure Boot 的本质是利用 非对称加密算法 对每一个启动固件进行签名和验证:
- 开发者使用 私钥(Private Key) 对 bootloader、UEFI 进行签名
- BootROM / MB1 / UEFI 使用烧录在 eFuse 中的 公钥哈希(Public Key Hash) 来验证签名
Jetson 推荐使用:
- RSA 2048/3072
- EC-P521(椭圆曲线)
签名后的镜像具备强抗篡改性:
- 内容被修改 1 字节都会导致签名失效
1.3 SBK(Secure Boot Key):镜像加密
除了验证,Jetson 还支持使用 SBK(AES Key)对镜像加密。这提供了更强的安全性:
- PKC → 防篡改
- SBK → 防逆向 / 防提取
即便攻击者从设备中 dump 出 bootloader,也无法解密其中内容。
SBK 通常为 128-bit / 256-bit Key,由用户自己生成。
在实战中常见场景:AGX Orin 上的 MB1/MB2/UEFI 都采用 SBK 加密。
1.4 UEFI Secure Boot:保护 Kernel 与 initrd
Jetson 从 Xavier/Orin 开始采用 UEFI 作为主要 bootloader。UEFI 自身提供第二层 Secure Boot 机制:
- 使用 PK / KEK / db / dbx 四类证书
- 验证 kernel、initrd、bootaa64.efi、grub.cfg
这样可确保:
- 不能加载未经授权的 kernel
- 不能启动修改后的 initramfs
UEFI Secure Boot + NVIDIA Secure Boot = 双层可信启动链。
第 2 章:Jetson AGX Orin 启动链路(Boot Chain)解析
AGX Orin 的 bootflow 可以简化为:
[BootROM] → [MB1] → [MB2] → [UEFI] → [Kernel] → [RootFS]
2.1 BootROM(硬件阶段)
- 读取 eFuse
- 验证 MB1 签名
- 加载 BCT(Boot Configuration Table)
2.2 MB1
作用:
- 初始化 DRAM 等基础硬件
- 验证 MB2
2.3 MB2
负责:
- 初始化更多外设(I2C、电源等)
- 加载 EFI payload(UEFI)
2.4 UEFI
- 验证 kernel / initrd 签名
- 支持 A/B 启动
- 加载 DeviceTree
2.5 Kernel
加载系统驱动、挂载根文件系统。
这里每一级都可以启用签名验证:
- MB1 验 MB2
- MB2 验 UEFI
- UEFI 验 kernel
第 3 章:从零启用 Secure Boot(AGX Orin 实战步骤)
下面是最核心的部分。按照本章内容,你可以在 一台全新 AGX Orin 上完全启用 Secure Boot。
3.1 环境准备
在 Host PC(Linux Ubuntu 20.04/22.04)安装 JetPack/L4T:
tar xvf Jetson_Linux_R36.x_Aarch64.tbz2
tar xvf Tegra_Linux_Sample-Root-Filesystem_R36.x_Aarch64.tbz2
sudo ./apply_binaries.sh
确保安装 openssl:
sudo apt install openssl python3
3.2 生成 PKC 密钥对(核心步骤)
使用 EC-P521:
openssl ecparam -name secp521r1 -genkey -noout -out jetson_orin_pkc_priv.pem
openssl ec -in jetson_orin_pkc_priv.pem -pubout -out jetson_orin_pkc_pub.pem
导出公钥哈希:
sha256sum jetson_orin_pkc_pub.pem > pkc_pub.hash
此哈希稍后会写入 eFuse。
私钥必须严格保密,建议放入硬件 HSM 或离线存储。
3.3 生成 SBK(镜像加密密钥)
head -c 16 /dev/urandom | hexdump -v -e '/1 "%02X"' > sbk.key
示例:
A3B12F98C4E71234FF98AA22CC337722
3.4 准备 Fuse 配置文件
文件位置:
bootloader/odmfuse_pkc.xml
示例片段:
<field name="PublicKeyHash" type="pkc" value="sha256:xxxx..." />
<field name="SecureBootKey" type="aes" value="A3B12F98C4...7722" />
<field name="BootSecurityInfo" type="bool" value="1" />
其中:
- PublicKeyHash = 你的 PKC 公钥哈希
- SecureBootKey = SBK
3.5 执行 fuse 烧录(不可逆!)
进入 Recovery Mode:
- 按住 Force Recovery
- 上电
运行:
sudo ./bootloader/odmfuse.sh \
--fuse-configuration odmfuse_pkc.xml \
--auth jetson_orin_pkc_priv.pem \
jetson-agx-orin-devkit
成功标志:
Fusing completed
一旦烧录成功,所有未签名的固件都无法再启动。
3.6 刷入签名镜像(l4t_initrd_flash.sh)
使用 signed 镜像刷机:
sudo ./tools/kernel_flash/l4t_initrd_flash.sh \
--external-device nvme0n1p1 \
-u jetson_orin_pkc_priv.pem \
-v sbk.key \
--uefi-keys uefi_keys.conf \
--showlogs \
jetson-agx-orin-devkit nvme0n1p1
执行过程中会看到:
Signing MB1... OK
Encrypting MB2... OK
Generating UEFI keys... OK
3.7 验证 Secure Boot 是否生效
① 查看串口日志
启动后应看到:
Secure Boot enabled
PKC Authentication Success
UEFI Secure Boot: ON
② 篡改测试(最重要)
手动破坏 MB2:
hexedit bootloader/mb2_signed.bin
# 随便改一个字节
重新刷新:
启动会失败:
MB2 signature validation failed
这说明 Secure Boot 生效。
第 4 章:UEFI Secure Boot(第二阶段链路)
UEFI Secure Boot 保护 kernel / initrd / EFI 文件。
证书结构:
- PK(Platform Key)
- KEK(Key Exchange Key)
- db(允许启动列表)
- dbx(禁止启动列表)
自动生成 UEFI Keys:
sudo ./l4t_initrd_flash.sh --uefi-keys uefi_keys.conf ...
验证:
UEFI → Device Manager → Secure Boot state = Enabled
破坏测试:
删除 kernel 签名:
rm /boot/Image.sig
启动失败:
Security Violation
第 5 章:在 Yocto 中使用 Secure Boot(meta-tegra)
Yocto 镜像需要与 NVIDIA 的签名流程结合。
步骤:
5.1 Yocto 生成 kernel / dtb / rootfs
bitbake core-image-minimal
5.2 将 kernel 交给 NVIDIA 工具签名
tegrasign --key jetson_orin_pkc_priv.pem --getmode sign \
--file Image --signature Image.sig
5.3 将 Image.sig 打包入 boot 分区
修改 meta-tegra:
recipes-bsp/u-boot/u-boot-tegra_%.bbappend
加入:
install -m 0644 ${WORKDIR}/Image.sig ${D}/boot/
5.4 使用 NVIDIA 的 flash 脚本刷入
Yocto 不负责 fuse 和签名,最终仍需:
l4t_initrd_flash.sh -u pkc_priv.pem -v sbk.key
第 6 章:安全验证(企业验收要求)
以下项目必须验证:
✔ Bootloader 篡改测试
✔ Kernel 篡改测试
✔ RootFS 篡改测试(如采用 dm-verity)
✔ UEFI Secure Boot 日志验证
✔ eFuse 读取确认
读取 fuse:
sudo tegrarcm --oem fusesdump
确认 SecureBootSBK / PublicKeyHash 已写入。
第 7 章:密钥管理与工厂量产方案
企业产品必须具备密钥管理制度:
① 私钥(PKC Private Key)离线保管
- 建议使用 HSM(硬件安全模块)
② SBK 需要成批生成,但不可重复
- 不同设备最好使用不同 SBK → 对应唯一身份
③ 工厂 fuse 流程
- 设备进入烧录治具
- USB 大规模 fuse 工具执行 odmfuse.sh
- 刷入签名镜像
④ 丢失私钥怎么办?
- 无法再刷新新固件
- 必须做密钥轮换设计
总结
本篇文章从 Secure Boot 原理、启动链、AGX Orin 启动流程,到实际命令、fuse 配置、破坏测试与量产方案,给出了一个完整的可落地指南。
通过本文你应该已经掌握:
- Secure Boot 如何构建链式信任
- AGX Orin 的 BootROM → MB1 → MB2 → UEFI 流程
- PKC / SBK 的生成与用途
- 如何烧录 fuse 并刷入签名镜像
- 如何验证 Secure Boot 是否真正生效
- 企业量产需要的密钥管理策略
📺 B站视频讲解(Bilibili):https://www.bilibili.com/video/BV1k1C9BYEAB/
📘 《Yocto项目实战教程》京东购买链接:Yocto项目实战教程
2977

被折叠的 条评论
为什么被折叠?



