Jetson AGX Orin Secure Boot 全面解析:原理、流程与实战指南

「Kurator·云原生实战派」主题征文,赢华为FreeBuds等好礼 10w+人浏览 230人参与


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

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


Jetson AGX Orin Secure Boot 全面解析:原理、流程与实战指南

Jetson AGX Orin 作为 NVIDIA 面向高性能边缘计算的旗舰平台,在自动驾驶、机器人、工业计算机、医疗影像等领域广泛使用。在这些场景中,系统安全是一个核心需求——用户需要确保:

  1. 设备启动的每一条指令都是可信任的
  2. 固件无法被篡改、替换或注入恶意代码
  3. OTA 升级体系不被攻击者利用
  4. 量产设备具备唯一且可验证的加密身份

这些目标的基础就是 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:

  1. 按住 Force Recovery
  2. 上电

运行:

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 配置、破坏测试与量产方案,给出了一个完整的可落地指南。

通过本文你应该已经掌握:

  1. Secure Boot 如何构建链式信任
  2. AGX Orin 的 BootROM → MB1 → MB2 → UEFI 流程
  3. PKC / SBK 的生成与用途
  4. 如何烧录 fuse 并刷入签名镜像
  5. 如何验证 Secure Boot 是否真正生效
  6. 企业量产需要的密钥管理策略

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

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


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值