SecOC简介
SecOC 是一种对报文通信的加密方式,通过新鲜度值(Freshness value)和认证码(Message Authentication Code) 对报文进行加密。
SecOC与E2E加密的区别
- E2E多用于功能安全中,防止控制器内部功能出现异常
- E2E的Rolling Count只是累加,CheckSum使用CRC8
- E2E可用在CAN和CANFD报文,单个CANFD报文中可以使用多组E2E来保证数据可靠性
- SecOC多用于网络安全中,防止外部恶意攻击关键车辆报文
- SecOC拥有一套FV管理机制,可以防止重放攻击
- SecOC的MAC可以确保数据的可靠性,即不可篡改(对称加密)
- 大多用于CANFD报文(CAN数据有效负载太小)
SecOC报文组成
一个正常的SecOC报文应该是ID+Data+FV+MAC四部分构成,其中核心的是FV的管理和MAC的生成算法。
SecOC新鲜度值管理简介
FV在SecOC中有多种管理方式,只记录项目使用单主节点管理方式。
block-beta
columns 5
a["Freshness value"]:5
b["Trip counter"] c["Trip counter"] d["MsgCntUpper"] e["MsgCntLower"] f["Reset Flag"]
classDef AAA fill:#A3D8FF
class a AAA
classDef BBB fill:#FF8A08
class b BBB
classDef CCC fill:#BACD92
class c CCC
classDef DDD fill:#F27BBD
class d DDD
classDef EEE fill:#E4C59E
class e EEE
- FV主要是有同步计数器(TripCounter),重置计数器(ResetCounter)和消息计数器(MessageCounter) 构成
- 为了维护和同步计数器,在SecOC中分为主节点和从节点(发送节点和接收节点)
- 同步计数器和重置计数器由主节点管理,消息计数器主要由从节点维护
- 每个从节点也需要接受主节点的同步从而维护自己的同步计数器和重置计数器
- 存在一个节点即是主节点又是从节点的情况的
举例来说:
- GW是主节点,管理整个网络的同步计数器和重置计数器(即主节点决定网络上的这两个计数器的值);
- T_Box是从节点,维护自己的同步计数器和重置计数器,但只能接受主节点的同步;
- T_Box会管理自己节点的SecOC报文的消息计数器,每个SecOC报文,都有一个自己的消息计数器;
主节点的同步计数器和重置计数器:
- 同步计数器和重置计数器通过主节点的计数器同步消息进行维护;
- 在控制器唤醒或者Busoff后情况,主节点会立即发送同步消息对整个网络的同步计数器和重置计数器进行同步;
- 并且会在本次上电过程中,周期性发送同步消息保正整个网络的同步计数器和重置计数器的一致;
从节点的同步计数器和重置计数器:
- 从节点在收到主节点的计数器的同步消息以后,如果认证通过,就会把同步计数器和重置计数器同步到自己的是计数器;
- 如果在唤醒或者类似的情况没有收到主节点的同步消息,从节点会发送同步请求消息,主节点在收到后,立即发送一轮同步消息;
- 如果主节点的同步消息被从节点认证不通过,从节点会一直发送同步请求消息,并对自己的FV和MAC进行默认填充;
- 主节点的同步消息也是有SecOC加密,并且从节点会对同步消息中的计数器合理性进行判断;
消息计数器:
消息计数器主要工作原理(以0x1EE为例)如下:
- 发送节点每发送一帧0x1EE,消息计数器加一;
- 接收节点每收到一帧0x1EE,消息计数器加一;
- 当收到主节点的计数器同步消息并且认证通过以后,消息计数器清零,重新开始计数;
SecOC消息认证码管理简介
- MAC是由本次发送报文的ID+Data+FV依据算法进行生成。
- 在发送报文的过程中,因为原始的FV和MAC占据的字节过长,会对FV和MAC进行截取。
- 因为FV和MAC会占有大量的字节,对报文的通信负载造成很大影响,所以目前大多用在 CANFD上。
SecOC报文工作流程
一帧SecOC报文的正常工作流程如下:
- 发送节点:报文在FV管理模块依据同步计数器,重置计数器和消息计数器生成本帧报文的FV,
- 发送节点:依据ID+Data+FV生成MAC,截取部分MAC和FV,加上ID和数据生成加密后的报文,发送到总线上。
- 接收节点:在收到报文后,按照自己FV中的三个计数器生成FV与收到的报文比较,
- 对MAC进行认证,如果通过就接受报文,不合理就会舍弃该报文。