ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

GB 44496视角下的OTA后台设计:从架构演进到落地实践

GB 44496视角下的OTA后台设计:从架构演进到落地实践

这两年只要一聊软件定义汽车,OTA和电子电气架构这两个词基本都会被同时拉出来。尤其GB 44496正式实施之后,OTA后台的设计已经不再是“能不能推送升级包”的问题,而是“在整车电子电气架构之下,能不能把升级这件事做得既安全又可追踪、可回滚”。我最近在梳理一套模拟项目X的OTA后台方案,正好把架构选型、标准约束和后端设计放在一块儿捋了一遍。这篇文章适合正在做车载软件平台、OTA后台或整车诊断刷写相关工作的同行,也适合刚入行、想系统理解这条链路的朋友。

先说结论:OTA后台从来不是一个孤立的文件分发系统。它必须吃透整车电子电气架构的演进方向,还得把GB 44496里关于升级包完整性、来源真实性、访问控制、日志审计的要求全部落到系统设计里。这篇文章我就从架构演进、标准解读、后台方案设计和实操排查四个方面展开,尽量讲得具体一点。

1. 电子电气架构演进给OTA埋下的伏笔

1.1 分布式架构下OTA的后台噩梦

早年传统汽车的电子电气架构是典型的分布式控制,车身稳定、发动机管理、门窗控制、气囊控制各自归不同的ECU管,全车几十个控制器各干各的活儿。这种架构下想把OTA做好,后台系统得面对一个非常棘手的问题:一台车上几十个ECU,每个控制器的刷写协议、刷写流程、版本规则都可能不一样。

有的ECU支持Bootloader刷写,需要先进入编程会话;有的控制器只能通过网关转发某些特定的诊断服务;还有的老平台压根没有配套刷写软件,只能靠产线工位刷写。于是OTA后台在很长一段时间里做的事特别“笨”——把不同控制器的刷写文件打包成一个大杂烩,再靠车端网关逐路分发。后台要维护一个巨大的版本兼容表,还要预判每一类控制器升级失败后的恢复策略。这个复杂度是几何级增长的,出了问题往往要翻好几个节点的日志才能定位。

我当时做那套后台时,光是整理控制器刷写属性表就花了不少时间。这张表要记录每个ECU支持哪些诊断服务、刷写前需不需要高压下电、升级过程中能不能掉电、刷完要不要二次上电确认等等。分布式架构下,OTA后台根本不是一个简单的推送服务,它更像一套“整车级刷写调度系统”。

1.2 域集中架构带来的后台范式变化

后来行业开始往域集中架构走,车身域、动力域、智能驾驶域、座舱域各自归拢,域控制器成了整车计算和控制的中心节点。这时候OTA后台的“管理单元”开始变少,一台车可能就四五个大域,后台只需要向每个域控制器推送升级包,再由域控制器负责域内子节点的升级。这给后台设计带来的变化非常明显:升级任务可以从“针对单个ECU”一下子变成“针对整个域”,版本对齐、任务编排、失败回滚都清爽了很多。

另一方面,域控制器本身的算力更强,车端OTA客户端的升级逻辑也可以做得更复杂。比如可以预先把镜像包缓存到本地,校验通过后再做原子切换;也可以在升级前检查整车电源状态、挡位状态、高压互锁状态,不满足条件就不执行升级。这些逻辑无论是放在车端还是后端,都要求后台具备任务状态机、超时控制、重试策略、灰度发布这些能力。

域集中最舒服的一点是,软件版本和硬件配置可以逐步解耦。同一个域控硬件上,出厂不同软件版本,后台可以通过OTA把软件拉齐。这也是我后面做后台方案时最看重的点:任务编排的粒度从“ECU级”上升到“域级”,后台的并发压力和调度复杂度反而下降了。

1.3 中央计算加区域控制时代的后台演进

再往后就是现在行业里常见的中央计算加区域控制器架构,也有人叫它“中央集中式加Zonal”。中央计算平台(通常是一到两个高算力计算单元)承担整车核心逻辑,区域控制器负责IO、配电和通信路由,软件开始大规模走向SOA服务化。

这种架构下,OTA后台的形态也发生了质变。首先,升级的目标从“控制器的Flash”变成了“计算平台上的容器、服务、中间件”。后台不再只是推一个完整的二进制镜像,而是要管理一组服务的版本依赖关系——比如车控服务升级了,车机端的对应SDK是不是也要跟着升?前端服务后向兼容能不能保证?这时候后台系统必须有软件物料清单(SBOM)管理能力,至少要对每个升级包做依赖解析。

