一文读懂Autosar SecOC通讯

一、为什么用SecOC?

在车载网络中,CAN总线作为常用的通讯总线之一,其大部分数据是以明文方式广播发送且无认证接收。这种方案具有低成本、高性能的优势,但是随着汽车网联化,智能化的业务需要,数据安全性被大家越来越重视。传统的针对报文添加RollingCounter和Checksum的信息,实现的安全性十分有限,也容易被逆向破解,伪造报文控制车辆。

在AUTOSAR架构中对于网络安全的机制,有E2E(End to End)保护,另外还有SecOC(Secure Onboard Communication),主要实现对车内敏感数据信息进行认证。

SecOC是在AUTOSAR软件包中添加的信息安全组件,该特性增加了加解密运算,密钥管理,新鲜值管理和分发等一系列功能和新要求。SecOC模块在PDU级别上为关键数据提供有效可行的身份验证机制。该规范主要使用带有消息认证码(MAC-Message Authentication Code)的对称认证方法。与不对称方法对比,他们使用更小的密钥实现了相同级别的安全性,并且可以在软件和硬件中紧凑高效地实现。但是,规范提供了两种必要的抽象级别,因此对称和非对称身份验证方法都可使用。由于非对称加密计算量大,目前主要都是采用对称加密。

(1)什么是对称加密与非对称加密?

1.对称加密算法

对称加密算法的加密和解密使用的密匙是相同的,也就是说如果通讯两方如果使用对称加密算法来加密通讯数据,那么通讯双方就需要都知道这个密匙,收到通讯数据后用这个密匙来解密数据。

2.非对称加密算法

非对称算法中用到的密匙有两个,分别是公匙和私匙,要求通讯双方都有自己的公匙和私匙,自己公匙加密的数据只有自己的私匙才能解开,自己私匙加密的数据也只有自己的公匙才能解开。公匙是可以公布在网络上的,相当于一个公共的电话簿,可以被其他人获取到的。

以一个通信的例子来说明非对称算法:

A 要和 B 进行通信,A在网络上获取到B的公匙,然后把数据用B的公匙进行加密发送给B,B收到了数据后就用自己的私匙进行解密数据,然后就可以看到数据内容了,即使在网络传输中加密数据被黑客截取,由于黑客没有对应的私匙,他也无法解密数据进行查看。

在通信中对称加密算法比较高效,但是需要告知对方加密钥匙,在实际运用时比较麻烦,所以一般都是用非对称加密算法来加密对称加密算法的钥匙,然后发送给对方,对方收到对称加密算法的钥匙后,后续通信就用对称加密算法来加密消息内容了

目前,使用使用非对称加密方法的数据签名还不能用于车载通讯,因为这样会显著增加计算量。

(2)MAC和新鲜度值的作用

MAC可以防止插入恶意消息,新鲜度值可以防止重放攻击。

其中MAC和新鲜度分别具有不同的作用,在SecOC标准中,AUTOSAR主要基于两种手段来实现数据的真实性和完整性的校验:基于MAC的身份验证和基于Freshness的防重放攻击。首先MAC(Message Authentication Code)是保障信息完整性和认证的密码学方法之一,其中CMAC(Cipher based MAC,CMAC一般用于对称加密,整车厂可在车辆下线刷写程序时静态分配密钥,也可选择使用云端服务器动态地给车辆分配密钥。)是车载总线加密认证常用方案。MAC的作用不是防止有效数据被泄露,而是为了保护数据不会被攻击方篡改,即完成数据来源的认证。如需保护通信数据不被攻击方监听,则报文的有效数据还需要进行额外的加密。

为了降低重复攻击的风险,则需要在Secured I-PDU中加入新鲜度值,Freshness Value是一个根据一定逻辑不断更新的数值,Freshness Value的更新方法多种多样,AUTOSAR 标准将计数器或基于时间的新鲜度值作为典型选项。具体使用何种和具体的加密方式,以及如何定义新鲜度度其实并不在标准之内,这就给OEM有了各自定制化方案的可选余地,因此OEM 在实施 SecOC 方案时需要定义和做好两个关键部分:新鲜度值管理和密钥管理。

(3)SecOC的通讯加密和认证过程

