一、背景
随着汽车功能越来越强大,ECU数量也不断增加,从十几个逐渐增加到几十个。且为完成越来越高阶的汽车功能,各ECU之前需紧密配合,ECU间的通信需求也急剧增加。但汽车通信在设计之初,也存在早期TCP/IP协议栈上出现的问题:没有考虑信息安全。在汽车内部通信环境中,接收端ECU只要检测到总线上的发送给我的信号,且信号格式是规范的,ECU就会进行响应。例如智驾模块的ACC功能检测到前车刹车,可以发送一个刹车信号给刹车ECU,刹车ECU接收到信号后,就进行刹车。但攻击者也可以去重放或伪造一个刹车信号,直接发送到总线中,此时刹车ECU检测到刹车信号,同样会做出刹车动作。出现此问题的核心在于,刹车ECU无法区分接收到的信号是合法ECU发出的还是攻击者伪造/重放的,刹车ECU只要接收到符合规范的信号,就做出响应。故从信息安全角度考量,需要一套机制来保障ECU能识别信号是否为合法的发送方所发送的,即检测接收到的信号的真实性和完整性。
为解决此需求,AUTOSAR中定义了SecOC(Secure Onboard Communicaton)机制,通过该机制来保障车辆ECU之间通信的真实性和完整性,使得ECU可以识别出伪造或重放的信号,从而规避攻击者的攻击。
二、概述

SecOC的总体机制如上图所示:
- SecOC需在发送方和接收方同步实施
- SecOC模块与PduR模块进行交互
- 在发送方, SecOC 模块通过向待发送的原始PDU 添加认证信息,从而创建出安全 PDU。认证信息包括 MAC 值(消息认证码)和新鲜度值信息。
- 在接收方, SecOC 模块通过验证发送方 SecOC 模块附加的认证信息来检查安全 PDU 的新鲜性和完整性。只有接收方 SecOC 的安全 PDU数据是发送方 SecOC 生成的安全 PDU 数据时,接收方才能验证通过,验证通过后由 PDUR 模块将该 PDU 转发至应用层使用;若PDU数据不是合法的发送方所发送或被非法篡改,均会导致验证不通过,则PDUR不再路由该 PDU到应用层。
- PDU 发送方和接收方的 SecOC 模块从新鲜度值管理模块获得每个安全 PDU 的新鲜度值(FreshnessValue,简称 FV)。接收方必须能正确获取到发送发计算MAC时使用的FV值,若接受方获取到的FV值和发送发FV值不相同,必然会导致MAC验证失败。保证FV值的相同由新鲜度值管理模块进行管理。
三、安全PDU
3.1 安全PDU格式

如上图所示,安全PDU由4部分组成:安全PDU头(可选)、原始PDU、新鲜度值(可选)、认证信息(MAC值)
-
Secured I-PDU Header:原始I-PDU的长度。当原始PDU为动态PDU时,需通过header中长度知晓FV和Authenticator的位置。通常不使用该字段。


-
Authentica I-PDU:原始I-PDU
-
Freshness Value:新鲜度值
-
Authenticator:认证信息,即MAC值
3.1.1 Authenticator/MAC
MAC 值是使用密钥(KeyID),安全 PDU 的数据标识符(如 CAN-FD 协议的 PDU 数据标识符为 CANID),原始 PDU和新鲜度值通过 AES-128-CMAC 算法生成的唯一认证数据串。
- KeyID: 在进行 MAC 计算时是需要密钥参与的,通常密钥是由 CSM(加密服务模块)提供,一般 CSM 模块会封装密钥,一个 KeyID 对应一个密钥,在调用时只需要接口提供 KeyID来参与 MAC 计算, KeyID 进行设置的话,设为 01(固定值),长度 8 位,范围设置为 0x01-0xFF 之间。
- CANID:根据标准定义 16bit 的 Data Id(参数: SecOCDataId)
- 新鲜度值:每个安全 PDU 需要配置有一个新鲜度值。新鲜度值 FV 是用于确保安全 PDU 新鲜度的单调计数器。新鲜度值应来自新鲜度值管理模块。
SecOC 模 块 应 构 造 用 于 生 成 MAC 值 的 数 据 DataToAuthenticator 。
DataToAuthenticator 由 PDU 的数据标识符 SecOCDataId,原始 PDU 以及该 PDU 的数据标识符相对应的完整新鲜度值进行连接构成。 PDU 的数据标识符和新鲜度值应以 BigEndian字节顺序编码。
3.1.2 新鲜度值和Authenticator截断
原始新鲜度值长度为8字节,原始MAC值长度为16字节。为降低链路负载,可考虑对新鲜度值和MAC进行截取一部分,作为有效信息。
- 新鲜度值:N字节,从低有效位开始截取,长度可自定义
- MAC值:M字节,从高有效位开始截取,长度可自定义

3.2 安全PDU的创建
为原始PDU创建安全PDU包含如下6个步骤:
- 准备构建安全 PDU
在准备期间,应分配必要的缓冲区以保存认证过程的中间和最终结果。 - 为生成 MAC 值构建数据
SecOC 模 块 应 构 造 用 于 生 成 MAC 值 的 数 据 DataToAuthenticator 。
DataToAuthenticator 由 PDU 的数据标识符 SecOCDataId,原始 PDU 以及该 PDU 的数据
标识符相对应的完整新鲜度值进行连接构成。 PDU 的数据标识符和新鲜度值应以 BigEndian
字节顺序编码。 - 生成 MAC 值
SecOC 模块应通过将 DataToAuthenti

随着汽车功能增强,ECU间通信需求增加,但存在信息安全问题。AUTOSAR定义的SecOC机制可保障车辆ECU通信的真实性和完整性。本文介绍了SecOC机制,包括安全PDU的格式、创建与认证,SecOC和PDUR的交互,以及新鲜度值管理等内容,同时指出实际应用中存在的问题。
最低0.47元/天 解锁文章
2174