其次,中央计算平台通常跑着Hypervisor或多操作系统,OTA后台要处理“系统级升级”和“应用级升级”两种模式。系统级升级往往需要重启生效,应用级升级则可能做到热更新。后台任务不能总是粗暴地把整车拉到升级模式,要能识别当前升级对象的类型,再决定是让用户靠边停车,还是车在行驶中也能后台完成热更新。

我自己做方案时最喜欢的一种做法,是把后台的“任务模板”设计成可编排的:每个任务定义里写明升级对象、升级模式、前置条件、生效方式、失败动作。车端拿到任务描述后动态执行,后台不写死流程。这套思路跟SOA的理念很搭,也比较能适应从域集中到中央计算的各种架构差异。可以说,电子电气架构走得越靠后,OTA后台就越像一套“整车软件发布管理平台”,而不是简单的刷写工具。

2. GB 44496到底在管什么

2.1 标准出台的背景和适用对象

GB 44496这个名字在这两年的汽车信息安全领域提得越来越频繁。简单来说,它是针对智能网联汽车软件升级信息安全提出要求的技术标准,重点覆盖了远程软件升级(OTA)和线下升级两种场景。标准出台的大背景,是软件定义汽车之后,汽车的安全边界已经不再局限于物理碰撞,还延伸到网络攻击、恶意升级、数据篡改这些全新的风险。

标准适用的对象,我理解下来应该包括整车生产企业、软件升级服务平台提供方以及相关的零部件供应商。换句话说,只要你涉及“把软件送进车里”这件事,这个标准对你的工作就有约束力。实际操作中,很多企业是把标准作为OTA平台开发的输入文件来用的,产品架构评审的时候会逐条对标。

2.2 标准里对后台的硬性技术要求

抛开标准里偏整车层面的内容,单从OTA后台设计的角度看,GB 44496有几个点会直接决定系统长什么样。

第一个是升级包的完整性和来源真实性校验。后台下发的升级包不能被篡改,不能是伪造的,也不能在传输过程中被替换。这听着简单,实际做起来要求后台具备完整的数字签名体系。升级包生成时必须由权威的私钥签名,车端必须内置的公钥或信任链来验签,签名算法和密钥长度还有明确要求。这就不再是“加个MD5校验”那个时代的玩法了。

第二个是远程升级的访问控制。不是随便谁拿到一个诊断仪或者伪造一条指令就能往车里刷软件。标准要求软件升级需要经过身份认证,后台得有权限管理机制,车端也得能识别执行升级的主体是不是合法的服务端。落到后台设计上,意味着要有完整的账号权限体系、证书白名单、车辆绑定关系,甚至对“攻击者控制了某个Tier1的OTA后台”这种场景也要做隔离。

第三个是防降级(回滚控制)。攻击者最常用的一招是把车辆软件回滚到存在已知漏洞的旧版本,然后利用旧漏洞攻击。标准要求升级机制本身要能防止这种非授权的版本回退。后台在发布升级任务时要能对版本号做合法性校验,车端也要记录当前可用的最低安全版本。不是所有回滚都被禁止,比如升级失败后的业务回滚是允许的,但“安全关键版本”不允许被绕过。

第四个是日志和审计要求。升级行为要能够被追踪,谁在什么时候给哪台车推送了哪个版本的软件包,需要在后台留下完整的审计记录。车端也要记录升级结果、失败原因、当前版本状态。这些日志在追溯安全事故、定位恶意攻击行为时至关重要。

2.3 从后台视角理解“证书管理”

GB 44496对证书管理的要求,我单独拿出来说,是因为这是后台方案里最容易做得不规范的地方。标准对软件升级涉及的证书本身有生命周期管理要求:证书怎么签发、怎么分发、怎么更新、怎么吊销,都要有完整机制。

后台系统里通常会有多级证书体系。简单说,顶级根CA不怎么直接干活,它签发一级的二级CA,二级CA再签发用于签名升级包的代码签名证书和用于TLS通信的服务端证书。车端预置的往往不是根证书本身,而是根证书的公钥或者指纹。升级包里携带的签名证书需要能被车端通过信任链溯源到根。

