
1. 安全架构的“地图感”从整体视角看自动驾驶系统的安全边界安全架构这个系列写到第三篇我打算换个聊法。前面两篇把功能安全ISO 26262、预期功能安全ISO 21448和网络安全ISO 21434各自的概念框架拆了一遍很多朋友反馈说“标准条文看懂了但一回到项目里还是不知道怎么下手”。这其实特别正常因为标准给的是“要求”不是“图纸”。就像你手里有建筑规范但不代表你能直接盖出一栋楼。所以这一篇我想把视角拉高一点聊聊我在实际项目中理解的自动驾驶安全架构到底是什么样的——不是说功能安全、预期功能安全、网络安全三本标准各管一摊而是它们怎么在一个真实的自动驾驶系统里咬合在一起形成一套能落地、能评审、能扛得住事故回溯的安全边界。先说一个我自己的判断自动驾驶系统的安全架构本质上是在回答三个问题。第一系统在正常工作时能不能在所有预期的运行场景里把安全风险控制到可接受水平这是预期功能安全的范畴。第二系统在某个零部件发生随机硬件故障或软件系统性故障时能不能及时进入安全状态不导致危害事件这是功能安全的范畴。第三系统在被恶意攻击者针对时能不能保证驾驶相关功能的完整性和可用性不被篡改、不被劫持、不被拒绝服务打瘫这是信息安全的范畴。这三个问题互相独立又互相交叉但很多团队在项目初期容易犯一个毛病把三拨人分开干功能安全团队画FTA预期功能安全团队建场景库网络安全团队做威胁分析最后在系统集成时发现彼此的设计假设冲突。举个我实际遇到的例子。功能安全团队给智能驾驶域控制器提出的安全目标是“在行车过程中若感知结果失效系统需在300毫秒内进入最小风险状态MRC”。这个300毫秒的要求会往下分解到感知、融合、决策、执行各个模块。但网络安全团队在做威胁分析时发现如果攻击者通过OTA降级包或诊断通道篡改了制动控制单元的软件那么功能安全假设的“执行层可靠响应”就不成立了。反过来预期功能安全团队又发现在雨天逆光的环境里摄像头感知性能下降是预期内的功能不足这不是“失效”而是“性能边界”不能按硬件故障的300毫秒来处理。你看同一个场景三拨人对“系统处于什么状态”的假设都不一样如果架构上没有一个统一的分层模型和决策仲裁机制后面做什么都是拧巴的。所以我在这一篇里想重点展开的是我自己总结的一套“安全边界”思考框架以及它在实际项目里怎么推演和落地。这套框架不一定权威但是它帮我在好几个量产项目里把安全问题讲清楚了也扛过了不少专家评审的连环追问。我会尽量用大白话拆开讲分层防御的每一层到底拦什么、怎么拦冗余和仲裁机制怎么设计才不是“为了冗余而冗余”功能安全和信息安全怎么共享同一个“安全状态”定义以及最后安全架构验证到底怎么验收不是光看测试报告堆了多少条用例就算完事。有人可能会问标题叫“漫谈”内容是不是会很散我的想法是漫谈不意味着没逻辑。恰恰相反真正要把自动驾驶系统安全架构这件事聊明白必须得有一条主线把所有零散的知识点串起来。这条主线就是我前面说的三个问题和一套分层决策机制。你可以把自动驾驶系统想象成一个不断“感知—决策—执行”的循环安全架构就是在这个循环的每一个环节上用冗余、监控、降级、隔离等手段确保任何一个环节出错或者被攻击都不会导致车辆进入不可控状态。下面我从五个维度来展开。2. 分层防御自动驾驶系统里的纵深安全边界2.1 从“单层防护”到“纵深防御”——为什么安全不能靠某一项牛逼技术在聊自动驾驶的安全架构之前我想先纠正一个经常在技术社区里看到的误区很多人觉得只要用了激光雷达或者只要用了高精度地图或者只要用了Transformer大模型车辆就“足够安全”了。但真实事故里很少是某一个传感器或者某一个模型单独出问题而是多因素叠加的结果。感知漏检了决策却过于激进决策已经输出紧急制动了执行机构却因为通信延迟慢了一拍执行机构响应了但车辆因为路面湿滑仍然没能在安全距离内停下。这种多因素叠加的失效场景靠任何单一技术都防不住。所以真正靠谱的安全架构必须是一种“纵深防御”Defense in Depth结构。所谓纵深防御就是在感知、决策、执行、通信、运维等每一层上都设置独立的安全保障机制使得即便某一层被突破下一层仍然能够兜底。这个概念最早来源于军事防御后来在网络安全领域被广泛使用在自动驾驶安全架构里也完全适用。你可以这么理解不是筑一道“不可摧毁的墙”而是筑好几道“不是那么容易被同时攻破的墙”。具体到自动驾驶系统里纵深防御可以看作这样几个层次传感器层的自检与合理性校验。比如摄像头图像质量评估、激光雷达点云完整性校验、GNSS信号异常检测。这一层的任务是尽早发现问题避免“脏数据”进入融合模块。但它的能力有限因为传感器只能自检“自己是否工作正常”没法检查“自己是否被强光/大雨/污损干扰导致性能下降”。感知融合层的冗余与一致性校验。多传感器交叉验证比如摄像头检测到前方有行人毫米波雷达也检测到同一个目标融合模块才会置信。如果某个传感器单独输出了一个超乎物理规律的目标比如突然出现在空中融合模块应该有处理机制将低置信度的离群值剔除。决策规划层的安全边界约束。即便上游感知给出目标物规控单元也必须对速度、加速度、避撞路径做出安全边界内的规划。比如在任何情况下车辆都不允许以高于某个阈值的速度逼近前方静止障碍物紧急制动的最小减速度必须满足物理极限和法规要求。这一层是做“安全兜底”的关键。执行控制层的失效安全与失效可运行处理。制动、转向、驱动系统的冗余执行结构配合失效检测和降级控制策略。比如制动系统采用ESP 冗余制动单元的双通道设计转向系统采用EPS 冗余转向机当检测到主通道失效时冗余通道能在几十毫秒内接管。整车级的人机共驾与远程监控兜底。当L3及以上系统无法处理时提示驾驶员接管在网联场景下云端监控平台可以下发降级指令。这是最高一层的兜底策略。每一层都有自己的检测机制和响应策略。层与层之间不是孤立的而是通过“安全状态机”串联起来。我后面会专门讲这个状态机怎么设计。2.2 安全边界与“性能边界”的区别在预期功能安全SOTIF的语境里有一个很容易混淆的概念安全边界Safety Boundary和性能边界Performance Boundary。我最早接触这个概念时也绕了很久。后来我用一个例子把它理清楚了假设一个AEB自动紧急制动系统设计指标是“在车速60km/h以下对静止车辆能够完全刹停”。那么“60km/h”就是它的性能边界——超过这个速度系统仍然在工作但它不能保证完全避免碰撞只能保证减轻碰撞程度。而“在系统误触发时减速度不得超过某个会让后车追尾的阈值”这是安全边界——无论系统是否正常工作它都不能越过这条线否则会造成新的危害。性能边界取决于你用了什么传感器、什么算法、多少算力本质上是“你有多大本事”。安全边界取决于你愿意承担多大的风险本质上是“你给自己划的底线有多低”。在安全架构设计时必须把这两条线同时画出来并且给它们留出足够的“间隔”。如果性能边界和安全边界靠得太近比如AEB只能在距离障碍物0.5米处触发制动而制动系统的响应延迟和车辆减速度物理极限决定了从触发到完全刹停需要至少1.5米的距离那么这个系统无论怎么调参都是不安全。我在做安全评审时经常会问项目团队一个问题“你这条安全边界是怎么来的是仿真里标定的还是从法规标准里查到的还是从事故数据里归纳出来的”很多团队回答不上来。说实话安全边界不能靠“感觉”定它必须来自一条可追溯的推导链危害事件分析→风险接受准则→安全目标→安全需求→系统设计参数。比如前面AEB的例子安全目标“避免以超过4m/s²的减速度进行非必要的紧急制动”就可以往下推导出“AEB触发逻辑必须在置信度高于阈值时才介入”“每24个月的误触发次数不得高于某数值”等系统需求再往下才到软件参数和标定阈值。2.3 用一个“三域模型”把安全边界分清楚我在实际画架构图的时候习惯把自动驾驶系统按“感知域—决策域—执行域”三个逻辑域来划分每个域都有自己的安全边界和失效处理机制。这不是什么新理论但我觉得这是最简单的沟通框架项目组里无论是搞算法的、搞硬件的还是搞安全的同事都能用它对齐认知。下面用一个表格把这个三域模型的核心内容列出来逻辑域核心功能主要失效模式安全机制举例对应的安全活动感知域环境感知、定位、目标检测与跟踪传感器故障、感知性能受限、算法误检漏检传感器自检、多源融合校验、感知性能边界监控、降级为功能受限模式SOTIF场景分析、功能安全FMEA、感知算法鲁棒性验证决策域行为规划、轨迹规划、速度控制决策算法逻辑缺陷、算力不足导致超时、输入数据异常控制优先级仲裁、安全状态机、多算法冗余投票、看门狗超时监控功能安全FTA/DFA、SOTIF触发条件分析、安全状态定义执行域转向、驱动、制动执行执行器卡滞、通信丢失、液压/电气失效执行器冗余、故障降级策略、最小风险状态MRC自动触发硬件FMEDA、安全机制验证、降级策略标定这里有一个很容易被忽略的细节三个域的安全边界并不是独立存在的而是必须通过“跨域契约”Interface Safety Agreement来约束。什么叫跨域契约就是感知域在什么条件下必须告诉决策域“我不可信了”决策域在什么条件下必须命令执行域“进入安全状态”执行域在什么条件下必须“无视决策域的命令”。举个具体例子如果感知域检测到GNSS信号被干扰、定位置信度下降到阈值以下它必须向决策域发出信号决策域收到这个信号后必须触发降级策略——比如从L3的ODD内运营降到L2的驾驶员辅助模式或者规划一条在当前可行驶区域内的安全停车轨迹执行域在执行停车轨迹时如果发现制动压力响应异常它有自己的判断逻辑可以直接触发液压锁止或冗余制动通道而不是死等决策域的新指令。这个跨域契约如果定义得模糊三个域之间就会出现“责任真空”。我在实际项目里见到的典型问题就是感知域认为自己已经把“感知不可靠”的信息发出去了决策域认为自己收到降级信号后已经输出“停止”指令了执行域认为自己已经执行了“制动”命令但整条链路的延迟叠加起来车辆还是在出事的边缘多往前溜了半秒。这半秒就是安全架构设计时最需要抠的细节——安全通信的时效性、故障传播路径的延迟预算、以及每个域在超时未收到响应时的默认行为。3. 冗余与仲裁核心技术机制是怎么设计的3.1 冗余不是堆料——先分清“同构冗余”和“异构冗余”在功能安全设计里冗余是绕不开的话题。但我必须说很多项目团队对“冗余”的理解过于简单以为多加一个传感器、多加一块域控制器就代表系统更安全了。实际上冗余设计的核心难点不在“多”而在“异”和“断”。“异”是指冗余通道之间最好是异构的不能是同一种方案复制粘贴“断”是指冗余通道之间必须做到故障隔离不能因为共因失效而同时宕机。为什么异构冗余这么重要用一个最经典的例子如果主感知方案和备份感知方案都是基于摄像头的深度学习目标检测那么当遇到摄像头被泥污遮挡、强逆光、或某种罕见的对抗性攻击时两个通道很可能同时失效因为它们面对的是同一个退化条件和同样的算法盲区。反之如果主方案是激光雷达毫米波雷达摄像头融合备份方案是纯毫米波雷达的简单目标检测逻辑那么至少在摄像头被遮挡的场景下备份方案仍然可以提供基本的目标物距离信息。我在一个真实的L3级高速公路领航项目里见到过这样的设计主感知通道用的是前融合方案把所有传感器的原始数据丢进一个BEV鸟瞰视角神经网络里输出目标物列表备份感知通道用的是非常传统的雷达点云聚类摄像头车道线检测方案不依赖大规模算力逻辑完全可解释。主通道负责正常工况下的高性能感知备份通道只负责在低速、近距离场景下判断“前方是否有障碍物”“车道线在哪里”这两个基本问题。这样的设计虽然性能上限低但好在逻辑简单、可靠性高、不容易被同样的感知盲区卡住。而且因为备份通道的算法逻辑简单它的功能安全认证成本也低很多——你不需要为一个几十层深的神经网络去证明它“对所有输入都安全”只需要对几条清晰的规则做形式化验证。“断”的问题同样关键。如果你把主备两套感知方案跑在同一个域控制器上共用同一个电源、同一块散热片、同一个操作系统实例那么一旦这快域控制器因为硬件故障或软件死机而整体失效两套感知方案同时“陪葬”——这就叫共因失效。真正的冗余要求关键通道之间做到物理或逻辑上的隔离独立的电源树、独立的时钟源、独立的通信总线、甚至独立的故障检测机制。做到物理隔离成本很高所以实际项目里往往用“逻辑隔离物理分区”来折中比如在一个SoC上用多个锁步核lockstep core跑ASIL-D的安全监控逻辑用另外的性能核跑感知算法两边通过核间通信同步但故障域是分开的。3.2 决策仲裁机制当两个“大脑”意见不一致时听谁的多层冗余设计带来的一个直接问题就是多个感知通道、多个决策通道输出结果不一致时系统到底听谁的这就引入了仲裁机制。自动驾驶行业里最常见的仲裁算法是“多数表决”和“优先级仲裁”两种。多数表决适合同构或异构度不高的冗余通道比如三套同样的AEB触发逻辑输出“是否触发制动”三局两胜。但多数表决在异构冗余场景下会有问题——通道之间的能力差异很大高性能的主通道往往能检测到更远、更细小的目标备份通道却只能检测到近距离的大目标。如果两者差异太大投票结果反而会把主通道的正确检测给平票掉。所以我在实际项目里更倾向于“基于风险等级的优先级仲裁”。什么意思呢先把系统的决策输出按风险等级从高到低分类——比如“立即紧急制动”“减速避让”“保持当前状态”“巡航加速”。然后约定高优先级的安全动作可以被更高安全等级的机制直接触发不需要等所有通道达成共识。举个例子如果主感知通道检测到前方有静止车辆备份感知通道什么也没检测到因为距离太远超过备份通道的能力范围这时仲裁模块不会因为“两个通道不一致”就把紧急制动请求驳回而是会遵循“感知置信度加权”的规则对可信度高的主通道给予更高的决策权重。反过来如果备份通道检测到前方有障碍物而主通道输出“无障碍物”这个时候反而要谨慎——可能是主通道出了故障也可能是备份通道误检。此时仲裁逻辑应该优先触发保守动作先减速再重新评估。这里有一个容易被忽视的原则仲裁机制本身也需要被监控。如果仲裁逻辑自己存在bug或者仲裁模块自己的算力不足导致决策延迟整个冗余系统同样会失效。所以仲裁模块往往要跑在一个独立的、满足ASIL-D等级要求的安全MCU上并且要有看门狗监控它的运行周期。我在项目评审里经常讲一句话冗余系统里最危险的不是冗余通道本身失效而是那个判断“谁失效”的仲裁者失效。3.3 最小风险状态MRC与降级路径的流程设计当系统检测到自身能力下降或者出现故障时它不能直接“躺平”什么都不干而是必须主动选择一个安全状态过渡策略。这个策略在行业内叫“最小风险状态”Minimal Risk ConditionMRC或“最小风险操纵”Minimal Risk ManeuverMRM。通俗地说就是当车辆意识到自己“开不下去了”时它应该怎么做才能把风险降到最低——是原地刹停是缓慢靠边停车是提示驾驶员接管还是继续行驶到下一个安全区域这个选择不是拍脑袋定的而是要根据当前场景动态判断。我在一个记忆泊车项目里设计的降级路径分四档第一档性能轻微下降比如高精度地图定位精度从±10cm变为±30cm系统仍然可以继续运行但需要降低车速、缩小可行驶区域、并向驾驶员显示“系统性能降级”提示。第二档功能受限比如感知模块丢失了侧向毫米波雷达数据系统无法安全完成自动变道但可以维持当前车道内的巡航。此时系统应主动禁止变道功能并降低巡航速度上限。第三档需要接管比如决策域控制周期超时系统无法保证安全完成规划。此时系统应发出接管请求并保持一个安全减速曲线在驾驶员未响应时逐渐减速到停车。第四档立即停止比如制动主回路失效唯一可行的就是触发冗余制动通道以最大允许减速度刹停并打开双闪。这四档降级路径对应一个安全状态机。状态机里的每个状态都有明确的进入条件、停留条件和退出条件。从正常状态迁移到降级状态必须由一个独立的、满足功能安全要求的“健康监控模块”来触发而不能依赖主决策通道自己评估自己——让运动员当裁判这个逻辑行不通。我来补一个状态机示例级别的描述不用Mermaid用文字安全状态机包含四个主状态NOMINAL正常运行→ LIMP_HOME跛行回家→ REQUEST_TAKEOVER请求接管→ MRC最小风险状态。任何状态下只要健康监控模块检测到不可恢复的严重故障都可以直接跳转MRC。状态跳转条件必须满足FTTI故障容错时间间隔要求。例如从NOMINAL到MRC的跳转必须在一个安全周期内完成根据不同场景一般要求100ms到1000ms。这里最核心的设计要求是每个状态里车辆的运动学行为必须是确定的。也就是说只要系统进入了某个状态车辆接下来该怎么走、速度怎么变、加速度曲线是什么——都必须是预设好的、可验证的。不能出现“系统进入降级状态后在临时决策该怎么停车”这种情况。原因很简单临时决策意味着没有经过充分测试和验证未知的行为在安全评审里是不可接受的。4. 当信息安全遇到功能安全交叉分析的实战方法4.1 攻击面盘点黑客是怎么“混进”安全边界的前面的内容基本还在“系统自己出错”的范畴里打转现在我要把一个更头疼的问题拉进来外部攻击者。很多传统功能安全工程师对信息安全的第一反应是“不关我事”——觉得车辆的安全只要靠物理冗余和故障检测就够了。但真实的自动驾驶系统是一个高度联网的计算平台有远程OTA、有路侧协同V2X、有车内的蓝牙/Wi-Fi入口、还有层出不穷的第三方应用。每一个入口都可能成为攻击者渗透的路径。历史上已经发生过通过OBD诊断接口入侵车辆网关、通过娱乐系统的Wi-Fi漏洞远程控制车辆制动系统的真实攻击案例这已经不是理论上的威胁了。我在项目里做安全架构分析时第一步永远是把系统的“攻击面”全部盘出来。攻击面不是指系统的功能模块而是指所有“外部输入能够影响内部状态”的路径。我把常见的攻击面分成这几类无线通信接口蜂窝网络4G/5G、V2X、蓝牙、Wi-Fi、NFC、遥控钥匙。这些接口暴露在外部攻击者不需要物理接触车辆就能发起攻击。物理接口OBD诊断口、USB口、车载以太网调试口。虽然有物理接触限制但在停车场、维修店、共享出行场景下仍然有被接触的可能。传感器欺骗GPS欺骗、激光雷达/毫米波雷达的电磁干扰、摄像头的光学干扰比如贴纸攻击。攻击者不需要入侵软件只需要“欺骗”传感器就能影响感知结果。云端与服务端车辆与云端之间的通信链路、OTA升级包、远程监控指令。攻击者如果攻破云端账户或OTA签名校验机制可以远程向车队下发恶意指令。每一条攻击路径都会对应一个或多个安全属性目标机密性、完整性、可用性、真实性。网络安全团队通常会把这些威胁分析做成一份TARAThreat Analysis and Risk Assessment威胁分析与风险评估报告。但这里我要着重强调一点TARA不能孤立做它必须和功能安全的安全目标做交叉比对。4.2 攻击影响到底会伤到功能安全哪块——一个案例推演让我用一个具体案例来演示功能安全与信息安全的交叉分析。假设一个L3级自动驾驶系统其功能安全分析中有一个ASIL-D等级的安全目标“车辆在行驶过程中制动控制指令必须在20ms内被正确执行。”对应的功能安全机制包括制动控制单元双通道冗余、通信总线健康监控、执行器响应超时检测。看起来这套机制足够结实但如果我们从攻击者的视角来审视就会发现问题攻击者通过车载信息娱乐系统的漏洞获得代码执行权限后可以尝试向CAN总线发送伪造的“关闭制动冗余通道”的指令或者更阴险地——向网关注入大量高优先级CAN消息把制动控制单元的真实指令挤在缓冲区后面造成通信延迟从20ms拉长到200ms。功能安全设计假设的是“通信总线是可信的、随机故障可检测”但攻击者可以定向制造“非随机故障”——它不触发总线错误而是让总线上同时存在合法消息和恶意消息让每条合法消息的排队时间变长。这个过程说明一件关键的事功能安全机制能不能在攻击场景下仍有效取决于它是否把“恶意竞争”作为失效模式纳入分析。如果原始功能安全分析只假设“总线最多有X%的随机位错误率”而没有考虑恶意节点可以持续以100%占空比发起消息洪泛那么安全机制在攻击场景下就是形同虚设。所以我在做交叉分析时会明确做一遍“功能失效×攻击手段”的组合矩阵逐条检查每个功能安全机制在面对主动攻击时是否仍然有效。表格里是这个组合矩阵的典型样式只列出部分条目功能安全机制主要应对的随机失效模式攻击手段是否可能绕过该机制需要新增的信息安全控制措施双通道冗余制动单通道液压失效或控制信号丢失恶意节点伪造“通道B故障”状态导致系统提前降级总线消息认证SecOC身份权限管理通信超时监控信号延迟/丢帧消息洪泛导致合法消息延迟伪装为“偶发超时”CAN消息速率限制、入侵检测系统IDS监测异常流量安全状态机跳转逻辑错误或数据异常篡改健康监控模块的输入信号伪造传感器异常触发MRC验证健康监控模块输入的来源真实性签名校验OTA升级包完整性升级包损坏/不完整替换升级包为恶意软件篡改引导加载程序验签机制、安全启动Secure Boot、硬件信任根这种组合矩阵的价值在于它强迫功能和网络安全团队必须坐到同一张桌子上而不是各交各的报告。我参与过的一个量产项目里威胁分析最初只覆盖了云端和IVI娱乐系统因为那是传统网络安全最关注的薄弱点。但当我用这个组合矩阵检查时发现攻击者如果拿到了网关的调试权限可以直接篡改“转向角传感器”的信号。转向角传感器的数值一旦被伪造车辆动态稳定控制ESP就可能在一个弯道上错误触发制动干预导致车辆失稳。这个后果严重级别非常高。最终我们要求在网关上增加了SecOC消息认证并强化了转向角传感器的信号一致性校验。这是单纯靠网络安全或者单纯靠功能安全都覆盖不到的点。4.3 安全网关与隔离设计别让一个入口变成“全线崩溃”解决了“攻击者能从哪里进来”和“攻击会造成什么功能安全后果”两个问题后接下来要回答的是“怎么把攻击限制在小范围内”。这就涉及安全网关和隔离设计。现代车辆电子电气架构已经不再是传统的分布式CAN网络而是演化为“中央计算平台区域控制器”的混合架构。安全网关的角色在中央计算平台里承担着流量过滤和跨域隔离的职责。我在架构评审里最强调的一条隔离原则是功能安全关键的控制指令域和安全敏感度低的娱乐域必须从物理上隔离。也就是说IVI系统信息娱乐系统和ADAS/制动控制系统不能共用同一个网络交换机、不能直接路由通信、不能部署在同一个操作系统实例里。原因很简单IVI系统直接暴露于外部应用生态其攻击面最大而制动控制系统是车辆最敏感的安全关键系统。如果两者之间没有隔离攻击者一旦攻破IVI系统就等于站到了通向制动系统的大马路上。为了实现这种隔离常见的方案是在中央计算平台里划分多个安全域每个域有独立的硬件资源和通信接口。跨域的访问必须经过一个安全网关进行深度包检测和访问控制。关于这个设计我建议参考经典的“零信任”思路——默认不信任任何跨域请求除非请求携带有效的认证凭据并且满足预设的安全策略。哪怕这些请求来自车载系统内部的合法域名也必须经过身份验证。因为攻击者一旦通过漏洞获得了IVI系统的root权限它可以伪造任何应用层的身份。这里有一个在项目中最容易被挑战的细节安全网关本身是一把双刃剑。如果网关策略配置过于严格可能把系统内部正常的高优先级控制消息也拦截了反而造成功能安全超时。我在一个项目中就遇到过这样的问题为了满足信息安全审计要求网关对每一条跨域CAN消息做了加解密和签名验证验证耗时叠加起来超过了功能安全对通信延迟的预算。最后我们用了一个折中方案对延迟极度敏感的周期性控制指令采取硬件层的消息认证码MAC计算不做完整签名的软件校验对非周期诊断消息采取软件签名验证。这个方案的思路是牺牲一小部分非关键消息的安全强度保证安全关键消息的实时性。5. 从安全需求到架构落地量化指标与工程验证5.1 安全架构的“可验证性”——安全目标怎么变成可测试的指标前面聊了那么多设计原则和机制但工程落地最难的一关是安全架构怎么被验证在功能安全标准里验证的基本动作是把安全需求逐层分解直到每个需求都能被某一种验证活动覆盖。但在自动驾驶系统里安全需求往往长这样“系统在遇到前方静止车辆时应能在合理时间内触发自动制动以避免碰撞。”这种需求太模糊了——“合理时间”到底是多少“避免碰撞”有没有限定车速范围如果不把这些模糊描述转成可量化、可测试的指标后续的仿真和实车测试根本没法设计。我在实际项目中要求每个安全需求必须包含三个要素触发条件、响应动作、时限阈值。举个例子把上面那条模糊的安全需求改写成触发条件自车速度≥30km/h前方50m范围内检测到静止障碍物且驾驶员在2s内未采取制动。响应动作系统触发AEB功能目标减速度≥6m/s²同时点亮制动灯。时限阈值从感知融合输出目标物到制动系统压力达到目标值的总延迟≤400ms。这三要素的好处是每个都能被测试映射感知延迟可以用注入合成目标物来测决策计算延迟可以用代码插桩来测制动压力响应时间可以用台架试验来测完整链路可以用HIL硬件在环测试来测。如果哪一条指标没通过就能快速定位是哪个环节的问题而不是“整个系统表现不好”这种模糊结论。我之前在评审里见过一个反面案例。某个团队的AEB安全需求写的是“系统应能在各种情况下有效避免碰撞”。到了验收阶段测试团队在模拟雨天场景里跑了一轮车辆的AEB确实触发了但因为路面附着系数低车辆最终没有完全刹停离障碍物还有1.2米。测试团队和开发团队对“这个结果算通过还是不通过”产生了巨大分歧。根本原因就是需求里没有定义“各种情况”的边界和“避免碰撞”的量化标准。如果一开始就把需求写成“在干燥沥青路面、自车车速≤60km/h、障碍物为静止车辆时系统应避免碰撞在湿滑路面、自车车速≤40km/h时系统应至少将碰撞速度降低到20km/h以下”后面就不会扯皮。5.2 测试验证矩阵怎么证明架构“足够安全”有了可量化的安全需求接下来就是设计测试验证矩阵。我在项目里习惯把验证活动分为五类单元级测试验证单个模块的算法逻辑是否正确比如目标检测模型的识别准确率、决策规划模块的轨迹生成逻辑。单元测试一般用纯软件仿真就能覆盖主要目的是尽早发现在代码层面的bug。集成级测试验证模块之间交互是否符合接口契约比如感知融合模块的输出是否满足决策模块的输入格式要求、安全状态机的状态跳转是否触发正确。集成测试可以用软件在环SIL或硬件在环HIL来跑。系统级测试在完整的实车或仿真环境中验证整车行为比如AEB触发时整车减速度、横摆角是否满足要求。系统测试一般需要搭建高保真仿真环境把传感器模型、车辆动力学模型、控制算法全部集成在一起。整车级实车测试在封闭场地和公共道路上做限定场景验证主要覆盖仿真无法逼真模拟的物理细节比如轮胎与路面的真实摩擦系数、传感器在真实光照和雨雾下的表现。安全机制专项测试专门针对安全机制本身做“故障注入”测试比如人为切断某个传感器信号、向总线注入错误数据包、篡改某个控制指令来验证降级路径是否正确触发。这五类测试不是随便跑跑就行而是要形成一个“覆盖率地图”每个安全需求至少被一类测试活动覆盖安全关键需求最好被两类及以上覆盖。举个例子一个ASIL-D等级的安全目标“制动指令通路在单点故障情况下应在100ms内切换至冗余通道”这个需求至少要同时在故障注入测试和HIL测试中验证因为硬件层面的物理延迟和软件层面的逻辑速度需要分别确认。如果只在软件仿真里验证过那物理层面的通信总线故障对切换时间的影响就没有暴露出来。5.3 我在安全评审里最常被追问的四个问题我最后想分享一个很实际的板块安全架构评审时专家们最爱追问哪几个问题。这不是什么高深理论就是我在真实评审会上被反复“击穿”过的地方希望对正在做安全架构设计的同行有帮助。第一个问题永远是“你的安全目标是从哪来的有没有做完整的上游危害分析为什么这个风险是可接受的”如果我用“参考行业实践”“对标竞品参数”来搪塞一定会被追问到底。正确的回答方式是从HARA危害与风险评估或者TARA分析报告里直接翻出对应的危害场景、风险等级、可接受准则。也就是说架构设计里每一个“拍板”的参数都应该能追溯到一份分析报告中的某一行。第二个问题是“冗余通道之间有没有做故障隔离隔离措施是怎么验证的”这个问题最扎心的地方在于很多项目把“用了两个传感器”等同于“有冗余”但两个传感器如果共用一个供电模块、一个散热风扇、一个数据总线路由器它们其实在一个故障域里。评审专家通常会要求你提供冗余通道之间的独立性分析报告并且要看到故障注入测试的证据。第三个问题是“安全状态机的行为有没有被形式化验证过”状态机的状态跳转条件如果只靠代码review很难发现潜在的死锁、活锁或者不可达状态。现在行业里比较认可的做法是用时序逻辑来建模安全状态机然后用模型检测工具如UPPAAL、ProVerif做形式化验证确保没有“状态卡死”或“未知跳转”的路径。第四个问题我最不想回答但每次都被问到“如果以上所有安全机制同时失效车辆会发生什么”这是一个定义“最后一道防线”的问题。自动驾驶系统里没有“绝对安全”——任何系统都有残余风险。安全架构要做的是把残余风险压到“可接受”水平并且对已识别的残余风险提供透明描述。我通常会承认“如果所有安全机制同时失效车辆可能发生碰撞。但我们的安全性论证表明所有安全机制同时失效的概率低于10的负九次方每行驶小时。”这个数字不是随便说的它背后需要一套完整的定量安全性论证比如基于故障树定量分析或马尔可夫链分析来支撑“残余风险可接受”的结论。6. 一些个人经验与非共识观点按惯例每篇系列文章的最后我留一小块地方写点不太方便在大评审会上讲、但我自己特别想说的工作感悟以及一些可能和主流做法不太一致的个人观点。第一点是关于“安全架构”的定位。我越来越觉得安全架构并不是一张静态的设计图它更像一套贯穿整个开发流程的“质疑机制”。系统正常工作时安全架构师在不断地问“如果这个模块突然失效怎么办”系统顺利交付时安全架构师在不断地问“我们有没有遗漏某一条攻击路径”整个过程中安全架构师实际上是“团队里那个永远唱反调的人”。这个角色在很多团队里不太受欢迎但有没有人在唱反调往往决定了项目在遇到真实事故或真实攻击时能不能扛住。第二点是关于“冗余”的异见。我一直认为冗余不是越多越好。在汽车这个成本极度敏感的行业里每多增加一个传感器、一个备份控制器、一条通信链路都会带来重量、成本、功耗的上升而且冗余本身也会引入新的故障模式。比如多一个传感器就多一个故障来源多一条通信链路就多一个被渗透的入口。真正的安全架构高手不是擅长“加设计”的人而是懂得在安全收益与系统复杂度之间找到平衡点的人。在我参与过的几个量产项目里最成功的安全设计往往不是看起来“最豪华”的而是最简洁、最清晰、最容易验证的。最后分享一个小技巧。在做安全架构汇报的时候我一定会准备一张“安全边界总图”——把系统所有关键故障模式、对应安全机制、状态机跳转路径、FTTI指标集中画在一页A3纸上。这张图不是为了给评审专家看细节而是为了让大家对齐一个坐标系我们在讨论任何一个安全问题时都知道它处在整辆车安全边界的哪个位置。如果一张安全架构汇报连这种“一页纸总图”都画不出来那说明设计还没有真正收敛。第三篇就先聊到这里。下一篇文章如果能续上我打算顺着“自动驾驶系统安全架构”这个主题往更具体的工程细节方向走聊聊安全算力怎么规划、安全MCU怎么选型、以及怎么用硬件锁步核和软件监控协同支撑ASIL-D的分解策略。如果这篇的内容对你有帮助或者你也遇到过什么有意思的安全架构问题欢迎一起讨论。