1. 课程导入
电源控制固件是嵌入式系统中离硬件最近、权限最高、失效后果最严重的一类代码。它直接操作 PWM 比较寄存器、ADC 采样通道、保护比较器、看门狗与故障引脚,一旦被篡改、误写或越权调用,轻则输出失控、重则炸机起火。因此,电源控制固件保护架构不是简单的"加个 CRC"或"开个读保护",而是一套覆盖启动、运行、通信、升级、故障响应全生命周期的纵深防御体系。
本课程共 30 章,围绕"如何让电源固件在恶意攻击、意外干扰和自身缺陷下仍然保持可控"这一主线展开。本章作为导入,先建立三个认知锚点:保护什么、防谁、怎么分层防。
一、学习目标
完成本课程后,你应当能够独立完成以下工作:
- 识别电源控制固件中的关键资产:控制律参数、保护阈值、标定系数、密钥与升级镜像。
- 绘制目标产品的固件信任链,明确从 BootROM 到应用层的每一级验证点。
- 为给定 MCU/DSP 平台选择合适的安全启动、安全升级与运行时完整性方案。
- 设计故障安全(Fail-Safe)状态机,确保任何异常都收敛到安全输出。
- 编写可测试的保护策略,并用故障注入验证其有效性。
二、核心概念
在展开之前,先统一五个高频术语,后续章节会反复引用。
| 概念 | 含义 | 典型载体 |
|---|---|---|
| 信任根 RoT | 不可篡改的起始验证基点 | BootROM、OTP 公钥哈希 |
| 信任链 CoT | 逐级验证、逐级授权的启动序列 | Bootloader → App → 参数区 |
| 完整性度量 | 对代码/参数计算摘要并比对 | CRC32、SHA-256、CMAC |
| 故障安全 | 异常时进入确定的安全状态 | PWM 封锁、继电器断开 |
| 最小权限 | 每个执行体只拥有必需能力 | MPU 分区、特权级隔离 |
关键判断:保护架构的目标不是"绝对不被攻破",而是"被攻破后仍可控、可检测、可恢复"。电源系统的物理后果不可逆,因此可检测性与收敛性比保密性更优先。
三、整体框架
本课程将保护架构拆为四层,自下而上依次为:硬件信任根层、启动与升级层、运行时防护层、故障响应与恢复层。四层之间通过"验证—授权—监控—收敛"四条数据流耦合,形成闭环。
四层并非简单堆叠,而是存在明确的依赖与反馈关系:第1层提供不可篡改的验证基点,第2层据此建立可信启动路径,第3层在运行期持续监控,第4层在异常时把系统拉回安全状态,并将故障信息反馈给启动与升级策略(例如触发永久闭锁或进入恢复模式)。
四、典型场景:一次参数篡改的完整链路
假设某 3kW 数字电源的过流保护阈值存放在外部 EEPROM 中,攻击者通过调试口改写该值。若架构缺失,后果是保护失效。若按本课程框架部署,则会发生如下链路:
- 第1层:调试口在量产阶段已闭锁,攻击者无法直接写入。
- 第2层:Bootloader 启动时校验参数区 CMAC,发现摘要不匹配。
- 第3层:运行时周期性重算参数区摘要,触发完整性告警。
- 第4层:立即封锁 PWM、断开继电器,记录故障码并进入闭锁状态。
提示:参数区保护常被忽视。代码区有签名,参数区却裸奔,是电源固件最常见的架构缺口。参数区必须与代码区同等对待,使用 CMAC 或带密钥的哈希,而非普通 CRC。
五、常见误区与复盘
- 误区一:只做代码签名,不做运行时校验。签名只保证启动瞬间可信,运行期被注入的代码仍可作恶。
- 误区二:把 CRC 当安全机制。CRC 无密钥,攻击者可同步修改数据与校验值。
- 误区三:故障后仅复位。若故障源未消除,复位会陷入"复位—故障—复位"循环,必须进入闭锁或降级模式。
- 误区四:忽略升级回滚。攻击者可用旧版有漏洞固件覆盖新版,必须实现版本单调递增与防降级。
/* 参数区完整性校验伪代码 */
bool param_verify(void) {
uint8_t mac[16];
cmac_aes128(param_key, param_buf, PARAM_LEN, mac);
if (memcmp(mac, param_buf.mac, 16) != 0) {
fault_log(FAULT_PARAM_TAMPER);
enter_safe_state(); /* 封锁 PWM,断开继电器 */
return false;
}
return true;
}
复盘上述误区可以发现,保护架构的失效往往不在单点技术,而在层次之间的衔接:签名与运行时脱节、参数与代码脱节、故障检测与故障收敛脱节。本课程后续章节将逐层拆解,并给出可落地的配置、代码与测试方法。
注意:安全与实时性存在张力。完整性校验会占用 CPU 与总线带宽,必须合理选择校验周期与分块策略,避免因保护机制本身导致控制环超时。后续第3层章节将给出分块校验与预算分配方法。
本章建立了"保护什么、防谁、怎么分层防"的整体认知。接下来将从第1层硬件信任根开始,逐层深入每一层的设计要点、实现细节与验证手段。