做后台方案时,我强烈建议把证书的生命周期状态做成一个独立模块管理。证书什么时候到期、什么时候需要轮换、紧急情况下能不能吊销,这些如果靠手工去搞,后面一定会出事故。至少要做到证书到期前自动告警,签名模块支持多证书平滑切换。

3. OTA后台整体技术方案设计

3.1 后台与车端的整体拓扑

一套完整的OTA后台,从逻辑上可以分为云端管理平台、升级传输通道、车端升级客户端三层。我习惯把云端管理平台再拆成两部分:一部分负责“管”,包括车辆管理、用户管理、升级任务管理、版本管理;另一部分负责“发”,包括升级包存储、签名服务、任务调度、状态采集。

后台和车端之间通常通过移动网络通信。升级包文件比较大的时候,为了避免下载中断,业界普遍做法是先让车端拿到下载地址和校验信息,然后通过HTTP/HTTPS从对象存储或CDN下载,下载完成后再用后台下发的摘要和签名做校验。任务指令、证书信息这类小数据则走长连接或短连接的消息通道。这里的核心原则是:控制指令和数据文件名分离,下载通道和信令通道解耦,这样即使下载很慢也不阻塞任务控制。

车端这边,负责OTA的执行模块一般是网关控制器或中央计算平台上的一个高可靠进程。它跟后台交互时,至少要做三件事:身份认证、任务协商、状态上报。身份认证保证“跟我通信的是合法的OTA服务端”;任务协商确认“这次升级的车辆型号、硬件配置、当前版本是否匹配”;状态上报则把升级进度实时反馈给后台。

3.2 升级包生成流水线的关键环节

后台最容易被忽略的地方是升级包生成流水线。很多项目前期都以为“只要把编译好的二进制文件传上去就行”,结果到版本管理、签名、测试发布这些环节才发现问题成堆。

我建议把升级包生成做成一条自动化的流水线,大致包含六个环节:

  1. 版本元数据生成。这个环节要把车型、硬件版本、适用控制器列表、依赖的旧版本范围、升级说明、文件清单等信息写成一个JSON或类似的元数据文件。它是车端判断“能不能升”“要不要升”的依据,也是后台做任务派发时做匹配的依据。

  2. 二进制文件收集。从配置管理和制品仓库里获取对应的刷写文件、系统镜像、服务包。这里要特别注意文件和平台架构的匹配,同一份代码可能编译出多个硬件平台的不同产物,绝对不能串。

  3. 哈希计算。对每个文件和整个升级包分别计算SHA-256(标准要求更高的一般用SHA-256及以上),得到完整性摘要。这个摘要在后台存储一份,在车端下载结束后重新计算一遍做比对。

  4. 数字签名。用代码签名私钥对升级包的哈希值做签名。签名算法通常用ECDSA或RSA,对应公钥内置于车端信任链中。签名之后的升级包才算正式发布物。

  5. 发布评审与灰度策略配置。流程上要做一个发布审批动作,同时配置灰度批次、暂停条件、回滚预案。灰度发布是为了避免大批量升级翻车,这个环节必须在后台方案里作为一等公民来设计。

  6. 产物归档与版本冻结。每个发布过的升级包都需要存留档,版本号不可复用。做安全事故溯源的时候,这些归档就是证据。

实际操作中,这六步里最容易出问题的就是版本元数据和实际文件不一致。比如元数据里写了控制器A的版本是1.3.0,实际文件却是从1.2.0的构建记录里拉出来的。所以我在流水线里会加一道自动校验:读取元数据里的文件清单和哈希值,和制品仓库的实际产物做比对,不一致直接构建失败。

3.3 按GB 44496设计的升级流程

把GB 44496的要求落到具体升级流程里,我设计了一版比较通用而且合规性较好的闭环流程:

第一步,车辆注册与认证。车辆首次激活时,后台根据车辆VIN、硬件标识、当前软件版本创建车辆档案,并签发车端证书。这一步相当于给每台车建了一个“身份ID”,后续所有OTA行为都围绕这个ID进行访问控制。

第二步,升级任务发布。发布人员选定车型、目标版本、灰度范围,后台生成任务。任务里包含升级包下载地址、包哈希、签名、升级条件和执行策略。需要注意,这里后台并不直接向车辆推指令,而是把任务“挂”到车辆的任务队列里。

第三步,车辆拉取任务。车辆OTA客户端按照一定策略(比如点火状态、用户确认、夜间空闲时段)向后台请求待执行任务。请求过程中完成双向身份认证,即后台验证车辆证书,车辆也验证后台服务端身份。

