1. 课程导入与工程全景

在工业网关、车载 T-Box、智能电表、医疗终端这类长期部署且难以现场维护的设备中,i.MX 系列处理器常被用作主控。设备一旦出厂,固件更新只能依赖网络下发,而设备里又保存着密钥、证书、用户数据等敏感资产。安全启动(Secure Boot)与 OTA(Over-The-Air)升级因此成为一对必须同时成立的机制:安全启动保证“设备只运行被授权方签过名的固件”,OTA 保证“授权方能在不拆机的前提下把新固件安全地送进去”。本课程围绕 NXP i.MX(以 i.MX6/8 系列、HAB/HABv4 与 AHAB/Advanced High Assurance Boot 为主线)展开,从威胁模型出发,逐步落到密钥、镜像签名、启动链验证、OTA 包格式、回滚与防降级、失败恢复等工程细节。

典型产品场景与安全目标

以一台基于 i.MX8M Mini 的工业边缘网关为例:设备通过 4G/以太网连接云端,运行 Linux,承载数据采集与协议转换。它的安全目标可以拆成三条:其一,启动完整性——从上电到内核挂载根文件系统,每一级镜像都必须通过密码学验证,任何被篡改的 U-Boot 或内核都不能执行;其二,固件机密性与真实性——OTA 包在公网传输,必须加密并签名,防止窃取与伪造;其三,可恢复性——升级断电、镜像损坏时,设备仍能回到可用状态,而不是变砖。这三条目标决定了后续所有设计:密钥放哪里、镜像怎么签、启动链怎么串、OTA 怎么切分区。

威胁模型:先想清楚“谁在攻击、攻击什么”

安全启动不是抽象概念,它针对的是具体攻击面。常见威胁包括:攻击者拿到设备后通过串口或 USB 下载模式刷入恶意 U-Boot;通过网络中间人替换 OTA 包;利用旧版本固件的已知漏洞降级回滚;通过物理方式读取外部 Flash 中的密钥;以及升级过程中断电导致镜像不完整。对应的防护手段分别是:HAB/AHAB 的签名验证、OTA 包的签名与加密、防降级计数器(Monotonic Counter)、密钥存储于 OTP/eFuse 或 CAAM 加密区、A/B 双分区与回滚机制。理解“威胁—防护”的对应关系,比记住某个命令更重要。

i.MX 安全启动与 OTA 工程全景 威胁模型 → 启动链验证 → OTA 升级 → 回滚恢复 威胁模型 恶意固件刷入 串口/USB下载模式篡改 OTA 包伪造/窃取 公网中间人替换镜像 降级回滚攻击 利用旧版已知漏洞 密钥物理读取 外部Flash/OTP探测 升级断电损坏 镜像不完整导致变砖 调试接口滥用 JTAG/串口未关闭 启动链验证(HAB/AHAB) Boot ROM(固化信任根) 读取 eFuse 中的 SRK 哈希 IVT + CSF 验证 校验 U-Boot 签名与证书链 U-Boot 验证内核 FIT 校验 Kernel + DTB 签名 dm-verity 验证根文件系统 块级哈希树校验 进入可信用户空间 启动完成,服务就绪 失败则触发 HAB 事件,按策略锁定或恢复 OTA 升级与回滚 云端生成 OTA 包 签名 + 加密 + 版本号 设备下载并验签 校验签名与防降级计数 写入备用分区(B) A/B 双分区,不影响运行 切换启动标志并重启 Bootloader 选择新分区 验证失败则回滚 切回 A 分区,保留旧版本 防护 交付

学习路线:从“能启动”到“能安全升级”

本课程按能力递进组织。第一阶段建立概念与实验环境:理解 HAB/AHAB 的信任根、IVT/CSF 结构、eFuse 的作用,并在开发板上完成一次未签名启动与签名启动的对比。第二阶段进入密钥与签名实操:生成 PKI 树、用 CST 工具签名 U-Boot 与内核、烧写 SRK 哈希到 eFuse、观察 HAB 事件日志。第三阶段聚焦 OTA:设计 A/B 分区布局、制作带签名的升级包、实现下载验签与分区切换、处理断电与回滚。第四阶段是工程化:防降级计数器、密钥轮换、量产烧录、安全审计与故障排查。每一阶段都对应可观察的结果,例如 HAB 状态从“OPEN”变为“CLOSED”、OTA 后版本号更新且旧分区仍可回退。

实验环境搭建

建议使用一块支持 HAB 的 i.MX6ULL 或 i.MX8M Mini 开发板,配合 Yocto 构建的 Linux BSP。主机侧需要 NXP 的 imx-cst(Code Signing Tool)、uuu(Universal Update Utility)以及串口终端。关键准备动作包括:确认 SoC 的 HAB 版本与 eFuse 布局;备份原始固件;准备一张可启动的 SD 卡作为恢复介质;在 U-Boot 中打开 hab_status 命令以便读取启动验证结果。下面是一段用于检查 HAB 状态的示例命令与预期输出(示例为合理假设,实际以所用 BSP 为准):

# 在 U-Boot 命令行中执行
=> hab_status

Secure boot disabled

HAB Configuration: 0xf0, HAB State: 0x66
    No HAB Events Found!

当 eFuse 烧写 SRK 哈希并关闭 HAB 后,同样的命令会显示 Secure boot enabled,若签名不匹配则出现 HAB Events Found 及具体事件码。这个“状态—事件”的观察点,是后续所有调试的基础。实验环境搭建完成后,你应当能回答三个问题:当前设备是否已启用安全启动?启动链中哪一级验证失败?OTA 包是否被正确签名?带着这三个问题进入后续章节,学习会更有针对性。

建议在实验初期保留一路串口日志和一路 USB 下载通道,避免因 eFuse 误烧导致设备无法恢复。所有涉及 eFuse 的操作都应先在可恢复的开发板上验证流程。