在发送节点,SecOC模块向待发送的Authentic I-PDU添加认证信息从而创建Secured I-PDU。认证信息包括Authenticator(例如CMAC)和可选的Freshness Value。无论Freshness Value是否包含在打包后的Secured I-PDU中,在生成Authenticator期间都会考虑Freshness Value。在接收节点,SecOC模块通过验证收到的Secured I-PDU中包含的Authenticator来判断Authentic I-PDU的来源。为了实现认证,接收节点除了需要Authentic I-PDU外还需要知道发送节点计算Authenticator时使用的Freshness Value。

新鲜度值收发双方验证机制:

SecOC是在AutoSAR软件包中添加的信息安全组件,增加了加解密运算、密钥管理、新鲜值管理和分发等一系列的功能和新要求。SecOC占用CAN报文的负载中的若干字节,在其中填入身份认证和新鲜值字段。

于是,假如搭载SecOC后,一次CAN通信就变成了如下过程:

  1. 报文的原始数据切片,加上秘钥,加上新鲜值,通过算法生成身份认证信息MAC。
  2. 然后再将身份认证信息的切片和新鲜值切片,插入CAN报文负载的指定字节中。其中新鲜值切片可以长度为0,但是身份认证信息的切片必须要存在。
  3. 接收方就是个逆过程了,校验失败就扔掉

一文读懂Autosar SecOC通讯_第1张图片

详细的SecOC通讯过程如下:

一文读懂Autosar SecOC通讯_第2张图片

二、安全报文介绍

安全报文的组成:

安全报文由一个头和真实的I-PDU,新鲜度值和用新鲜度值创建的认证器(eg.MAC)组成。由于SecOC机制需要占用总线带宽,因此一般适用于CANFD通讯网络。其中身份验证器(例如MAC)是指使用密钥、安全I-PDU的数据标识符ID、真实有效负载和新鲜度值生成的唯一身份验证数据字符串。消息头可用来指明安全PDU的长度。

数据结构如下:

Authentic I-PDU是需要被保护的数据;Authenticator为认证信息(通常使用消息认证码,即Message Authentication Code,简称MAC);Secured I-PDU Header为可选用的报头;Freshness Value为可选用的新鲜度值。

一文读懂Autosar SecOC通讯_第3张图片而在实际使用中,新鲜度值和MAC可能会使用较多长度的数据来提高安全性,但这又会消耗大量的带宽等资源,所以常使用截取的方式做平衡处理。新鲜度值和MAC都按照完整的值来生成,但是在发送和认证的时候只会截取一部分。一文读懂Autosar SecOC通讯_第4张图片

新鲜度值管理:

在SecOC中,给出了多种新鲜度值管理方案:

  1. 基于Counter的递增,即包含了原有方案的机制
  2. 基于全局时间戳,源于时间戳的唯一性
  3. 基于同步的复合Counter

这里我们主要谈一下第三种方案。在此方案中,完整的新鲜度值包括同步计数器(Trip Counter)、重置计数器(Reset Counter)、消息计数器(Message Counter)和重置标志值(Reset Flag)。其中消息计数器又分为高值和低值,而真正在报文中发送的值只包含消息计数器的低值和重置标志值。

新鲜度值结构:

一文读懂Autosar SecOC通讯_第5张图片

一文读懂Autosar SecOC通讯_第6张图片

一文读懂Autosar SecOC通讯_第7张图片

一文读懂Autosar SecOC通讯_第8张图片

TripCounter和ResetCounter由主ECU发送,其他ECU接收,保持此值。MessageCounter每个ECU发送的一次I-PDU加1,当ResetCounter变化时,MessageCounter变为初始值0,到达最大值时保持最大值发送ResetFlag与ResetCounter完成同步,并保持ResetCounter的低位。

新鲜度等值变化规则

一文读懂Autosar SecOC通讯_第9张图片

一文读懂Autosar SecOC通讯_第10张图片

三、FVM新鲜值管理

采用一主多从通讯模式实现新鲜值同步报文收发,如下图所示。发送新鲜值同步报文的ECU为主节点,接收新鲜值同步报文

的ECU为从节点。在车载网络中主节点一般是Gateway。

一文读懂Autosar SecOC通讯_第11张图片

同步报文的结构:

一文读懂Autosar SecOC通讯_第12张图片