第四步,车辆下载升级包。车端通过HTTPS下载升级包,下载完成后计算哈希与后台下发值比对,再用内置公钥验签。验签通过后,升级包才允许进入后续安装流程。

第五步,安装前条件检查。车端确认整车电源模式、挡位、网络连接、剩余存储空间都满足要求。比如高压系统是否下电、车速是否为零、发动机是否停机。条件不满足则不执行安装,等条件满足后再次尝试。

第六步,安装与生效。根据升级对象的类型,可能走控制器Bootloader刷写,也可能走系统分区整体写入。安装完成后进行一次自检,确认版本号、软件完整性、配置有效性都正确。

第七步,结果上报与回滚判断。安装成功则上报新版本号,后台更新车辆档案。安装失败则上报错误码和现场日志,按预定策略决定是本车重试、保持旧版本还是触发回滚。

这七步流程里,真正体现GB 44496精神的是第四步到第七步:升级包必须经过验证才能安装,安装后必须验证才能确认,失败后必须有兜底方案。整套闭环不是为了流程好看,而是为了在每一个环节堵住可能的攻击入口。

3.4 安全通道与密钥体系建设

OTA后台的安全体系,最基本的两个组件是通信加密和代码签名。

通信加密通常走TLS双向认证,也就是车端和后端各自持有证书,在建立连接时互相验证。这样既不担心车端被伪后台诱导下载恶意包,也不担心后台被伪车辆套取升级信息。有些项目觉得双向认证部署麻烦,只做单向认证,我个人是不建议在OTA这种场景里省这一步的。攻击者完全可以制造一台假车辆,不断向后端发送伪造请求,观察返回差异来试探接口漏洞。

代码签名用于保证升级包本身可信。后台签名服务的私钥必须存在硬件加密机里,至少也得存在带密码保护的HSM或KMS里。签名服务对外只提供接口,不暴露私钥。车端的验签公钥则固化在安全启动链里,应用层的OTA客户端会调用安全模块完成验签,而不是自己存一个公钥文件——那样的话攻击者只要改掉本地公钥,签名体系就全废了。

密钥体系建议至少分为三层:根CA离线保存;二级CA用于签发车端证书和服务端证书;代码签名证书用于升级包签名。根CA和二级CA的私钥平时不放在业务环境里,只有做证书签发和轮换时才临时启用。代码签名证书也建议按项目或车型分开,万一某个车型的证书泄露,可以只吊销这一张,不影响全局。

4. 实操解析:一个升级任务从发布到刷写完成的完整过程

4.1 任务发布与车辆版本匹配

后台任务发布时,最核心的一件事是版本匹配逻辑。假设某车系的中央计算平台硬件版本是H3,当前软件版本是V1.2.0,本次升级包的目标版本是V1.3.0,升级条件里声明“仅适用于H3硬件且当前版本为V1.2.0至V1.2.9”。

后台的匹配规则引擎要能解析这条规则。简单做法是给每个升级任务定义普适度和约束条件两个字段。普适度描述“这个包可以升到哪几个硬件平台”,约束条件描述“当前版本在哪个范围内才允许升”。匹配引擎遍历所有目标车辆,把既满足普适度、又满足约束条件的车辆纳入任务范围,其余车辆一律排除。

这一步千万别图省事直接在车辆列表里做人工勾选。车多了以后,人工勾选一定会漏车或者错选,而且不能追溯依据。我见过某项目因为发布人手动多勾了一个车型批次,导致批量升级任务发给了硬件配置不兼容的车辆,最后一大批车回滚。版本匹配规则写在配置里、由系统计算候选车辆,才算靠谱。

匹配完成之后,后台会生成一个批次任务。批次里可以再设置灰度节奏,比如先放10%的量,观察成功率和错误码,1小时后再逐步放开到30%、50%、100%。灰度发布是OTA后台必须具备的基础能力,没有灰度就从“全量发布”做起的项目,早晚会翻车。

4.2 车端升级客户端的任务执行流程

车端拿到升级任务后,第一件事不是下载,而是先做本地检查。我会在任务的下发参数里带上一个“最低允许版本号”字段,车端先把当前版本和最低版本做比对。如果当前版本比最低版本还低,说明这辆车的基础软件太旧,直接走专项流程,不让它走常规OTA通道。

