一、为什么充电设施必须补上固件安全启动这一课
过去很长一段时间里,充电桩、换电站控制器、能源网关这类设备被视为"哑终端":功能简单、离线运行、被部署在封闭场地内。这种认知在今天已经完全不成立。现代充电设施普遍具备 4G/5G、Wi-Fi 或以太网回传能力,运行着完整的 Linux 或 RTOS 系统,承载充电调度、计费结算、用户身份、远程诊断等敏感业务。设备一旦被攻破,攻击者可以通过固件刷写植入恶意程序,劫持充电功率、窃取支付凭证,甚至把充电桩当作跳板横向移动到运营后台。
更值得警惕的是"刷写"本身的技术门槛正在降低。绝大多数量产充电桩的固件更新走的是 TFTP/HTTP/串口/USB 直刷通道,更新包要么是明文,要么仅做了简单校验和(CRC/MD5)保护。攻击者在拿到一台设备、拆开外壳、接上调试串口之后,往往几分钟内就能把设备上的镜像读出来,改完逻辑再刷回去。没有"信任根"和"链式验签"保护的固件,本质上等于把设备的最高控制权交给了任何能物理接触它的人。
这件事之所以被监管和整车厂高度关注,是因为充电设施已经深度嵌入新能源汽车的 cybersecurity 合规框架。GB 44495(汽车整车信息安全技术要求)与 UNECE R155/R156 虽然文本层面指向的是道路车辆,但其背后的核心原则——软件身份可信、更新可验证、版本可追溯——正在被整车厂沿供应链向后传导到充电桩、车载充电机(OBC)、电池管理系统(BMS)等部件。想要进入主流车企的供应体系,固件安全启动和防恶意刷写已经从"加分项"变成了"准入项"。
本文将围绕一个最务实的问题展开:在不大幅重构硬件、不拖慢产线的前提下,如何把一套可验证、可追溯、可留证的固件安全启动链路落到充电设施上。
二、固件安全启动的核心技术链路
所谓安全启动(Secure Boot),本质是一条"信任链":从设备上电的那一刻起,每一级代码在交给下一级执行之前,都必须先验证下一级的签名与完整性。任何一级验证失败,启动立即中止或进入受控的恢复模式。整条链路的可信起点叫做"信任根"(Root of Trust,RoT),它必须固化在不可篡改的硬件中。
一条典型的充电设施启动链如下:
上电 → Boot ROM(固化、不可改) → 验签 BL1(一级引导) → BL1 验签 BL2(二级引导 / 安全世界) → BL2 验签 Kernel(固件主程序) → Kernel 验签 应用容器 / 业务镜像 → 进入正常运行其中 Boot ROM 是芯片出厂时由厂商烧录、用户无法修改的只读代码,它内部存放着"可信公钥哈希"或者"可信公钥本身"。这是整条链唯一不能被动手脚的起点。后面每一级引导程序都带着签名头(含版本号、镜像哈希、签名值),由上一级用对应公钥验签通过后才跳转执行。
2.1 Boot ROM 验签的工程实现
Boot ROM 验签的关键,是把"谁能给固件签名"这件事,从软件层面彻底下沉到硬件层面。落地时通常有两套思路:
- 公钥哈希固化:芯片的 OTP(One-Time Programmable,一次性可编程)熔丝区里只烧录签名公钥的哈希值,Boot ROM 在启动时先把片外存放的公钥读进来算哈希,和熔丝里的哈希比对,一致才用它去验签镜像。好处是公钥可以随镜像一起发布,坏处是公钥一旦要轮换就比较麻烦。
- 公钥直接固化:直接把签名公钥(或公钥的权威证书)烧进 OTP/efuse,Boot ROM 直接用它对镜像签名做验签。轮换公钥需要走芯片的密钥版本机制(见 2.4 防回滚)。
验签算法选型直接决定启动耗时和合规走向。工程中常见的三类选择:
| 算法 | 密钥长度 | 适用场景 | 合规属性 |
|---|---|---|---|
| RSA-2048/4096 | 2048/4096 bit | 通用、生态成熟 | 国际通用 |
| ECDSA P-256 | 256 bit | 资源受限 MCU | 国际通用、速度快 |
| SM2 | 256 bit | 国密合规要求 | 满足国密体系 |
对充电桩这类"主频 200MHz~1GHz、Flash 4~64MB"的设备,我们一般建议:Boot ROM 阶段用 ECDSA P-256 或 SM2(验签快、固件头小),内核与应用镜像阶段可按需升级到 RSA-4096(验签一次性开销可接受)。
下面是一段 Boot ROM 验签的伪代码,用于说明逻辑而非具体实现:
// Boot ROM 中的验签逻辑(示意)intverify_next_stage(image_hdr_t*hdr,uint8_t*img,size_tlen){// 1. 读取熔丝区中的可信公钥哈希uint8_troot_pub_hash[32];read_otp_root_pub_hash(root_pub_hash);// 2. 校验镜像头中携带的公钥是否可信if(sha256(hdr->pub,hdr->pub_len,NULL)!=memcmp(root_pub_hash,32))returnBOOT_REJECT;// 3. 计算镜像固件体哈希,与头中声明的一致性比对uint8_tcalc[32];sha256(img,len,calc);if(memcmp(calc,hdr->payload_hash,32)!=0)returnBOOT_REJECT;// 4. 用可信公钥验签if(ecdsa_verify(hdr->pub,hdr->payload_hash,hdr->sig)!=OK)returnBOOT_REJECT;// 5. 防回滚版本钉检查(见 2.4)if(hdr->monotonic_version<=read_efuse_version())returnBOOT_REJECT;returnBOOT_OK;}2.2 固件哈希与运行时完整性度量
Boot ROM 验签解决的是"启动那一刻镜像有没有被改"的问题,但设备跑起来之后,固件在内存里可能被运行时篡改(比如通过漏洞注入)。要兜住这部分风险,需要引入"运行时完整性度量":内核或安全监控模块周期性地对关键代码段、配置区做哈希,把度量值送到不可篡改的存储(如 TPM 的 PCR、或 MCU 的硬件安全模块寄存器),一旦度量值偏离基线立即告警或降级运行。
常用哈希算法是 SHA-256,国密场景用 SM3。度量对象至少应包括:
- 内核镜像代码段
- 关键驱动(充电控制、计量、通信)
- 启动配置与证书链
- 业务应用容器的入口
工程上要注意,度量不能拖慢业务。经验值:对 8MB 固件体做 SHA-256 哈希,带硬件加速的 MCU 约 100~250ms,完全可以放到后台线程周期性执行。度量频率建议按风险分级:核心代码段每 30~60 秒一次,配置区在每次变更前度量。
2.3 防回滚版本钉(Anti-Rollback)
"防回滚"是安全启动里最容易被忽略、却最致命的一环。假设攻击者发现当前版本 v3 有个漏洞,但他手里只有 v1 的合法签名固件(v1 有已知漏洞)。如果没有版本钉,他就可以把设备刷回 v1,再利用 v1 的漏洞拿下设备——等于前面所有验签努力都白费。
防回滚的核心是一个"单调版本计数器":它存在防篡改硬件里(OTP efuse、TPM NV、或 HSM 受保护存储),只能递增、不能回退。新固件要能启动,其版本号必须严格大于硬件里记录的当前版本。升级成功后,硬件版本号被钉到新值。
硬件记录版本 = 5 尝试刷入固件 v4 → 4 <= 5 → 拒绝启动(回滚攻击拦截) 尝试刷入固件 v6 → 6 > 5 → 验签通过,启动成功后钉到 6落地要点有三个:
- 版本号必须来自签名头,不能来自镜像内部可变字段,否则攻击者可自行改写。
- 钉版本的动作要和"验签成功"绑定在同一个原子事务里,避免"验签过但没钉上"导致反复回退。
- 保留少量历史版本窗口(如允许 v5~v8)以兼容灰度回退需求,但绝不能低于安全基线版本。
2.4 产线安全烧录流程
前面所有机制都依赖"信任根"和"初始密钥"在产线阶段被正确注入。产线烧录一旦出岔子(比如烧了测试密钥、或者把调试公钥带到了量产机),后面再怎么验签都是空中楼阁。一套可落地的产线安全烧录流程大致是:
- 阶段一 密钥注入:根公钥哈希或根证书在芯片出厂/烧录工位写入 OTP,写入后锁死(lock bit)。这一步必须在受控环境、受权人员操作下完成。
- 阶段二 固件签名:待烧录固件由后台签名服务用受保护的私钥签名,签名动作与"固件版本号、设备型号、项目标识"绑定。
- 阶段三 烧录与锁定:烧录工位下发已签名镜像,设备 Boot ROM 首次启动即完成自验签;烧录完成后关闭调试端口(或仅保留安全调试通道)。
- 阶段四 出厂审计:每台设备的"型号 + 序列号 + 固件版本 + 签名指纹 + 烧录时间 + 操作人"落入审计库,形成可举证的出厂证据链。
特别要强调的是"调试端口保护"。充电桩主板上的 JTAG/SWD/UART 调试口是刷写攻击的主要入口,产线烧录完成后必须关闭或加锁;若因售后需要保留,应采用基于证书的安全调试鉴权(Secure Debug),只有持合法调试证书的工程设备才能打开,这正好对应汽车网络安全中"调试端口保护"这一典型场景。
三、密钥与证书体系:把"签名权"关进 HSM
固件验签能不能扛住攻击,最终取决于"签名私钥"有没有被好好保管。把私钥放在普通服务器上、甚至硬编码在 CI 脚本里,是量产项目里最常见的致命错误。正确的做法是:签名私钥由硬件安全模块(HSM)生成、永不出域,所有签名运算都在 HSM 内完成;HSM 本身满足 FIPS 140-2/3 等级要求。
3.1 以安当CAS为例——密钥从生成到销毁的全生命周期
以安当CAS为例,密钥管理不是"一把私钥签所有设备",而是按"项目/车型/设备平台"做隔离:每个充电设施产品系列拥有独立的密钥域,彼此之间不串号、不互相验签,即使某一个产品线的密钥需要轮换,也不会波及其他产品线。密钥从生成、分发、使用、轮换到销毁的全生命周期都在 HSM 内闭环,私钥明文永不落盘、永不经过应用服务器内存。
在充电设施的真实落地里,这种"项目隔离"非常关键:一家设备厂商可能同时给 A 车企和 B 运营商供货,两个项目的固件即便硬件相同,也应使用不同的签名密钥域,避免任一客户的密钥泄露牵连其他客户。配合"三员分离"(系统管理员、密钥管理员、审计员三者权限互斥),可以有效规避"一个人就能偷偷签固件"的内部风险。
3.2 固件签名 API 与多算法支持
工程团队在 CI/CD 里并不需要直接接触 HSM,而是通过标准化的固件签名接口提交待签镜像,由后台服务在 HSM 内完成签名并返回带签名头的固件包。接口应当原生支持 RSA、ECDSA、SM2 三类算法,让不同合规要求的项目(国际体系 / 国密体系)共用同一套流水线。
一个签名调用的逻辑骨架如下(示意,不含任何外部访问地址):
请求:sign_firmware( project_id = "CHARGER-A01", algorithm = "SM2", image_hash = <SHA256/SM3 摘要>, version = 8, operator = "signer_xxx" // 经三员分离审批的签名人 ) 返回:signed_package( signature = <SM2 签名值>, signer_cert = <SM2 签名证书>, cert_chain = <到根 CA 的证书链>, monotonic_version = 8 )对充电设施厂商而言,把"固件签名"从手工脚本升级成受控服务,最大的收益不是技术炫技,而是"每一次签名都能被追溯到人、到项目、到合规算法"。这也正是 ECU固件签名、汽车密钥管理在汽车供应链里被反复强调的原因:签名行为本身必须可追溯、可留证。
3.3 证书链与 CA 体系
签名证书应当来自一条独立的、受控的固件签名 CA(而非随便签个自签证书)。根 CA 根证书哈希固化进 Boot ROM 信任锚,中间 CA 用于按项目/按年份签发设备签名证书。国密场景下,CA 证书采用 SM2 体系,整条链满足国密合规要求。证书有效期、吊销机制(CRL/OCSP 的离线等效方案)都要提前规划,否则证书过期会导致大批在网设备无法升级。
四、性能与容量数据参考
很多工程师担心"加一套安全启动会不会把产线拖垮、把开机拖到无法接受"。下面给出一组量产项目里常见的参考区间,帮助做容量规划(具体数值取决于芯片型号、是否带硬件加速、镜像大小)。
| 环节 | 指标 | 典型区间 | 备注 |
|---|---|---|---|
| Boot ROM 验签(ECDSA P-256) | 单次耗时 | 12~18 ms | MCU 主频 200~400MHz |
| Boot ROM 验签(RSA-2048) | 单次耗时 | 25~35 ms | 通用场景 |
| Boot ROM 验签(SM2) | 单次耗时 | 18~25 ms | 国密场景 |
| 内核镜像哈希(SHA-256/SM3) | 吞吐 | 30~80 MB/s | 带硬件哈希加速 |
| 8MB 固件完整验签+哈希 | 总启动增加 | 200~400 ms | 用户几乎无感 |
| HSM 固件签名吞吐 | 签名/秒 | 200~1500 | 取决于 HSM 型号与并发 |
| 产线并发烧录 | 设备/烧录工位 | 8~64 | 并行签名流水线 |
| 单项目密钥域容量 | 项目/平台数 | 数十到数百 | 隔离域线性扩展 |
| 审计日志留存 | 单设备出厂记录 | < 1 KB | 可长期归档 |
几个工程结论:
- 安全启动对"开机时间"的影响通常在 0.2~0.5 秒,对充电桩这种非实时严苛设备完全可接受。
- 产线瓶颈一般不在验签,而在"烧录通道带宽"和"签名服务并发"。把签名服务做成无状态、可水平扩容的接口,单工位并行 8~64 台毫无压力。
- 若设备量上百万台,建议按"区域+型号"做签名证书分级,避免单张证书吊销影响面过大。
五、分阶段改造路径:从裸机到安全启动
对已经在售、固件是明文直刷的存量设备,不要幻想"一步到位"。稳妥的改造路径分成四个阶段,每个阶段都能独立交付价值:
阶段一:资产与风险盘点(约 1~2 周)
- 盘点设备型号、主控芯片、是否带 OTP/efuse/TPM、启动架构(是否有 BL1/BL2)。
- 梳理现有升级通道(串口/USB/网络)与校验方式(CRC/无/MD5)。
- 输出《固件安全现状与风险清单》,明确哪些型号可改造、哪些需硬件改版。
阶段二:信任根植入(硬件/产线侧,约 2~4 周)
- 对可改造型号,在新版 Boot ROM 中启用验签;将可信公钥哈希/证书烧入 OTP 并锁死。
- 关闭或锁定调试端口,规划安全调试鉴权方案。
- 这一步通常需要芯片原厂配合或替换带 Secure Boot 的 SoC 批次。
阶段三:签名流水线建设(后台侧,约 3~5 周)
- 部署 HSM 与签名服务,打通 CI/CD,把"手工签名脚本"换成受控签名接口。
- 建立项目隔离密钥域、三员分离审批、证书链与 CA。
- 完成固件哈希度量与防回滚版本钉的代码改造。
- 在测试产线跑通"签名 → 烧录 → 自验签 → 版本钉 → 审计入库"全链路。
阶段四:运维与合规闭环(持续)
- 建立验签失败告警、版本钉异常告警、审计日志定期归档。
- 规划密钥轮换与证书续期演练。
- 整理面向 GB 44495、R155 合规的证据材料包(见下节)。
需要特别说明:存量设备若芯片本身不支持 Secure Boot,阶段二是绕不过去的硬件前提。此时可以选择"安全元件(SE)外挂"方案——把验签根放进一颗外接安全芯片,由它先验签主 MCU 的引导镜像再放行,相当于给老硬件补一个信任根。
六、合规与证据材料思路(GB 44495 / R155)
把固件安全启动做出来只是上半场,能向监管、向整车厂、向客户"证明你做了"才是下半场。围绕汽车网络安全与软件更新合规,证据材料应当贯穿"技术控制"和"管理控制"两条线。
技术侧证据
- 信任根证明:OTP/efuse 烧录记录、公钥哈希锁定截图、锁定后的只读证明。
- 验签链路证明:Boot ROM 验签代码与逻辑说明、各启动级镜像的签名头结构。
- 防回滚证明:单调版本计数器设计文档、回滚被拦截的测试日志。
- 完整性度量证明:运行时度量脚本/配置、偏离基线的告警样例。
- 调试端口保护证明:端口关闭/锁定记录,或安全调试鉴权流程。
管理侧证据
- 密钥管理文档:密钥生成、隔离、轮换、销毁流程;HSM FIPS 140-2/3 认证材料。
- 三员分离与权限矩阵:谁有权发起签名、谁审批、谁审计,三者互斥。
- 审计日志样例:单台设备的"型号+序列号+版本+签名指纹+烧录时间+操作人"全链路记录。
- 软件更新管理(对应 R156):更新包来源可信、传输加密、失败回退、版本钉防降级。
- 供应链安全审核材料:参照汽车电子零部件厂商"ECU 烧录+签名通过 OEM 供应链安全审核"的既有实践,把同样的能力映射到充电设施。
在应对整车厂供应链安全审核时,能拿出"每一台出厂设备都有签名指纹和不可篡改审计记录"的证据,往往比单纯展示一份产品白皮书更有说服力。这也和诊断接入认证、调试端口保护等场景共用同一套密钥与审计底座,事半功倍。
方案参考
对于计划上线固件安全启动与防恶意刷写的充电设施、能源设备厂商,建议从以下几个选型与落地要点出发,结合自身硬件条件做裁剪:
先确认硬件信任根能力。选型新主控时,优先选择原生支持 Secure Boot、带 OTP/efuse 或内置 HSM/TPM 的芯片;存量设备评估是否可通过外接安全元件补齐信任根。不要把"软件校验"当作"安全启动"的替代品,没有硬件信任根,验签逻辑本身可被篡改。
算法组合按合规要求定。面向国际车企供应链,RSA/ECDSA 体系生态成熟;面向国密合规要求,应直接采用 SM2 签名 + SM3 哈希 + SM2 证书链。同一套签名流水线最好能同时支持多算法,避免为不同客户维护多套系统。
密钥管理要"域隔离 + 权限分离"。按产品系列/客户/平台划分独立密钥域,互不串号;签名、审批、审计三类权限分置给不同角色。私钥必须驻留 HSM,满足 FIPS 140-2/3 等级,杜绝私钥落盘或硬编码。
版本钉与回退策略要提前约定。单调版本计数器防回滚是必选项;同时保留有限的灰度回退窗口,避免安全基线版本以下可刷入,但也要防止运维误操作把设备钉死在不可启动版本。
调试端口不能留后门。产线烧录完成后关闭或锁定 JTAG/SWD/UART;确需保留的,采用基于证书的安全调试鉴权,把"谁能调试"也纳入审计。
证据材料的完备度决定合规通过率。从第一天起就把"每台设备的型号、序列号、固件版本、签名指纹、烧录时间、操作人"写入审计库,配合密钥管理文档、三员权限矩阵、验签失败与回滚拦截日志,形成随时可抽取、可举证的合规材料包。
改造节奏求稳不求快。存量设备按"盘点—信任根植入—签名流水线—运维闭环"四阶段推进,先在测试产线跑通全链路再放量,避免一次性切换导致大批设备变砖。对开机耗时敏感的场景,优先选用 ECDSA/SM2 这类验签快的算法,把安全启动对用户体验的影响压到 0.5 秒以内。
落地固件安全启动不是单点功能,而是贯穿硬件选型、产线烧录、后台签名、运维审计的一条工程主线。把信任根扎牢、把签名权关进硬件、把每一次烧录和升级都留下可追溯的证据,才能在面对汽车网络安全合规审查与整车厂供应链安全审核时,拿出经得起推敲的技术与管理双重证明。