Jetson Secure Boot 完整解析:PKC、SBK、签名流程与熔丝机制

2025博客之星年度评选已开启 6.4w人浏览 138人参与


📺 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 的可信根来自两部分:

  1. 硬件 Root of Trust(RoT):写死在 SoC 中、不可修改的 BootROM。
  2. 安全熔丝(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),其结构如下:

  1. BootROM(硬件可信根)

    • 验证 MB1(第一阶段 Bootloader)的签名。
  2. MB1 → MB2

    • MB1 验证 MB2 签名。
  3. MB2 → UEFI(Jetson 使用 UEFI 而非 U-Boot)

    • MB2 验证 UEFI 签名。
  4. UEFI → Kernel / DTB

    • 验证内核镜像、设备树文件。
  5. 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。其流程如下:

  1. OEM 生成 RSA 公私钥对。
  2. BootROM 内部的 PKC 引擎使用熔丝中的公钥哈希验证 MB1 镜像。
  3. 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,需要按以下顺序准备工具、密钥与配置:

  1. 安装 NVIDIA Secure Boot 软件包
  2. 生成 RSA 密钥对(用于 PKC)
  3. 准备 SBK(128-bit AES 密钥)
  4. 准备 KEK 密钥(用于 UEFI 的签名管理)
  5. 生成 Fuse 配置文件(熔丝写入配置)
  6. 使用 odmfuse.sh 根据 Fuse 文件烧录熔丝(不可逆)
  7. 使用 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

该操作会:

  1. 将 PKC 公钥哈希写入熔丝
  2. 将 SBK 写入熔丝
  3. 设置 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 会:

  1. 将 MB1、MB2、UEFI、Kernel 等镜像进行签名
  2. 使用 SBK 进行加密(可选)
  3. 将准备好的镜像刷入 eMMC/SSD

此时设备已正式启用 Secure Boot。

十二、Secure Boot 启动时的完整验证流程

当设备上电后,启动链按以下方式工作:

  1. BootROM 读取熔丝 → PKC 公钥哈希
  2. BootROM 验证 MB1(签名 + 完整性)
  3. MB1 解密 & 验证 MB2
  4. MB2 验证 UEFI
  5. UEFI 验证 Kernel、DTB
  6. Kernel(可选)验证 Root

📺 B站视频讲解(Bilibili)https://www.bilibili.com/video/BV1k1C9BYEAB/

📘 《Yocto项目实战教程》京东购买链接Yocto项目实战教程


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值