确认可以升级之后,车端进入下载流程。下载过程要支持断点续传,网络断开后可以从上次位置继续。下载完成后,对升级包做两层校验。

第一层是哈希校验。车端先读取元数据文件,拿到每个文件对应的SHA-256值,再逐文件计算本地哈希进行比对。有任何文件不匹配,直接判定升级包损坏,终止升级并上报错误码。第二层是签名校验。车端把升级包的整体哈希值提取出来,用内置公钥对签名进行验签。验签不通过,大概率说明升级包被替换过,同样要终止。

这里有个细节:签名校验的对象是哈希值,而不是整个文件。整个文件太长,非对称算法算起来性能不好。车端的做法一般是把签名值解密,和本地计算的升级包哈希做比对。如果解密得到的结果和哈希值相等,就说明这个升级包确实是由持有私钥的后台签发的,且哈希值确实对应当前文件。

校验通过后,车端把升级包解压到临时分区,记录当前版本和回滚状态。接下来进入真正的安装环节。如果是控制器刷写,车端会通过CAN或以太网诊断通道向目标控制器发送编程会话请求,然后执行擦除、写入、校验的步骤。如果是系统镜像升级,则可能直接在启动管理器的配合下切换到备用分区。

安装过程中最怕的是意外掉电。硬件设计上通常会做掉电保护,但软件层面也要有对应策略:写入过程中每写完一个块就记录一次进度,下次上电时如果检测到未完成的写入,可以选择继续或回滚。

4.3 回滚与防降级机制的落地实现

回滚机制在OTA后台里分两个层面:业务层面和技术层面。

业务层面的回滚是指升级任务发布后发现重大缺陷,运营人员紧急中止剩余批次的升级。后台应该支持“停止下发”“强制取消”和“节点回滚”三种操作。停止下发只影响还没拉到任务的车;强制取消会让正在下载的车立刻停止并删除缓存;节点回滚则针对已经升级完成但发现异常的车,再推送一个修复版本或直接退回上一版本。

技术层面的回滚是车端自带的能力。为了安全回滚,我建议车端始终保留至少两套可用固件版本:当前运行版本和上一稳定版本。升级时把新版本写入非活动分区,验证生效后再标记为活动分区。如果新版本启动失败或关键自检不通过,启动管理器回退到上一版本。

防降级和回滚是一对矛盾,处理这个矛盾就是GB 44496里“有安全要求的版本”不能随意回退的关键。我的做法是给版本号加一个“安全级别”字段。含有安全修复的版本,比如修复了远程攻击漏洞的安全版本,会被标记为“防降级版本”。车端在做回滚判断时,如果已经处于防降级版本,则任何回滚操作都会被拦截;只有在未升级到该安全版本时,才能从新版本回退到旧版本。

这块逻辑很容易被人忽略。我见过有项目把所有回滚都做了,唯独没想过“回滚到旧版本可能引入已知漏洞”。结果车辆新版本明明修复了一个远程代码执行漏洞,攻击者却通过诱导车辆回滚到旧版本成功攻击。防降级机制一旦上线,基本可以堵死这个路径。

5. 常见问题与排查技巧实录

5.1 证书过期与时间源不同步

OTA后台最常见的故障集中在证书维度。证书有过期时间,车端在验签时会把“当前时间”和“证书有效期”做比较。如果车端系统时间不准确,比如长时间断电导致RTC归零,验签就会失败,升级任务卡在下载完成后的校验环节。

排查这类问题,第一个动作是查看车端上报的错误码。如果是证书相关错误,再对比后台证书签发记录和车端当前时间。很多时候问题不是证书真的过期了,而是时间没同步。解决方案有两层:一是车端联网后先做NTP时间同步,再执行验签;二是后台证书体系里把有效期设置得足够宽,并且提前做智能告警,有效期剩余30天时就开始提醒轮换。

我踩过的一个坑是证书轮换时旧证书被提前吊销。当时有个测试车队,部分车辆不经常联网,后台吊销旧证书后,这些车在下一次连接时用旧证书做双向认证,直接被拒。后来我们的策略是吊销证书之前先观察一段时间,确认没有活跃连接再吊销,并且至少保留一张兼容证书作为过渡。

5.2 升级包下载中断与校验失败

车辆行驶在信号差的路段,升级包下载到一半断掉是常态。后台和车端的下载协议一定要支持断点续传。如果断点续传实现不好,车辆反复下载完整包,既耗流量又容易失败。

