3. 安全启动与信任根建立

安全启动的本质,是让芯片在上电后沿着一条“只能按既定顺序、只能执行被授权代码”的路径走到应用。要让这条路径可信,起点必须不可篡改——这就是不可变信任根(Immutable Root of Trust,iRoT)。在 MCX 系列(如 MCX N947、MCX A 系列)中,iRoT 由出厂固化在 ROM 中的引导代码与芯片内一次性可编程(OTP)区域中的信任根参数共同构成。ROM 代码不可改写,OTP 中的哈希、公钥摘要与启动配置一旦烧写也无法回退,二者一起把“第一段被执行的代码”钉死在可信状态。

不可变信任根由什么构成

MCX 的信任根不是单一对象,而是三层绑定关系:ROM 引导代码负责最初始的镜像头解析与签名校验;OTP(fuse)中保存根公钥的 SHA-256 摘要、启动模式位(如是否强制安全启动、是否允许串行下载恢复)以及生命周期状态;SRAM/Flash 中的镜像头则携带签名、证书链和镜像度量值。ROM 用 OTP 中的摘要去验证镜像头里的根公钥证书,再用该公钥验证镜像签名,形成“ROM→根公钥→镜像”的信任传递。任何一环被替换,校验都会在早期失败。

OTP 烧写不可逆。建议先在工程样片上用可擦写的模拟 OTP 或调试模式验证整条链路,确认镜像签名、启动配置和恢复策略都正确后,再对量产片执行一次性烧写。

安全启动流程与镜像签名验证

以 MCX N947 的典型安全启动为例,上电复位后流程如下:ROM 读取启动配置(BOOT_CFG)确定启动介质与安全启动使能位;从介质加载镜像头(Image Header),解析其中的证书链、镜像长度、目标地址与签名算法;用 OTP 中的根公钥摘要验证证书链顶端;用证书链中的镜像签名公钥验证镜像体签名;校验通过后把控制权交给镜像入口。若任一步失败,ROM 不会执行该镜像,而是进入失败处理路径。

镜像签名通常采用 ECDSA P-256 或 RSA-2048/3072,签名对象是镜像体的哈希(SHA-256)。签名验证不是“比对哈希”,而是用公钥对签名做数学验证,确认签名确实由对应私钥对当前镜像体生成。因此镜像体任何一字节变化都会导致验证失败。下面是一段用于生成待签名镜像摘要并做本地校验的示例命令,参数为教学示例,实际值需按工程替换:

# 1) 计算镜像体 SHA-256(示例镜像 app.bin)
sha256sum app.bin
# 输出示例:3f2a...c91d  app.bin

# 2) 用私钥对摘要签名,生成 app.sig(ECDSA P-256)
openssl dgst -sha256 -sign root_priv.pem -out app.sig app.bin

# 3) 用公钥验证签名(本地自检)
openssl dgst -sha256 -verify root_pub.pem -signature app.sig app.bin
# 期望输出:Verified OK

把 app.bin、app.sig 与镜像头一起打包成 MCX 可识别的启动镜像(如使用 SPSDK 的 nxpimage 工具生成 .sb 或 .bin 镜像),再通过调试器或串行下载写入启动介质。上电后若串口输出停留在 ROM 阶段、无应用打印,通常说明签名或证书链校验未通过。

启动失败恢复策略

安全启动必须预设“失败后怎么办”,否则一次误烧写就可能让设备变砖。MCX 常见恢复手段有三类:其一是串行下载恢复(Serial Download / ISP),当 OTP 中允许恢复且启动介质镜像校验失败时,ROM 可进入串行下载模式,通过 UART/USB 重新写入合法镜像;其二是双镜像/备份槽(A/B 槽)回滚,主槽校验失败时跳转到备份槽;其三是生命周期状态切换,在开发阶段保持开放状态便于调试,量产阶段关闭调试接口并锁定启动配置。

若在量产片上关闭了串行下载恢复且未配置备份槽,一旦主镜像签名失效,芯片将无法通过常规手段恢复,只能依赖厂商特定的调试解锁流程,代价极高。恢复策略必须在烧写 OTP 之前确定。

MCX 实机配置要点

在 MCX 上落地安全启动,通常借助 NXP SPSDK 与 MCUXpresso 工具链完成。关键动作包括:生成根密钥对并妥善离线保存私钥;用 nxpkeygen 或 OpenSSL 生成证书链;用 nxpimage 对镜像签名并打包;通过 blhost 或调试器烧写 OTP 中的根公钥摘要与启动配置;最后复位验证。下面给出一个可参考的配置检查清单,字段均对应 MCX 安全启动的真实配置项:

配置项示例值/状态作用
安全启动使能位Enabled强制 ROM 执行签名校验
根公钥摘要(OTP)SHA-256,64 hex锚定信任根公钥
签名算法ECDSA P-256 / SHA-256镜像签名与验证
启动介质FlexSPI NOR / SD镜像加载来源
串行下载恢复Allowed(开发)/ Disabled(量产)失败后能否重写镜像
备份槽Slot B 已配置主槽失败时回滚
生命周期Open → Locked控制调试与烧写权限

验证时建议分三步观察:先用合法签名镜像启动,确认应用正常打印;再故意修改镜像中一个字节重新打包,确认 ROM 拒绝启动并进入恢复路径;最后用备份槽或串行下载写入合法镜像,确认设备可恢复。只有这三步都符合预期,安全启动链路才算真正建立。

MCX 安全启动信任链与失败恢复路径 ROM 引导代码 不可改写 · 信任起点 OTP / Fuse 根公钥 SHA-256 摘要 启动模式位 · 生命周期 镜像头 Image Header 证书链 · 签名 · 长度 目标地址 · 算法标识 镜像体 app.bin SHA-256 摘要 + ECDSA 签名 ① 根公钥摘要校验 OTP 摘要 vs 证书链根公钥 不匹配 → 拒绝启动 ② 镜像签名校验 公钥验证 app.bin 签名 失败 → 进入恢复路径 校验通过 跳转应用入口执行 校验失败 进入恢复策略 恢复策略 串行下载 / 备份槽回滚 生命周期解锁(仅开发) 信任传递 锚定 校验 校验

把上述链路串起来看:OTP 中的根公钥摘要锚定信任根,ROM 用它对镜像头证书链做校验,证书链中的公钥再验证镜像体签名,通过则执行、失败则进入恢复。只要 OTP 与 ROM 不可变,整条信任链就无法被外部替换。实机配置时,先确认签名与打包正确,再烧写 OTP,最后用“合法启动、篡改拒绝、恢复成功”三步验证闭环,安全启动才算真正落地。