📺 B站视频讲解(Bilibili):https://www.bilibili.com/video/BV1k1C9BYEAB/
📘 《Yocto项目实战教程》京东购买链接:Yocto项目实战教程
Jetson Secure Boot 完整解析:PKC、SBK、签名流程与熔丝机制
安全启动(Secure Boot)是现代嵌入式设备构建可信计算环境的核心基础。在 NVIDIA Jetson 平台上,Secure Boot 通过 BootROM、熔丝(Fuses)、公私钥体系(PKC / RSA)、对称密钥加密(SBK / AES)以及分级启动链验证机制构建了一条完整、不可伪造的“可信启动链(Chain of Trust)”。该机制确保设备从上电开始到操作系统 Kernel 启动的全过程中,每一层执行的代码都是经过授权、未被篡改的,从而极大提升系统安全性,防止固件替换、恶意篡改、供应链攻击、OTA 伪造等一系列真实威胁。
本文将完整讲解 Jetson Secure Boot 的核心概念、关键组件、密钥体系、签名与加密流程、熔丝写入机制以及 flash.sh 的安全刷写方式,并结合官方文档对整体体系结构进行系统总结,帮助读者全面理解 Secure Boot 的原理与实际使用方法。本章节结构如下:

一、Secure Boot 的基本概念与价值
Secure Boot 是一种基于硬件的可信启动机制。其核心目标是:确保自设备上电开始,到最终系统启动完成,整个启动链执行的所有二进制代码均是可信来源、未被篡改、未经替换的授权镜像。
Jetson Secure Boot 的可信根来自两部分:
- 硬件 Root of Trust(RoT):写死在 SoC 中、不可修改的 BootROM。
- 安全熔丝(Fuses):存储公钥哈希(PKC)、SBK 密钥和其他配置的不能逆向更改的硬件区域。
Secure Boot 价值体现在以下方面:
- 防止 Bootloader 或 Kernel 被替换为恶意固件。
- 防止 RootFS、DTB 等被篡改。
- 确保 OTA 升级包来源可靠。
- 保护商业知识产权(避免 Bootloader / Kernel 被逆向分析)。
- 确保 OP-TEE 等安全环境真正基于可信根执行。
在 AI 相关设备(如 Jetson)中,Secure Boot 更具有关键意义,因为攻击者不仅可以替换系统核心组件,还可能篡改 AI 模型文件(engine、onnx)、替换推理逻辑、操控 camera 输入,导致 AI 误判或受控。因此 Secure Boot 是所有量产级 Edge AI 产品的必要防线。
二、Jetson Secure Boot 的整体架构
Jetson Secure Boot 依赖一条严格的启动验证链(Chain of Trust),其结构如下:
-
BootROM(硬件可信根)
- 验证 MB1(第一阶段 Bootloader)的签名。
-
MB1 → MB2
- MB1 验证 MB2 签名。
-
MB2 → UEFI(Jetson 使用 UEFI 而非 U-Boot)
- MB2 验证 UEFI 签名。
-
UEFI → Kernel / DTB
- 验证内核镜像、设备树文件。
-
Kernel → RootFS(可选,如 dm-verity)
- 验证 RootFS 完整性。
上述流程确保了:每一个阶段只能启动由上一个阶段授权的下一阶段代码。一旦签名验证不通过,系统将进入安全停机模式,拒绝继续启动。
三、PKC 与 SBK:Jetson Secure Boot 的两大核心机制
Jetson Secure Boot 主要涉及两种密钥体系:
1. PKC(Public Key Cryptography)——镜像签名与验证机制
PKC 是 Jetson Secure Boot 的核心,它负责保证启动链中的各个镜像(MB1 / MB2 / UEFI / Kernel / DTB)均来自授权的 OEM。其流程如下:
- OEM 生成 RSA 公私钥对。
- BootROM 内部的 PKC 引擎使用熔丝中的公钥哈希验证 MB1 镜像。
- MB1 再验证 MB2,MB2 验证 UEFI,UEFI 验证 Kernel。
如果任意镜像未经签名、签名无效、被修改,系统将停止启动,确保镜像无法被恶意替换。
PKC 保障的是:
- 镜像完整性(未被篡改)
- 镜像来源真实性(来自 OEM)
2. SBK(Secure Boot Key)——镜像对称加密机制
SBK 是一个 128-bit AES 对称加密密钥,用来对部分敏感启动组件(如 Bootloader 二进制)进行加密,防止被逆向分析。SBK 不负责验证来源,而负责加密防护:
- 防止 Bootloader 被 dump 和逆向。
- 防止攻击者修改密文镜像后重新打包。
在实际 Secure Boot 部署中,PKC 是必须启用的核心功能,SBK 是可选但强烈建议启用的额外防护。
四、Jetson Secure Boot 的前置准备流程
要在 Jetson 上启用 Secure Boot,需要按以下顺序准备工具、密钥与配置:
- 安装 NVIDIA Secure Boot 软件包
- 生成 RSA 密钥对(用于 PKC)
- 准备 SBK(128-bit AES 密钥)
- 准备 KEK 密钥(用于 UEFI 的签名管理)
- 生成 Fuse 配置文件(熔丝写入配置)
- 使用 odmfuse.sh 根据 Fuse 文件烧录熔丝(不可逆)
- 使用 flash.sh 搭配 -u -v 选项刷写安全镜像
下面将逐项展开说明。
五、步骤一:安装 Secure Boot 软件包
Jetson 的安全启动工具集包含在 NVIDIA 发布的 L4T(Linux for Tegra)工具链中,通常位于:
Linux_for_Tegra/bootloader/
该目录包含:
- 镜像签名脚本
- 熔丝配置模板
- SBK、PKC 相关工具
- odmfuse.sh(熔丝写入工具)
- flash.sh(刷写工具)
安装 Secure Boot 包后即可使用所有安全相关的脚本与工具。
六、步骤二:生成 RSA PKC 密钥对
PKC 使用 RSA-2048 或 RSA-3072。生成 RSA 密钥:
openssl genrsa -out rsa_priv.pem 2048
openssl rsa -in rsa_priv.pem -pubout -out rsa_pub.pem
随后需通过 NVIDIA 工具生成公钥哈希,并写入 Fuse 配置文件。BootROM 在启动时会将 MB1 的签名与熔丝中的公钥哈希比对。
七、步骤三:准备 SBK 密钥
SBK 是 128-bit AES 对称密钥,格式如下:
0123456789ABCDEFFEDCBA9876543210
SBK 用于对 Bootloader 镜像进行加密。SBK 同样会加入 Fuse 配置文件,在 odmfuse.sh 烧录时写入安全熔丝区。
八、步骤四:准备 KEK 密钥
KEK(Key Encryption Key)用于 UEFI Secure Boot 管理证书链。当 UEFI 验证 Kernel 和引导配置时,需要 KEK 来管理签名证书。其作用包括:
- 管理 db、dbx(允许与禁止的签名列表)
- 控制 UEFI 层的签名验证行为
KEK 也是 Secure Boot 的链路之一。
九、步骤五:准备 Fuse 配置文件
NVIDIA 提供模板文件:
Linux_for_Tegra/bootloader/fuseblob.xml
该文件描述:
- PKC 公钥哈希
- SBK 密钥
- KEK 密钥
- Secure Boot 开关位
修改完成后将作为 odmfuse.sh 的输入文件。
十、步骤六:使用 odmfuse.sh 烧录熔丝
熔丝(Fuses)是一次性可编程区域,一旦烧录将无法恢复。在 Jetson 上运行:
sudo ./odmfuse.sh -i fuseblob.xml
该操作会:
- 将 PKC 公钥哈希写入熔丝
- 将 SBK 写入熔丝
- 设置 Secure Boot 使能位
此步骤是整个 Secure Boot 过程中唯一不可逆的步骤。一旦烧录错误,设备可能永远无法恢复,因此必须在量产流程中严格校验。
十一、步骤七:使用 flash.sh 刷写签名镜像
最后一步是使用 flash.sh 刷写已经签名并加密的启动镜像:
sudo ./flash.sh -u rsa_priv.pem -v sbk.key jetson-agx-orin-devkit mmcblk0p1
其中:
-u指定用于签名的私钥(用于 PKC)-v指定 SBK(用于镜像解密)
flash.sh 会:
- 将 MB1、MB2、UEFI、Kernel 等镜像进行签名
- 使用 SBK 进行加密(可选)
- 将准备好的镜像刷入 eMMC/SSD
此时设备已正式启用 Secure Boot。
十二、Secure Boot 启动时的完整验证流程
当设备上电后,启动链按以下方式工作:
- BootROM 读取熔丝 → PKC 公钥哈希
- BootROM 验证 MB1(签名 + 完整性)
- MB1 解密 & 验证 MB2
- MB2 验证 UEFI
- UEFI 验证 Kernel、DTB
- Kernel(可选)验证 Root
📺 B站视频讲解(Bilibili):https://www.bilibili.com/video/BV1k1C9BYEAB/
📘 《Yocto项目实战教程》京东购买链接:Yocto项目实战教程
3220

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



