尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

基于COM的安全与信息安全联合方案:E2E与SecOC落地实践

基于COM的安全与信息安全联合方案:E2E与SecOC落地实践 最近在跟一个联合项目群邮件里躺着一行标题Firms Team for COM-Based Safety/Security。这行字信息密度挺高的拆开看Firms Team意味着不是单打独斗而是主机厂、Tier1、芯片原厂、工具链供应商多方拉通COM-Based指的是整个方案以COM通信栈为底座Safety/Security又是两个维度同时要搞——功能安全和信息安全一起上。这种组合近几年在智能汽车、工业控制领域越来越常见但真能捋清楚并落地的人不多。这篇文章我打算从项目拆解的角度把这类基于COM的安全/信息安全联合方案讲透。内容会覆盖为什么选COM作为底座、Safety和Security双轨需求怎么落到同一个通信栈上、跨团队联合开发时哪些环节最容易被坑、以及我在实际项目中踩过的问题和排查思路。适合三类人看负责通信中间件和功能安全的软件架构师、正在做AUTOSAR CP适配或COM诊断的工程师、以及需要跟主机厂做安全方案对齐的项目经理。新手也能跟着走一遍思路但建议先对CAN、AUTOSAR有一定概念。1. 项目整体设计与思路拆解1.1 Firms Team背后的工程动机先聊一个关键问题为什么这类项目一定要Firms Team而不能由一家公司关起门来做原因很简单COM-Based的安全方案不是单点技术问题而是链路问题。功能安全要保证信号不错、不漏、不超时信息安全要保证信号不被伪造、不被重放、不被窃取。这两件事从芯片的HSM硬件安全模块到AUTOSAR通信栈再到应用层ASIL级别的软件实现每一层都牵扯不同供应商。主机厂提需求Tier1负责集成和适配芯片厂提供硬件加速能力和AUTOSAR MCAL/HSM固件工具链厂商则提供arxml配置、代码生成和测试验证工具。任何一环缺失链路就不完整。我见过一个项目主机厂在需求文档里写了需要支持E2E Profile 4和SecOC但Tier1之前只做过E2E完全没有SecOC的集成经验。结果方案评审时才发现芯片的HSM根本不支持项目指定的加密算法硬件加速软件模拟耗时严重超标整个周期被打乱。这就是联合团队必须提前介入的原因——需求不能只在文档里传递要在各个团队之间翻译成各自的约束。1.2 为什么COM是Safety/Security的合适底座COMComponent Object Model这个词在不同场景下含义不同。在Windows开发里它指微软的组件模型但在汽车嵌入式领域AUTOSAR COM是AUTOSAR CPClassic Platform中的通信栈组件负责PDU层和Signal层的收发、打包、解包、网关路由等功能。选COM作为安全方案的底座不是因为它功能最全而是因为它确定性最强。AUTOSAR COM是静态配置的——信号怎么映射到PDU、PDU周期多少、超时时间多少都在arxml里写死启动后不会动态变化。这种静态特性和功能安全的目标天然契合你可以提前分析最坏情况下的死线deadline、吞吐量、存储占用从而证明系统在时间维度和空间维度上都满足安全要求。相比之下SOME/IP和DDS这类面向服务的通信功能更丰富动态灵活性更高但也带来了不确定性服务发现需要时间、QoS策略可能动态调整、发布订阅关系可能随时变化。这些特性在对标ISO 26262时很难论证。而COM的静态路由和确定性调度配合OSEK OS的固定优先级调度恰恰是ASIL B到ASIL D项目最需要的可预测性。1.3 Safety与Security双轨需求的统一难题Safety和Security在COM栈上经常打架这是这个项目最核心的难点。功能安全Safety关注的是随机硬件失效和系统性失效要求信号在传输过程中发生错误时能被发现比如位翻转、数据丢失、超时、重复到达。解决方案是E2E保护机制给数据加CRC、计数器、数据ID接收端校验这些字段用状态机追踪数据流是否健康。信息安全Security关注的是恶意攻击要求信号不能被伪造、篡改、重放。解决方案是SecOC在发送端对PDU计算MAC消息认证码接收端校验MAC同时用Freshness Value让每个PDU都带新鲜度防止重放攻击。两者的冲突点在于SecOC的认证和验签会占用大量计算资源增加端到端延迟E2E的CRC校验也需要额外的数据位。PDU的长度是有限的要同时塞下E2E的CRC、Data ID、Counter和SecOC的MAC、Freshness Value又要保证帧周期内能完成加解密和校验参数怎么分配这种权衡不是单个团队能拍板的必须由主机厂牵头Tier1和芯片厂一起拉通评估。我在一个实际项目中见过把SecOC的MAC配置得过长导致CAN FD数据场70%被认证信息占满真正的应用数据只剩一小截业务部门一看差点掀桌。后来通过ISO 21434的风险评估证明当前威胁模型中低风险的攻击路径可以放宽MAC长度才把数据位省了回来。所以双轨需求一定要有一个总体的权衡人不能两边各自为政。2. 核心细节解析与实操要点2.1 COM数据结构SDU、PDU、Signal的层次关系要在COM上做安全方案得先把COM的数据模型吃透。COM的层次从上到下分别是Signal、PDU和SDU很多人在这里绕晕。Signal是应用层能看到的最小数据单元比如车速、油门开度、电池SOC这些。Signal之间是独立配置的每个Signal有自己的长度、字节序、初始值、无效值。多个Signal打包到一个PDUProtocol Data Unit里这也就是CAN帧的数据场内容。PDU层面可以配置周期发送、事件触发、混合触发等模式。SDUService Data Unit严格来说是上层传给下层的完整数据单元在AUTOSAR里常常和PDU对等理解但从ISO/OSI看COM层处理的是Signal到PDU的打包OS层处理的是PDU到Frame的映射。安全相关的E2E保护就是在Signal到PDU这个阶段介入的E2E Profile会在原始的Signal组之外额外加入CRC、Counter、Data ID等字段然后整体打包进PDU。SecOC则是在PDU层面再加一层计算整个PDU包括E2E头和数据的MAC加入Freshness Value再组成最终的发送PDU。实际操作中一个最常见的坑是E2E的Data ID和SecOC的Freshness Value映射到了同一个信号位置编译不报错运行后总是校验失败。因为这两层保护虽然层级不同但在arxml工具里都表现为附加字段配置不仔细就会错位。2.2 E2E保护机制的关键参数配置E2E是功能安全中保护通信的核心机制AUTOSAR里定义了多种E2E ProfileProfile 1/2/4/5/6/7等不同Profile的CRC算法、计数器管理、数据ID分配方式都不一样。选Profile时要考虑信号所承载的ASIL等级、CPU算力、数据长度。以CAN上最常见的Profile 4为例它的结构是Data ID2字节可变可以理解为PDU的身份证 CRC实现时可配通常2或4字节 Counter4位 可选的数据字段。校验逻辑是接收端用相同的Data ID和Counter目标值去比对收到的值CRC用多项式校验来检查数据是否被篡改或意外翻转。配置时的几个关键参数E2E Data ID全网必须唯一。这个ID不是协议自动分配的是你在arxml里手工定的。实际项目中一个域控制器里可能同时跑着几十个E2E信号如果两个Data ID重复接收端会混淆出现明明是A信号的数据却拿B信号的Data ID去校验的奇葩错误。Counter范围和超时窗口Counter是一个4位的循环计数器0到15往复。接收端通过Counter的连续性判断是否丢帧、是否乱序。配合超时窗口Time-Out Times如果超过设定周期没有新数据来E2E状态机就要进入错误态。这里有个经验值周期100ms的信号超时时间建议设置在150%到200%之间即150ms-200ms。太短会有抖动的信号误报太长则真故障时反应太慢。CRC多项式Profile 4用的是CRC16多项式可以配置。一般选0x1021标准CRC-CCITT。低位高位顺序一定要跟发送端对齐两边的字节序搞反是新手最容易踩的坑。2.3 SecOC与HSM的协作方式SecOCSecure On-board Communication是AUTOSAR里做消息认证的标准组件它解决的是消息是否来自可信源、是否被篡改、是否被重放这三个问题。SecOC的核心机制是发送端为每个PDU生成一个Message Authentication CodeMAC并将MAC附加在PDU上同时附带一个Freshness ValueFV新鲜度用单调递增的计数或时间戳来防止重放攻击。接收端拿到PDU后用共享密钥计算MAC并比对同时检查FV是否在预期范围内。在COM栈的位置上SecOC位于COM和PDU Router之间AUTOSAR规范有明确定义。也就是说COM完成Signal到PDU的组装后SecOC会拦截这个PDU计算MAC并追加FV再交给下层发送。接收方向是反过来的下层收到帧后SecOC先验MAC验证通过后再交给COM解包送往应用。MAC计算和验证需要对称密钥和加密算法最常见的是AES-128-CMAC。这里非常依赖芯片的HSM硬件加速。如果芯片的HSM不支持AES-128-CMAC纯软件走AES查表每帧几百微秒到毫秒级的时间在CAN周期的背景下很容易超标。选芯片时要把HSM是否支持SecOC所需加密算法当作硬性指标而不是运行时的加分项。另一个容易被忽视的细节Freshness Value是单调递增的但如果掉电重启后没有持久化存储FV会回退导致接收端认为是在重放旧数据。解决思路是把FV存到NVM或者HSM内部计数器每次启动读取上次的值并继续递增。这个看起来像边缘细节却是我见过项目里漏掉最多的一环。2.4 功能安全与信息安全在COM栈上的协同设计E2E保护的是通信过程发生非恶意错误SecOC保护的是通信过程遭到恶意攻击。两个机制同时存在时先后顺序和冗余别搞反了。规范的做法是SecOC先验证PDU的认证信息确认消息来源可信且不是重放验证通过后再把PDU交给COM层COM层解包E2E机制继续校验数据完整性、计数器和超时状态。这两层在逻辑上是先验信源再验数据完整性的关系——如果消息本身是伪造的先去校CRC没有意义。工程上更常见的顺序问题是有些团队把E2E配置在应用层SecOC配置在COM层两边都在干校验的活但责任边界不清楚。建议在Requirements阶段就写清楚E2E负责防位错误、丢帧、重排、超时SecOC负责防伪造、篡改、重放。两个机制的数据位可以共享一部分比如Counter但逻辑上必须解耦。2.5 安全开发流程上的实操要点在COM栈上做Safety/Security不能只盯着配置开发流程本身也得跟上。ISO 26262功能安全和ISO 21434信息安全都要求全生命周期的流程活动具体到COM栈安全需求分解把顶层安全目标比如防止车辆在行驶中意外加速分解为对通信链路的制约ESC信号必须在100ms内完成端到端传输损坏数据不得通过E2E校验。这里建议用DOORS或者Polarion做需求追溯没有条件用Excel硬撑也要保证每个安全需求都能追溯到具体的PDU或Signal配置。TARA威胁分析与风险评估针对每个通信链路做攻击路径分析确定哪些PDU需要SecOC保护、哪些可以用轻量级方案。TARA不是安全工程师单方的事需要联合开发团队、域控制器工程师、整车EE架构师一起做。一个参与过多个项目的经验是TARA报告的结论如果只落在文档上没有落到配置里那这个TARA等于白做。设计评审COM配置方案、E2E Profile选择、SecOC MAC长度、密钥管理流程都要走正式的评审会议。评审时让第三方安全审计的人参加因为自己人容易看自己人漏问题。我在实操中特别看重需求到配置的可追溯性。如果某一层发了个变更比如把某个Signal的周期从50ms改成了100ms那么E2E超时时间、SecOC的FV窗口、甚至网关路由的转发超时全链路都可能要改。没有一个可追溯矩阵这种改动就是埋雷。3. 实操过程与核心环节实现3.1 联合项目启动需求对齐与接口矩阵这类跨团队项目第一步不是写代码而是把接口矩阵定义清楚。我给一个通用的推进方法由主机厂EE架构团队牵头输出一份通信矩阵CANoe或者Excel都可以推荐用ARXML格式里面明确每个信号的ID、名称、长度、类型、初始值、周期、发送者/接收者、E2E归属、SecOC归属。这份矩阵是所有下游工作的源头。Tier1拿到矩阵后第一件事是核对两个点一是所有E2E Data ID有没有重复分配二是SecOC需要保护的PDU列表是否完整。我见过一个矩阵更新不及时新增了3个PDU但忘了加SecOC结果域控制器到网关上这3条链路裸奔了好几个版本周期。所以矩阵必须有版本管理每次更新都要重新跑一遍冲突检查。3.2 ARXML配置从矩阵到COM/SecOC配置ARXMLAUTOSAR XML是AUTOSAR配置的载体。实际操作中大部分团队用工具比如EB tresos、Vector DaVinci、ETAS ISOLAR来配置但不建议完全依赖工具的图形界面底层arxml的读写能力也得有一点因为排查问题、做CI自动化时经常需要直接看XML。以下是配置一个带SecOC的周期PDU的核心步骤第一步配置Com信号在Com配置项下创建Signal并映射到PDU。以150ms周期的VCU_TorqueCtrl为例包含TorqueRequest16bit、TorqueDir2bit、E2E_DataID16bit、E2E_CRC16bit、E2E_Counter4bit。E2E字段要单独配置在E2E Profile的配置区而不是当作普通Signal随意摆。第二步配置E2E Protection在E2E配置项下选择E2E Profile 4关联到ComSignal。需要设置DataID为0x1234这个值要与ComSignal中的E2E_DataID初始值保持一致CounterOffset、CRCStartPosition等参数按arxml的offset定义填写超时时间设置为200ms最大重传次数设为3次超过3次连续错误则进入安全状态第三步配置SecOC在SecOC配置项下把刚刚的PDU关联到SecOC Protection Profile。需要设置AlgorithmIdentifier为AES-128-CMACMAC长度建议32位4字节在安全性和带宽之间取折中FreshnessValue的长度32位配在PDU尾部密钥IDKey ID关联到密钥管理模块KeyM这里要跟HSM侧的KeySlot对应起来。密钥不直接配在SecOC里而是由KeyM通过安全通道写入HSM第四步代码生成与集成配置完成后工具会生成COM_Cfg.c、SecOC_Cfg.c等文件。把生成代码集成到工程时注意生成文件不要手动大改改动要回到arxml重新生成。改生成代码会导致下次配置刷新时变更丢失CI还会报备份不一致RTE层要配置正确的Runnable关联保证COM层的数据更新能触发E2E计算和SecOC计算集成后第一件事是做个空跑测试不接CAN总线发一个内部回环确认E2E状态机和SecOC验证状态正常3.3 参数计算的工程实践配置参数时很多参数要靠需求 - 约束推导不能随手填。举两个计算例子。例子一E2E超时时间的推导需求转向扭矩请求信号的更新周期是10ms端到端延迟不能超过30ms。若E2E数据丢失一帧系统必须在下一个安全状态触发前反应。计算接收端假设在t0收到最后一帧之后没有新帧到达。E2E超时时间设置值必须覆盖正常传输的最坏延迟含抖动 容忍的丢帧数。若供应商网络抖动实测最坏为8ms单帧丢失容忍为1帧则超时时间 10ms周期 8ms抖动 10ms容忍丢帧 28ms。工程上留15%裕量取32ms。例子二SecOC计算延迟对发送周期的影响需求CAN FD报文周期为5msSecOC需要在发送进程内完成MAC计算不许跨周期。计算假设硬件HSM的AES-128-CMAC计算时间为0.8ms不是绝对时间需要结合芯片手册和实测校准软件从数据写入SecOC到PDU提交给CAN驱动还需要0.6ms则总延迟约1.4ms。在5ms周期里余量充足。但如果选用的芯片HSM计算要2.5ms再加FreerteRTOS调度抖动可能就逼近5ms了这时候要么降低MAC长度、要么用更大的CAN FD CRC分段要么换芯片。3.4 跨团队联调测试与验证现场配置完成后的联调是整个项目的核心考验。我总结一下联合团队在现场会做的几类验证E2E状态机验证用CANoe发送一个带错误CRC的报文观测接收端E2E状态机从OK过渡到INCORRECT再到REPEATED或NO_DATA的过程记录状态的切换时间。CANoe里可以看Trace能直观看到错误优先级和时间戳。SecOC验证用CANoe修改代码逻辑发送一个没有经过SecOC的明文PDU接收端的SecOC必须能识别出来并进入认证失败状态再发送一个篡改MAC的PDU验证replay保护生效。注意在测试环境里需要临时设置一个攻击模式入口但不建议在生产代码里保留这个后门最好通过测试接口或Debug宏隔离。联合故障注入由主机厂EE集成团队主导在整车级别做故障注入比如短路CAN线、干扰总线、模拟ECU异常掉电再恢复。在这些场景下观察COM栈和E2E/SecOC是否按设计进入安全状态是否有漏报或误报。实测记录要保持原始数据。建议在CI服务器上留好每次测试的日志至少保留整车调测时的CAN trace和HSM计数器日志方便后期指标回归。3.5 工具链与版本管理的实操建议联合开发最怕的就是数据源不统一。我在项目里推荐的做法是arxml作为唯一配置源用Git/Git LFS做版本管理禁止把生成的代码直接提交到主干每个发布版本打tagCI自动检查arxml变更是否产生过冲突检查报告密钥材料绝对不能入库。开发阶段的密钥用测试Key量产密钥走专用的密钥管理工具由安全管理员负责与代码仓库隔离多团队协作时建议安排一个专职的配置集成工程师负责处理arxml合并冲突。因为多个团队常常会同时改同一个arxml比如A团队加SignalB团队加E2E字段Git三路合并不一定能自动处理人工合并时如果没有统一规范很容易坏掉配置结构。我在项目中见过最惨烈的一次两个团队在他PE领域的arxml片段把同一个ComSignal的字节偏移改了CI直接编译通过但是运行异常排查了三天。4. 常见问题与排查技巧实录这部分我整理了一个实际排查中的问题速查表每一类我都亲自踩过或者近距离见过分享出来可能比教科书上的排查树更贴近实际。现象可能原因排查思路E2E状态机一直报INCORRECT但信号数据和CRC看着没问题Data ID或字节序不匹配用CANoe抓原始报文手工按E2E Profile计算公式算一遍CRC核对发送和接收端的Data ID和counter起始值SecOC验签经常超时偶发性丢帧MAC计算耗时过长跨越了PDU周期在HSM和SecOC模块处打时间戳量化计算耗时结合芯片手册确认是否使用了硬件加速某个Signal周期性丢失其他Signal正常PDU长度超过CAN FD数据场限制被底层截断或DLC配置错误检查PDU总长度和对应CAN FD帧DLC设置检查CAN驱动中DLC是否固定设了8字节或小于PDU长度加电后第一帧SecOC认证失败之后正常Freshness Value掉电后回退检查FV是否正确恢复自NVM/HSM检查PV initial值是否与密钥版本匹配两个PDU数据包内容相互覆盖PDU或Signal的offset重复分配在arxml工具中检查PDU映射关系用代码生成器的冲突检查定位多个团队arxml合并后编译失败arxml结构合并冲突回退到冲突前的commit用arxml diff工具逐条人工审查后再合入应用层偶尔读到0xFFFF等无效值COM层超时后返回了Default Value确认COM信号级别的超时属性和E2E超时属性各自独立配置应用层需要分别处理这两种状态关于串口和调试资源的一个补充在开发环境中工程师常常会遇到PC端通信调试工具比如CAN卡驱动、串口COM口端口被占用的现象。这里的COM口和本文的AUTOSAR COM完全是两个概念但在联合调试现场特别容易引起误操作本来是要监控AUTOSAR COM的PDU结果花了一上午找电脑串口。建议项目里统一叫法——通信栈层面叫PDU/COM配置调试设备层面叫串口或调试口避免沟通歧义。几个我在实际项目中越用越觉得值得记住的排查技巧抓包要抓原始字节流别只看Vector或CANalyzer解析后的信号。解析后的信号会经过DBC或ARXML映射如果映射表本身错了那分析怎么都找不到真问题。E2E和SecOC的计数器、CRC字段建议在数据记录器里都留原始值。很多现场问题需要回放数据才能判断到底是谁先出错。排查SecOC问题时先确认密钥是否一致。跨团队联调中两个团队用同一个KeyID但持有不同Key值的情况屡见不鲜而且密钥不对时的现象和MAC算法不匹配几乎一模一样。5. 测试验证与量产落地经验5.1 从台架到整车的验证分层COM-Based安全方案的验证不能只在单件测试环境里做要分层级推进第一层是组件级测试验证COM模块和E2E/SecOC模块的单元功能。用C的Unit Test框架比如TESSY跑也可以直接在集成环境里用CANoe做闭环测试。第二层是域控制器级测试验证一个ECU内多个通信任务的集成。此时要重点看CPU负载和内存占用E2E和SecOC的加解密对CPU的消耗在这个阶段就能测出来。一条经验是如果CPU负载超过70%安全关键功能的确定性就危险了需要趁早优化。第三层是整车级验证在真实的网络拓扑中验证多个ECU之间的通信安全性和实时性。这个阶段通常是主机厂主导Tier1出工程师支持。关键测试场景包括网关路由时延、跨域报文在故障状态下的行为、以及信息安全攻击面测试比如通过外部诊断口注入报文。5.2 避免能跑但没法过审的隐藏问题联合安全项目到后期大家最担心的不是功能跑不通而是评审不过。以下这些隐藏问题在量产前必须解决E2E Profile 4要求Data ID在整车范围内唯一但很多项目的工程团队只在单个ECU范围里查重。到网关路由时才发现两个ECU借用了同一个Data ID导致跨域信号互相误判。SecOC的MAC长度在开发阶段为了调试方便设置的比较短比如16位到了量产要改成32位。改长度不只是配置项一变还要考虑PDU长度、HSM内存、通信时序不变。非法帧注入测试有没有做。很多项目只做了正常帧和错误CRC帧没有做在短时间窗口内持续注入大量篡改帧的压力测试。5.3 量产部署的注意事项量产阶段有四个容易被忽略的坑一是密钥注入流程。量产ECU出厂时需要在产线上通过安全通道把密钥注入HSM。这个过程不能占用生产节拍太久所以要在产测阶段优化。密钥的备份、恢复、更换策略也要提前规划好不然车卖了召回换ECU新ECU的密钥跟老网关对不上。二是配置冻结与变更管理。量产之后arxml就是冻结状态。任何通信参数变更都需要走正式的变更评审不能像开发阶段那样随手改。三是OTA对FV的影响。如果车辆支持OTA升级升级过程中FV计数器怎么保存、升级失败后怎么回退都要设计好。否则可能出现升级一次然后整车的SecOC全部失效的灾难。四是文档与证据链。功能安全和信息安全都讲究证据链完整。量产时每个PDU的E2E/SecOC配置版本、测试报告、分析结论都要留档至少保留到车型生命周期结束。6. 最后分享一点个人体会这类COM-Based Safety/Security项目做了几年我最大的感受是技术本身并不神秘——E2E、SecOC、COM的机制在AUTOSAR规范里都写得明明白白真正的难点在于跨团队拉通。每个团队都有自己的KPI和视角主机厂在意整车级安全目标Tier1在意功能实现和成本芯片厂在意算力和性能工具链供应商在意配置效率。当这些视角冲突时如果没有从项目初期就建立安全需求翻译机制后面一定会反复返工。我自己的经验是一定要做一个全局的可追溯性矩阵把安全目标、威胁模型、E2E/SecOC配置、测试用例、评审记录全部串起来。谁改了一处配置就知道会连带哪些信号、哪些ECU、哪些用例要回归。这个矩阵不一定要买昂贵的工具一个结构良好的Excel或者数据库足够支撑大部分项目。另外一个小技巧和多个团队共享arxml时尽量在全量release之前做一次配置冲突预检。把各团队的arxml拿过来合并一次如果合并报冲突先解决再继续开发。不要指望git merge能自动帮你把AUTOSAR的xml结构合并得很完美——这跟普通代码的合并不是一个难度等级。最后做安全项目宁可保守不要冒进。一个信号忘记配E2E保护量产之后要修正的成本是开发阶段的十倍不止。前期的评审、验证、检查多花的时间一定会在后面百倍赚回来。
返回列表