1. 课程导入

在嵌入式安全领域,Trusted Firmware-M(TF-M)已经成为 Armv8-M 平台上构建安全处理环境(SPE)的事实标准。它把安全启动、安全存储、密码服务、认证与密钥管理、安全分区调度等能力封装成可配置的组件,让设备厂商能够在 MCU 上快速搭建符合 PSA Certified 要求的安全底座。然而,从“开发板上跑通 TF-M”到“百万台设备安全交付”,中间隔着一条很长的工程化鸿沟:密钥如何注入、镜像如何签名、生命周期如何切换、产线如何验证、设备身份如何绑定、固件如何安全升级。本课程正是围绕这条鸿沟展开,目标是让学员具备把 TF-M 从原型推进到量产交付的完整工程能力。

一、学习目标:从“能跑”到“可交付”

本课程的学习目标可以归纳为四个层次。第一层是概念清晰:理解 TF-M 的架构边界、安全分区模型、PSA 认证体系以及设备生命周期(Device Lifecycle)的基本定义。第二层是流程贯通:掌握从密钥生成、镜像签名、配置编译、烧录注入到产线测试的完整交付链路。第三层是工具落地:能够使用 TF-M 提供的构建系统、签名脚本、配置系统以及主流厂商的 provisioning 工具完成实际操作。第四层是风险可控:能够识别量产环节中的密钥泄露、镜像回滚、生命周期误切换、调试口未关闭等典型风险,并给出可执行的防护与复盘方案。

学习主线:安全启动链 → 安全存储与密钥 → 设备身份与证书 → 生命周期管理 → 量产注入与测试 → 安全升级与运维。

二、核心概念:TF-M 量产安全的五个关键词

要理解 TF-M 的量产安全,需要先建立五个核心概念。它们贯穿整个课程,也是后续章节反复出现的对象。

  • 安全处理环境(SPE):TF-M 运行在安全侧,负责执行安全服务;非安全侧运行应用(NSPE)。两者通过 PSA Client API 和 IPC 机制通信。
  • 安全分区(Secure Partition):TF-M 把安全服务拆分为独立分区,如 Crypto、ITS、PS、Attestation、Platform 等,分区之间通过 PSA RoT 服务隔离。
  • 硬件唯一密钥(HUK):设备根密钥,通常由芯片内部 OTP、PUF 或安全存储派生,是设备身份和密钥派生的信任根。
  • 设备生命周期(Lifecycle):典型状态包括 CM(Chip Manufacturing)、DM(Device Manufacturing)、Secured、RMA(Return Merchandise Authorization)等,不同状态下调试口、密钥读写、镜像更新权限不同。
  • 配置与签名(Config & Signing):TF-M 通过 CMake 配置裁剪功能,通过 MCUboot 或厂商签名工具对镜像进行签名,确保只有合法固件可被加载。

这五个概念之间的关系可以用下面的结构图表示:HUK 作为信任根,派生出设备身份与密钥;生命周期决定当前设备允许的操作;安全分区提供运行时服务;签名与配置保证镜像的完整性与功能边界。

TF-M 量产安全核心概念关系图 信任根 → 身份与密钥 → 生命周期 → 安全服务 → 镜像交付 HUK 硬件唯一密钥 OTP / PUF / 安全存储 信任根 RoT 设备身份与证书 IAK / 设备证书 PSA Attestation 设备生命周期 CM → DM → Secured RMA / 调试口控制 安全分区 SPE Crypto / ITS / PS Attestation / Platform PSA RoT 服务隔离 配置与签名 CMake 功能裁剪 MCUboot 镜像签名 BL2 / 安全启动链 量产注入与测试 密钥注入 / 证书烧录 生命周期切换 产线功能与安全验证 交付流程主线 密钥生成 → 镜像构建与签名 → 配置裁剪 → 烧录注入 → 生命周期切换 → 产线测试 → 安全升级 每个环节都对应可验证的安全属性与可追溯的工程记录

三、整体框架:TF-M 交付工程的四个平面

