3、公钥基础设施(PKI)概念:CA、证书链、信任锚

聊到OTA安全,身份校验是绕不开的坎。而公钥基础设施(PKI),说白了就是一套让数字世界互相信任的规则和工具。你想想看,车厂怎么确认发给ECU的固件是真的?ECU又怎么验证收到的签名不是伪造的?这背后全靠PKI撑着。

我最早接触PKI是在做车联网网关项目的时候。当时觉得这东西太抽象,不就是几个证书来回传嘛。直到有一次,测试环境里证书链配错了,整批设备都连不上服务器……嗯,从那以后我再也不敢小看PKI的每个细节了。

3.1 什么是PKI?为什么OTA离不开它?

PKI不是某个单一技术,它是一整套体系。包括证书颁发机构(CA)、注册机构(RA)、证书吊销列表(CRL)、证书存储库,以及配套的密钥管理策略。

在OTA场景里,PKI解决三个核心问题:

  • 身份真实性:你声称自己是车厂服务器,怎么证明?
  • 数据完整性:固件包在路上被人篡改了,怎么发现?
  • 不可否认性:车厂发了固件,事后不能赖账说没发过。

这三个问题,靠的就是证书和签名。我习惯把PKI比作一个「数字身份证系统」——CA就是发证机关,证书就是身份证,而信任锚就是那个你无条件相信的「根」。没有这个根,整个信任链就断了。

核心要点:OTA安全刷新中,PKI不是可选项,而是必选项。没有PKI,你无法在不可信的网络通道上建立可信的身份校验。

3.2 CA(证书颁发机构)——信任的起点

CA是PKI体系里最核心的角色。它的工作就是签发证书、管理证书生命周期。CA分两种:

类型 特点 OTA场景适用性
公共CA 全球信任,费用高,受浏览器/OS信任 适合车厂对外服务(如官网)
私有CA 自建自管,成本低,仅内部信任 适合ECU、T-Box等嵌入式设备

我在实际项目中,车厂通常采用混合模式:对外用公共CA,对内用私有CA。ECU里预置的是私有CA的根证书,这样既保证了安全性,又控制了成本。

个人经验:私有CA的密钥保护一定要用HSM(硬件安全模块)。我曾经见过一个项目,CA私钥直接存在服务器硬盘上,结果被拖库……那场面,整个信任体系都得重建。

3.3 证书链——信任的传递

证书链,也叫证书路径。它解决一个问题:你怎么相信一张证书是合法的?

举个例子。车厂OTA服务器用的证书,不是根CA直接签发的。中间可能经过:

  • 根CA(自签名,信任锚)
  • 二级CA(由根CA签发)
  • 三级CA(由二级CA签发)
  • 终端证书(由三级CA签发,给OTA服务器用)

ECU验证时,从终端证书开始,逐级向上验证签名,直到找到自己信任的根证书。这个过程就是证书链验证。

我遇到过最坑的事是什么?有一次,证书链里中间CA的签名算法用了SHA-1,而ECU只支持SHA-256。结果链验证到一半就断了。所以,设计证书链时,一定要统一签名算法和密钥长度。

避坑指南:证书链长度不是越长越好。每多一级,验证时间就增加一次签名校验。在资源受限的MCU上,3级以内是比较合理的。我曾经见过一个项目用了5级链,结果ECU启动OTA验证花了8秒……用户都以为死机了。

3.4 信任锚——信任的终点

信任锚,就是那个你无条件信任的根证书。在OTA场景里,它通常预置在ECU的信任根存储区(如eFuse或OTP)。

信任锚有几个关键特性:

  • 不可篡改:一旦写入,就不能通过软件修改
  • 不可删除:即使系统被攻破,信任锚依然存在
  • 唯一性:每个设备可以有多个信任锚,但必须严格控制

我习惯的做法是:在产线烧录阶段,就把车厂的根证书哈希写入ECU的eFuse。这样即使攻击者拿到了固件,也无法替换信任锚。你想想看,没有信任锚,攻击者自己签个证书就能冒充车厂,那OTA安全就形同虚设了。

3.5 PKI在OTA中的完整流程

说了这么多概念,咱们串起来看看实际怎么用。下面这张图展示了OTA刷新中PKI的核心流程:

OTA刷新PKI证书链验证流程 OTA刷新PKI证书链验证流程 根CA(信任锚) 二级CA 三级CA OTA服务器终端证书 ECU验证过程(自底向上) ① 验证终端证书签名 → ② 验证三级CA签名 → ③ 验证二级CA签名 ④ 最终匹配预置的根CA(信任锚)→ 验证通过

流程其实不复杂。ECU收到固件包后,先提取签名和证书链。然后从终端证书开始,逐级向上验证。每一级都用上一级的公钥验签。最后,链顶端的证书必须和ECU里预置的信任锚匹配。匹配上了,整个链才可信。

3.6 实际部署中的几个关键决策

做OTA PKI设计时,有几个点我建议你提前想清楚:

  1. 证书有效期多长? 嵌入式设备不像手机,一用就是5-10年。证书过期了怎么办?我习惯把ECU里的信任锚设成20年有效期,中间证书设3-5年,终端证书1-2年。这样既安全,又方便轮换。
  2. 证书吊销怎么处理? 车联网设备不一定能实时联网。CRL(证书吊销列表)太大,ECU存不下。我推荐用OCSP Stapling或者短有效期证书来规避吊销问题。
  3. 密钥存储在哪? 私钥必须放在安全元件(SE)或TEE里。纯软件存储,在嵌入式领域基本等于裸奔。

重要提醒:千万不要把根CA的私钥放在开发人员的笔记本上。我见过不止一个团队,根CA私钥就在共享文件夹里,密码还是123456。这种「信任锚」还不如没有。

3.7 小结

PKI是OTA安全的基石。CA负责发证,证书链负责传递信任,信任锚负责终结信任。这三者缺一不可。设计时,要结合嵌入式设备的资源限制,合理选择证书链长度、签名算法和密钥存储方案。

我个人习惯,在项目初期就画好证书链拓扑图,明确每个角色的职责和密钥保护等级。这样后期出问题的概率会小很多。你想想看,OTA刷新一旦出安全问题,轻则设备变砖,重则整车被远程控制。这个代价,谁也扛不起。