4. 保护架构概览
电源控制固件一旦被篡改,后果往往不是“设备重启”这么简单:输出过压、限流阈值被改写、保护逻辑被绕过,都可能直接损坏功率级或负载。因此,保护架构不能只靠一个“加密开关”,而应是一套从芯片内部到应用逻辑逐层收口的体系。本节用分层模型把保护能力拆成四个平面:信任根、安全启动、运行时保护、恢复与审计,并说明它们之间的依赖关系。
一、分层模型:从硅片到控制环
电源控制固件的保护对象不是单一镜像,而是由多个执行阶段和多个存储区域组成的链条。典型的分层模型如下:
- L0 硬件信任根:芯片内部的 ROM、OTP/eFuse、安全引擎、时钟与复位控制器。该层不可修改,负责验证第一段可执行代码。
- L1 引导加载层:BootROM 或一级引导,校验二级引导的签名与版本,建立初始安全上下文。
- L2 固件运行层:电源控制应用、保护参数表、校准数据、通信协议栈。该层是攻击者最常瞄准的目标。
- L3 运行时监控层:看门狗、时钟监控、ADC 合理性检查、PWM 输出封锁、参数范围校验。
- L4 恢复与审计层:双分区回滚、安全日志、故障快照、远程证明。
分层的关键不是“层数多”,而是每一层只信任下一层经过验证的结果。如果 L2 直接读取未校验的参数区,那么 L1 做得再严密也会被绕过。
二、信任根:不可变的起点
信任根(Root of Trust, RoT)是整个保护架构的锚点。它通常由三部分组成:
- 不可变代码:芯片出厂时固化的 BootROM,负责最初始的签名验证。
- 不可变数据:OTP 或 eFuse 中烧录的根公钥哈希、安全启动使能位、调试口锁定状态。
- 安全硬件:TRNG、AES/SHA 加速器、密钥存储区、内存保护单元。
信任根的设计原则是“最小且不可改”。一旦根公钥哈希被烧录,后续所有镜像都必须能追溯到该密钥。若使用可擦写的密钥区,攻击者只需一次物理访问就能替换信任根,整个链条随之失效。
三、安全启动:把信任传递到应用
安全启动的本质是“逐级校验、逐级跳转”。以典型的电源控制 MCU 为例,启动流程如下:
BootROM
├─ 读取 OTP 中的根公钥哈希
├─ 校验一级引导镜像签名(ECDSA-P256 / RSA-3072)
├─ 校验版本号,拒绝低于防回滚计数器的镜像
└─ 跳转到一级引导
一级引导
├─ 校验应用镜像签名与完整性
├─ 校验保护参数表 CRC 与签名
├─ 初始化看门狗与时钟监控
└─ 跳转到电源控制应用
电源控制应用
├─ 再次校验关键参数区
├─ 启动运行时监控任务
└─ 进入控制环
安全启动的常见误区是“只校验应用镜像,不校验参数表”。在电源控制场景中,保护阈值、死区时间、软启动斜率等参数往往单独存放在数据区,如果该区域未纳入校验,攻击者可以只改参数而不改代码,照样绕过保护。
四、运行时保护:启动之后仍不放松
安全启动解决的是“启动那一刻可信”,但电源系统运行中仍面临电压毛刺、时钟漂移、内存位翻转、通信注入等威胁。运行时保护应覆盖以下检查点:
| 检查点 | 监控对象 | 异常响应 |
|---|---|---|
| 看门狗 | 控制任务心跳 | 复位并记录故障快照 |
| 时钟监控 | 系统时钟与 PWM 时钟 | 切换备用时钟或封锁输出 |
| ADC 合理性 | 输出电压/电流采样 | 连续越界则进入安全关断 |
| 参数范围校验 | 保护阈值、斜率、死区 | 拒绝写入并告警 |
| PWM 输出封锁 | 驱动级使能信号 | 硬件级快速关断 |
| 栈与内存保护 | 关键变量、返回地址 | 触发异常并复位 |
运行时保护的关键在于“响应速度”和“响应路径独立”。如果保护动作依赖被攻击者控制的主循环,那么保护本身也会被绕过。因此,PWM 封锁、过流比较器等应尽量由硬件或独立外设完成,固件只负责配置和记录。
五、案例与复盘:一次参数区未校验导致的过压
某数字电源项目在安全启动中只校验了应用代码,参数区使用独立 CRC 但未签名。攻击者通过通信接口写入一组被篡改的保护阈值,使过压保护点从 54V 提升到 60V。启动阶段一切正常,运行中 ADC 采样也未越界,直到负载突变时输出冲到 58V,功率级电容被击穿。
复盘结论有三点:
- 参数区必须纳入信任链:保护阈值、死区、斜率等应作为“安全关键数据”参与签名校验。
- 运行时写入需二次校验:任何修改保护参数的请求都应经过范围检查、权限校验和审计记录。
- 硬件保护不可省略:独立比较器或 PWM 故障输入应在固件失效时仍能封锁输出。
综上,电源控制固件保护架构应围绕“信任根不可变、安全启动逐级校验、运行时持续监控、恢复审计可回溯”四个层面展开。设计时先确定信任根边界,再定义启动链的校验对象,最后把运行时保护点映射到具体的硬件外设和任务上,才能形成真正可落地的保护体系。