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的核心流程:
流程其实不复杂。ECU收到固件包后,先提取签名和证书链。然后从终端证书开始,逐级向上验证。每一级都用上一级的公钥验签。最后,链顶端的证书必须和ECU里预置的信任锚匹配。匹配上了,整个链才可信。
3.6 实际部署中的几个关键决策
做OTA PKI设计时,有几个点我建议你提前想清楚:
- 证书有效期多长? 嵌入式设备不像手机,一用就是5-10年。证书过期了怎么办?我习惯把ECU里的信任锚设成20年有效期,中间证书设3-5年,终端证书1-2年。这样既安全,又方便轮换。
- 证书吊销怎么处理? 车联网设备不一定能实时联网。CRL(证书吊销列表)太大,ECU存不下。我推荐用OCSP Stapling或者短有效期证书来规避吊销问题。
- 密钥存储在哪? 私钥必须放在安全元件(SE)或TEE里。纯软件存储,在嵌入式领域基本等于裸奔。
重要提醒:千万不要把根CA的私钥放在开发人员的笔记本上。我见过不止一个团队,根CA私钥就在共享文件夹里,密码还是123456。这种「信任锚」还不如没有。
3.7 小结
PKI是OTA安全的基石。CA负责发证,证书链负责传递信任,信任锚负责终结信任。这三者缺一不可。设计时,要结合嵌入式设备的资源限制,合理选择证书链长度、签名算法和密钥存储方案。
我个人习惯,在项目初期就画好证书链拓扑图,明确每个角色的职责和密钥保护等级。这样后期出问题的概率会小很多。你想想看,OTA刷新一旦出安全问题,轻则设备变砖,重则整车被远程控制。这个代价,谁也扛不起。