同步报文如上图所示,包含行程计数器和重置计数器以及授权码,授权码由SecOC计算追加,用于校验同步计数器“TripCnt |ResetCnt”值的完整性和真实性校验。

行程计数器:主节点每次上电、唤醒(可包含复位)和检测到新的通讯安全从节点加入网络通信时使发送的行程计数器 1,第二帧和第三帧保持不变,连发三帧,间隔50ms;之后按1s周期发送。发送属性根据项目需求可自定义。

重置计数器:同步报文每次发送第一帧时加1,第二帧第三帧保持不变。

同步报文发送时序图:

一文读懂Autosar SecOC通讯_第13张图片

同步报文接收时序图:

一文读懂Autosar SecOC通讯_第14张图片

四、SecOC与其他模块交互

(1) SecOC与PduR模块的关系

一文读懂Autosar SecOC通讯_第15张图片

一文读懂Autosar SecOC通讯_第16张图片

(2)FVM与SecOC的交互关系

FVM并不是标准的AUTOSAR组件,其作为复杂设备驱动,与SecOC交互图如下:

一文读懂Autosar SecOC通讯_第17张图片

五、SecOC在Autosar标准中的实现

目标ECU应该提供以下AUTOSAR基础软件:

  1. System Service(含OS/EcuM/ComM)
  2. Communication(含Com/SecOC/PduR)
  3. 秘钥算法模块(CSM/CryIf/Crypto)
  4. Memory(含NVM/MemIf/Fee)
  5. Diagnostics(含DCM)
  6. MACL(含MCU)
  7. IO(含Port)

(1) FVM 接口

Std_ReturnType Fvm_SetTripResetSyncMsg(uint16 syncId,uint32 tripcnt, uint32 resetCnt); 

Std_ReturnType Fvm_GetTripResetSyncMsg(uint16 syncId, uint32* tripCnt, uint32* resetCnt); 

void Fvm_ResetTripCounter (void); 

uint32 Fvm_ IncreaseTripCounter (uint16 syncId); 

void Fvm_Init(const Fvm_RWFunc * func); 

typedef Std_ReturnType (*Fvm_WriteTripFunc) (uint16 tripId,uint32 tripCounter); 

typedef Std_ReturnType (*Fvm_ReadTripFunc) (uint16 tripId,uint32 *tripCounter); 

uint32 Fvm_GetRxMsgCnt(uint16 freshnessValueID);

(2) SecOC适配接口

Std_ReturnType SecOC_GetRxFreshness (uint16 SecOCFreshnessValueID,const uint8* SecOCTruncatedFreshnessValue,uint32 SecOCTruncatedFreshnessValueLength,uint16 SecOCAuthVerifyAttempts,uint8* SecOCFreshnessValue,uint32* SecOCFreshnessValueLength); 

Std_ReturnType SecOC_GetTxFreshness (uint16 SecOCFreshnessValueID,uint8* SecOCFreshnessValue,uint32* SecOCFreshnessValueLength); 

Std_ReturnType SecOC_SPduTxConfirmation(uint16 SecOCFreshnessValueID); void Fvm_VerificationStatusCallout (SecOC_VerificationStatusType verificationStatus);

(3) 安全报文发送时序图

一文读懂Autosar SecOC通讯_第18张图片

一文读懂Autosar SecOC通讯_第19张图片

一文读懂Autosar SecOC通讯_第20张图片

(4) 安全报文的接收时序图

一文读懂Autosar SecOC通讯_第21张图片

一文读懂Autosar SecOC通讯_第22张图片

一文读懂Autosar SecOC通讯_第23张图片

(5) 新鲜值处理时序图

一文读懂Autosar SecOC通讯_第24张图片

新鲜值构建的三种方式

  1. Freshness Value Based on Single Freshness Counter 

一文读懂Autosar SecOC通讯_第25张图片

  1. Freshness Value Based on Single Freshness Timestamp

一文读懂Autosar SecOC通讯_第26张图片

  1. Freshness Value Based on Multiple Freshness Counters

一文读懂Autosar SecOC通讯_第27张图片

一文读懂Autosar SecOC通讯_第28张图片

一文读懂Autosar SecOC通讯_第29张图片

你可能感兴趣的:(AutoSar,Module,Introduction,Security,SecOC,FvM)