下载完成后校验失败的情况,很多时候是CDN缓存或者代理服务器搞的鬼。某些区域网络的缓存服务会拦截请求并返回一个旧文件,跟后台实际下发的包不一致。我建议下载时在URL里带一个动态签名参数,时间戳和车辆标识参与签名,这样就能尽量避免被公共缓存误命中。如果车端校验失败,不要只重试,最好换一个下载源,比如从备用的对象存储桶下载。

另外,升级包文件过大也会提高下载失败概率。如果可以,尽量把包拆分为多个分片文件,车端可以按分片下载和校验,某个分片坏了就只重传那个分片。这种做法的好处在弱网环境特别明显,整车镜像动辄几GB,不拆分的话一次下载失败等于全废。

5.3 控制器版本兼容性冲突

升级过程中最容易出现的“例外情况”,是后台认为这辆车可以升,结果车端某个控制器版本不在兼容列表里。比如中央计算平台升级了,但它要协同工作的某个传感器ECU版本太老,新平台没法跟它正常通信。

这类问题在架构上属于“依赖冲突”。后台的版本管理模块,建议一定要支持“自上而下的依赖解析”。也就是说,升级任务发布时,后台不仅要检查车辆整体是否匹配,还要模拟计算升级后的软件组合是否在已知的兼容矩阵内。兼容矩阵需要产品团队维护,但后台必须有能力去运行这个检查逻辑。

如果实在没法提前拦截,车端在升级前的条件检查阶段也要做一次版本协商。目标控制器回复自己的版本号,车端客户端拿这个版本号和任务要求比对,不合格就中止升级。这一条就算不能100%防住问题,至少能阻止问题扩大化。

5.4 后台日志如何辅助定位现场问题

OTA日志的重要性怎么强调都不为过。我处理过不少线上问题,终端用户描述永远是“升级完了以后雷达不好用了”或者“升级失败,提示错误”。如果没有详细的日志,这类问题根本没法定位。

后台需要至少记录五类日志:

  • 任务操作日志:谁在什么时间创建、审批、暂停、终止了哪个批次任务。
  • 车端交互日志:车辆每一次请求任务、上报状态、下载进度的完整时间线。
  • 升级包审计日志:升级包何时生成、由哪个构建流水线产物、签名指纹是什么。
  • 证书日志:证书签发、更新、吊销、到期的全生命周期记录。
  • 错误码日志:车端上报的所有错误码、错误描述、车型、软硬件版本集合。

车端这边,我建议错误码设计要有层次。比如“E1001”表示“升级包校验失败”,后面再跟子码说明是哈希不匹配还是签名不匹配。车端最好把当时的车辆状态、关键模块版本、电源状态一并打包到错误上报里。后台收到错误码后,自动关联车辆档案和任务记录,生成一条带上下文的事件,这样排查效率会高很多。

日志系统还有一条容易被忽视的要求:日志本身不能被随意篡改。GB 44496里对日志有审计要求,后台设计上应该考虑给关键日志加哈希链或者利用存证服务做防篡改锚定。不然真出事的时候,日志可能被攻击者删除或者改动,审计链条就断了。

6. 一点实践体会

从我实际做过的几个项目来看,GB 44496对OTA后台方案的约束,本质上是把“能升级”推向了“安全地升级、可控地升级”。很多团队一开始都觉得“不就是做个文件推送嘛”,但真正对标标准之后才发现,证书体系、防降级、审计日志、灰度发布、回滚兜底,每一个模块都得认真设计。这些工作前期看着繁琐,后期能省掉极其多的麻烦。

我个人的建议是,新项目启动OTA后台设计时,优先把“升级包签名与验证”和“任务状态机”两块做扎实,这两块是骨架中的骨架。其他的模块可以后续迭代,但这两个一旦返工,涉及的面会非常广。另外,有条件的话,尽早让信息安全团队介入评审,别等平台上线了再补合规,那时候改起来既痛苦又容易留死角。

最后分享一个小技巧:车端OTA客户端的验签逻辑,一定要跟安全启动链打通。也就是说,OTA下载的升级包不仅要能被应用层验签,在系统重启加载时也要经过启动管理器重新校验一遍签名。这样就算应用层被绕过,启动链上还有一道防线。这个设计越早做越好,后期加会牵扯到Bootloader和系统分区的改动,成本完全不同。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进