一、SecOC的含义
随着汽车网联化程度的不断提高,车联网信息安全的风险也在逐渐增加,为了保护用户的个人隐私和数据安全,AUTOSAR标准中引进了SecOC组件,加入了一套通信加密和验证标准,以确保车内各ECU之间网络通信的安全。
SecOC的全称是Security Onboard Communication,中文名称是车载安全通信,用于保护车内网络信息的完整性、可认证性和防重放性。保护对象以协议数据单元(PDU)为单位,在实施过程中会在PDU后加入新鲜度值和消息认证码。
二、SecOC原理
SecOC 安全通信概述
SecOC与PDUR交互关系如下图所示:
发送安全报文时,上层的原始PDU通过PDUR模块传递至SecOC组件完成PDU安全认证。
接收安全报文时,安全报文由PDUR模块传递至SecOC组件完成PDU安全验证。
SecOC组件通过向待发送的PDU添加认证信息来创建安全报文。认证信息包括消息认证码(MAC)和新鲜度值(FV)。
SecOC组件需要从新鲜度值度管理(FVM)获取每个安全报文的FV。
安全报文
安全报文格式为:原始PDU|FVLSB|MACMSB。
每个安全报文需要配置一个新鲜度值。新鲜度值FV是用于确保安全报文新鲜性的单调计数器。新鲜度值来自新鲜度值管理模块。FVLSB值为新鲜度值截取低有效位,截取的位数由开发者定义,例如8bits。
完整MAC值由PDU数据标识符、原始PDU和完整新鲜度值通过MAC生成算法计算而来。MACMSB值为MAC值截取高有效位,截取位数由开发者定义,例如24bits。
同步报文
主节点同步报文应分配优先级较高的CANFD ID(以信号矩阵为准)。同步报文包含同步计数器(TripCnt)、重置计数器(ResetCnt)和消息认证码(MAC)。消息认证码由SecOC计算并追加,用于同步计数器“TripCnt| ResetCnt”值的完整性和真实性验证。同步报文的TripCnt、ResetCnt和MAC的长度如下图所示:
新鲜度值(FV)
新鲜度值由同步计数器(TripCnt)、重置计数器(ResetCnt)、消息计数器(MsgCnt)和ResetFlag组成,其最大可配置长度为64bits。通信报文中新鲜度值FVLSB一般由MsgCntLower和Reset Flag组成(即SecOCFreshnessValueTxLength长度指定部分)。
三、SecOC测试环境
SecOC测试主要针对具有SecOC模块的单部件进行的一系列功能及性能测试,验证SecOC网络信息安全功能是否符合需求规范。
本文主要针对CANFD总线的SecOC单部件测试,基于总线分析工具CANoe进行测试,其测试环境如下图所示:
总线分析工具:CANoe,用来模拟除DUT外的其它总线节点进行总线报文的收或发,记录监测总线事件。如果采用CANoe进行测试,对应的采集和输出信号的硬件为VN1640或VN1670等具备CANpiggy的Vector硬件设备。
电压源:程控电源,通过PC可控模拟不同供电电压。
R1/R2:选配型终端电阻120Ω。对于终端型DUT,需选配R1或R2;对于非终端型DUT,需同时配置R1与R2。
四、SecOC自动化测试
单部件的SecOC自动化测试是基于CANoe软件的CAPL编程实现的,依据SecOC设计规范要求来构造安全PDU算法,编写AES-128算法的dll文件,并以CANoe调用此dll文件算法来实现。
SecOC安全报文认证和验证
上图为安全报文构建过程。
SecOC完成报文FV和MAC追加重新组包的过程。图中Payload等同于原始PDU。发送节点的应用发送报文时,先将报文Payload提交至SecOC完成安全报文构建,再将安全报文发出。
上图为安全报文验证过程。
该流程是SecOC验证安全报文FV和MAC正确性的过程。接收节点收到报文后,先将安全报文提交至SecOC进行MAC验证,验证通过的报文Payload提交上层应用。
测试流程:
步骤1:DUT KL30、KL15上电;
步骤2:仿真SecOC主节点发送同步报文,其中TripCnt等于最大值,ResetCnt等于1;
步骤3:仿真从节点发送安全报文<N_DTC_SecMsg_MAC_Verification_Failure_Set>次,其中TripCnt等于最大值,ResetCnt等于1,MsgCnt起始等于1;
步骤4:CANoe通过诊断服务读取DTC,判断DUT是否成功接收安全报文;
步骤5:仿真从节点接收到DUT发送的第一个安全报文,作为接收节点新鲜值构建时,TripCnt等于<TripCnt_Max>,ResetCnt等于1,MsgCnt等于1;
步骤6:CANoe验证仿真从节点是否成功接收DUT发送的安全报文。
步骤1:DUT KL30、KL15上电;
步骤2:仿真从节点根据最新同步值构建并发送安全报文;<N_DTC_SecMsg_MAC_Verification_Failure_Set>次,其中MsgCnt起始等于1;
步骤3:CANoe通过诊断服务读取DTC,判断DUT是否成功接收安全报文;
步骤4:仿真从节点在同步报文ResetCnt更新时,接收到DUT发送的第一个安全报文,作为接收节点新鲜值构建时,TripCnt和ResetCnt等于最新同步值,MsgCnt等于1;
步骤5:CANoe验证仿真从节点是否成功接收DUT发送的安全报文。
安全报文验证次数测试
安全报文最大尝试次数为可配置项,配置次数由开发者定义。
如果MAC值验证不通过,且尝试次数未超过最大验证尝试次数,则对待验证新鲜度值中消息计数器的高有效位(MsgCntUpper)进行自增处理,并继续尝试验证。否则,完全验证失败。
测试流程:
步骤1:DUT KL30、KL15上电;
步骤2:仿真主节点发送同步报文,其中TripCnt等于<TripCnt_Max>,ResetCnt等于1;
步骤3:仿真从节点发送安全报文,<N_DTC_SecMsg_MAC_Verification_Failure_Set>次,其中TripCnt等于<TripCnt_Max>,ResetCnt等于1,MsgCntLower起始等于1,MsgCntUpper等于<N_SecMsg_Verification_Max>;
步骤4:CANoe通过诊断服务读取DTC,判断DUT是否成功接收安全报文;DUT KL15下电;
步骤5:重复步骤3-4,其中步骤3中MsgCntUpper增加<N_SecMsg_Verification_Max>+1。
步骤1:DUT KL30、KL15上电;
步骤2:仿真从节点根据最新同步值构建并发送安全报文<N_DTC_SecMsg_MAC_Verification_Failure_Set>次,其中MsgCntLower起始等于1,MsgCntUpper等于<N_SecMsg_Verification_Max>;
步骤3:CANoe通过诊断服务读取DTC,判断DUT是否成功接收安全报文;DUT KL15下电;
步骤4:重复步骤2-3,其中步骤3中MsgCntUpper增加<N_SecMsg_Verification_Max>+1。
密钥学习流程测试
车辆下线时,所有ECU通过诊断写入主密钥(MK),通信密钥(CK)通过密钥学习流程写入,并对ECU的TripCnt计数器进行重置。
测试流程:
步骤1:使ECU进入扩展会话并完成安全访问解锁;
步骤2:诊断设备通知 ECU通信密钥学习,发送MK;
步骤3:主ECU完全访问解锁;
步骤4:激活主ECU通信密钥学习,发送MK;
步骤5:主ECU将RA1用MK生成MAC,将RA1和4字节的MACMSB发给从ECU;
步骤6:从ECU收到RA1和MACMSB,用MK校验MACMSB。校验通过后,利用同样的方式生成CK,并重置Tripcnt;
步骤7:从ECU生成新随机数RA2用CK生成MAC’,将RA2和4字节的MAC’MSB发送给主ECU;
步骤8:主ECU用CK校验RA2的MAC’MSB,校验通过证明学习成功,否则学习失败,并向诊断设备反馈学习结果。
安全报文防重放攻击测试
上图为防重放攻击测试流程图。
通过通讯仿真设备监控DUT1 发送给DUT2 的安全报文,在一段极短时间内,采用通讯仿真设备非法重播这条报文到总线上,观察DUT2 是否将其作为正常指令识别,具体可根据被测DUT 功能表现或DTC 判定。
上面为SecOC比较典型的自动化测试,除此之外,还有一些运行场景处理测试和新鲜度值管理测试等,包括上电启动处理测试、唤醒处理测试、网络管理处理测试、Bus-off处理测试以及发送接收节点新鲜度值构建测试等。
在汽车信息安全的领域中,SecOC所具备的身份验证和防重放防攻击的特点起到了至关重要的作用。本文介绍了SecOC的含义、原理、测试环境和测试流程,希望可以帮助大家对SecOC的使用和测试有更深一步的理解。