信息安全系列03-SecOC介绍

本文介绍了AUTOSAR标准中的SecOC安全通讯技术,包括SecOC的基本概念、新鲜度值与MAC值的作用、报文格式以及发送和接收的逻辑。通过详细阐述,展现了如何增强车载网络的安全性,防范重放攻击和数据完整性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 概述

本文为Autosar通信入门系列介绍,如您对AutosarMCAL配置,通信,诊断等实战有更高需求,可以参见AutoSar 实战进阶系列专栏,快速链接:AutoSar实战进阶系列导读

本篇我们一起看下SecOC,全文大纲如下:
在这里插入图片描述

2. SecOC基本概念

2.1 SecOC是什么?

在车载网络中,大部分的数据都是以明文方式广播发送且无认证接收,例如应用最广的CAN通讯设计之初是没有考虑过信息安全问题,其明文传输、报文广播传输、极少网络分段等特性,让进入整车网络的黑客可以轻松伪造报文对车辆进行控制,为了提升CAN网络的安全性,BOSCH在AUTOSAR标准中补充了SecOC标准,为传统CAN通讯引入了通讯认证机制。

SecOC在其全称是Security Onboard Communication,即板端加密通讯,是AUTOSAR标准中关于ECU间通讯安全提出的标准,在Autosar架构中的位置如下图,其中PduR负责将传入和传出的安全相关I-PDU路由到SecOC模块,SecOC模块对路由来的I-PDU进行添加或处理安全相关信息后,将结果再传播回PduR,再由PduR进一步路由I-PDU。
在这里插入图片描述
在SecOC标准中,AUTOSAR主要基于两种手段来实现数据的真实性和完整性的校验
基于MAC的身份验证和基于Freshness的放重放攻击。

2.2 新鲜度值与MAC值

2.2.1 新鲜值FV

新鲜度值(Freshness Value):传达了信息的实时性,可由时间戳校验和帧计数器校验两种模式生成。
时间戳检验的挑战在于多个ECU间需要进行时间同步,以消除各ECU振荡器自身产生的偏差。目前,只有TTCAN和更先进的Flexray总线支持这种机制,因此帧计数器模式被选用。新鲜度值的主要作用是防止重放攻击。

新鲜度值的组成如下图所示:由同步计数器,重置计数器,消息计数器及重置低位组成。
在这里插入图片描述
新鲜值中的各组成计数器变化增加条件,初始化条件,初始值及Counter长度说明如下。
在这里插入图片描述
counter的变化趋势图如下:
在这里插入图片描述
对于新鲜值管理采用一主多从的方式,发送新鲜值同步报文的为主节点,接收新鲜值同步报文的ECU为从节点,一般在车载网络中,主节点为网关。

同步报文
对于Master节点在上电后会向从节点发送同步报文,实现新鲜值同步收发;
在运行中,主节点的RstCnt会周期性(ResetCycle)增加,即重置计数器,增加后会向从节点发送同步报文,使从节点的MsgCnt完成重置。同步报文的格式。
在这里插入图片描述
同步报文由主节点发送,SecOC报文由发送从节点发送给接收从节点,报文格式也不同,对应SecOC报文的格式如下章节介绍。

同步报文的验证
CANID+同步计数器+重置计数器再基于AES128算法生成认证结果后,做高有效相应长度的截取,与接收的认证信息对比,看是否相同。

2.2.2 MAC计算

MAC(Message Authentication Code):是保障信息完整性和认证的密码学方法之一。
CMAC(Cipher–based Message Authentication Code)通常用于对称加密。整车厂可以选择在车辆下线刷写程序时静态分配密钥,或者使用云端服务器动态地给车辆分配密钥。例如,对于一个具体的I-PDU,其需要认证的数据和完整的新鲜度值会与Data ID进行拼接,然后进行加密运算以得到实际的MAC。

2.3 SecOC报文格式

如下图,SecOC报文格式如下由三部分组成:PDU+新鲜度值+MAC值。其中新鲜度是截取低字节,MAC值是截取高字节部分拼接而成。
在这里插入图片描述

3. SecOC报文发送及接收逻辑

在这里插入图片描述

3.1 SecOC报文的发送

SecOC通过CMAC算法生成相关的MAC值,并截取有效MAC数据及新鲜值数据填充到报文PDU中,对外完成发送。
对应加密过程:密钥+CanID+PduData+新鲜度值→MAC值(身份认证信息)。再对新鲜值及MAC值进行切片填充到Pdu中

3.2 SecOC报文的接收

SecOC提取接收报文PDU中包含的截取的MAC信息,通过本地CMAC算法和PDU以及新鲜值数据,生成本地MAC信息,与接收的MAC信息比对,如果正确则路由到上层且更新本地的该报文的新鲜度值,如果错误则会拿接收的MAC信息与默认码比对,如果默认码比对也不正确则该PDU数据无效。

### 使用 AUTOSAR E2E 库实现 CAN 消息 E2E Profile 05 加密 #### 实现概述 为了实现在AUTOSAR环境中CAN报文的E2E Profile 05协议加密,主要依赖于E2E Protection Wrapper模式下的具体函数调用来完成。Profile 05定义了一套针对数据传输的安全措施,包括但不限于序列号管理、时间戳验证和校验和计算。 #### 初始化配置 在使用E2E库之前,需先进行初始化设置: ```c #include "E2eLib.h" // 定义用于存储E2E参数结构体变量 static E2e_ConfigType ConfigSet; ``` #### 构建并发送带有E2E保护的消息帧 当准备向网络上传输数据时,应通过`buildE2EMessage`函数为待发数据附加必要的安全属性,如序列号与校验和[^2]。 ```c void sendProtectedCanFrame(uint8_t* data, uint16_t length){ // 假设data指向的是要被保护的数据缓冲区 // 调用构建E2E消息的方法 buildE2EMessage(data, &ConfigSet); // 接下来可以将处理后的data作为有效载荷放入CAN帧中并通过总线发出... } ``` #### 验证接收到的消息帧完整性 接收方需要对接收的信息执行完整性检查,这通常涉及到对序列号连续性和校验和一致性的确认。 ```c bool verifyReceivedCanFrame(uint8_t* receivedData, uint16_t length){ bool isValid = false; // 对传入的数据做E2E有效性检验 if (verifyE2EMessage(receivedData, &ConfigSet)){ // 如果返回true,则说明该条目合法可用 isValid = true; } return isValid; } ``` 对于E2E Profile 05而言,除了基本的序列控制外还加入了额外的时间窗口约束以增强安全性,这意味着不仅关注数据包本身的特性,还会考虑其到达的时间范围是否合理[^3]。 #### 数据加解密过程(SecOC) 虽然严格来说这不是E2E的一部分,但在某些应用场景下可能也需要配合使用SecOC提供的API来进行数据层面上更深层次的安全防护。例如,在发送前利用`encryptData`方法对原始负载实施加密;而在接收侧则相反地采用`decryptData`恢复明文内容。 ```c // 发送端加密流程简化示意 void encryptPayloadBeforeSending(uint8_t* payload, size_t len){ encryptData(payload, len); } // 接收端解密流程简化示意 void decryptPayloadAfterReceiving(uint8_t* encryptedPayload, size_t len){ decryptData(encryptedPayload, len); } ``` 请注意以上代码片段仅为概念展示用途,并未完全遵循实际开发中的最佳实践或详尽语法细节。真实项目里还需参照官方文档进一步完善各个接口的具体参数传递及其他必要逻辑分支的设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Autosar汽车电子进阶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值