把 TF-M 量产交付拆开看,可以归纳为四个平面。第一个是信任平面:以 HUK 为根,向上派生设备身份、会话密钥、存储密钥,形成完整的密钥层级。第二个是镜像平面:包括 BL2(MCUboot)、TF-M 安全镜像、非安全应用镜像,三者通过签名链绑定,任何一环被篡改都会导致启动失败。第三个是生命周期平面:设备从芯片制造到设备制造、再到安全锁定,每个状态对应不同的调试权限和密钥访问策略。第四个是产线平面:包括密钥注入设备、烧录工位、测试工位、MES 记录,是安全策略真正落地的地方。

这四个平面不是孤立的。信任平面为镜像平面提供签名验证的根;镜像平面为生命周期平面提供可升级的固件载体;生命周期平面为产线平面提供状态切换的规则;产线平面则把前三者的策略固化为可重复执行的工位动作。

四、交付流程概览与关键参数

下面给出一个典型的 TF-M 量产交付流程清单,涵盖从开发到量产的主要阶段。每个阶段都有明确的输入、输出和验证点。

阶段 主要动作 关键输入 输出/验证点
密钥准备 生成 HUK 派生策略、IAK 密钥对、签名密钥 芯片安全能力、PSA 认证等级 密钥清单、注入脚本、密钥保险库
镜像构建 配置 TF-M、编译 BL2/SPE/NSPE、签名 CMake 配置、签名私钥 签名镜像、构建日志、哈希清单
烧录注入 烧录镜像、注入密钥与证书、写入 OTP 产线工装、注入固件 注入记录、OTP 校验值
生命周期切换 CM → DM → Secured,关闭调试口 生命周期策略、授权令牌 状态读回、调试口禁用确认
产线测试 安全启动验证、Attestation 验证、功能测试 测试夹具、测试脚本 测试报告、不良品标记
安全升级 OTA 镜像签名、版本回滚保护、升级验证 升级包、版本策略 升级日志、回滚保护状态

五、案例场景:一次典型的量产导入

假设某厂商基于 Cortex-M33 芯片开发一款智能门锁,采用 TF-M 作为安全底座。开发阶段,工程师在开发板上跑通了安全启动和 Crypto 服务。进入量产前,他们需要完成以下动作:首先,在安全环境中生成 IAK 密钥对和镜像签名密钥,私钥永不离开 HSM;其次,使用 TF-M 的 CMake 配置裁剪掉不需要的分区,减小镜像体积;然后,用 MCUboot 的 imgtool 对 BL2、TF-M 和应用程序分别签名;接着,在产线工位上通过安全烧录器把镜像和密钥注入芯片,并把生命周期从 CM 切换到 DM;最后,在测试工位验证安全启动、设备证书和加密存储功能。整个过程需要 MES 记录每一步的哈希和状态,确保可追溯。

# 典型镜像签名命令示例(MCUboot imgtool)
imgtool sign \
  --key root-rsa-2048.pem \
  --align 8 \
  --version 1.0.0 \
  --header-size 0x200 \
  --slot-size 0x60000 \
  --pad-header \
  tfm_signed.bin tfm_signed_final.bin

# 生命周期切换示意(厂商工具)
provision_cli lifecycle set --device 0x1A2B --state DM --token auth.token
provision_cli otp write --addr 0x1000 --value HUK_DERIVED_KEY

六、常见误区与复盘要点

误区一:把开发阶段的默认配置直接用于量产。开发配置通常开启调试口、使用测试密钥、关闭安全启动校验,量产必须重新裁剪并锁定。
误区二:认为签名只是“加个后缀”。签名涉及密钥管理、版本号、回滚保护、镜像槽位布局,任何一项配置错误都可能导致设备变砖或无法升级。

复盘时建议重点检查三件事:第一,密钥是否在受控环境中生成和注入,是否存在明文私钥落盘;第二,生命周期状态是否与产线工位动作一致,是否存在未关闭调试口就出货的情况;第三,镜像版本和回滚保护是否经过实际升级验证,而不是只验证首次烧录。把这三件事做成检查清单,可以避免大部分量产安全事故。