聊聊AUTOSAR: 基于DaVinci的SecOC开发与配置
一、什么是SecOC
当前车载网络通讯环境越来越复杂,未采取任何安全保护的报文,一旦被伪造或者篡改,将非常危险。为了提升信息的安全性,AUTOSAR标准中引进了SecOC,加入了通讯认证机制,能够有效的辨别出信息是否被篡改,提高了车内网络传输安全性。
SecOC的全称是Security Onboard Communication,中文名称是安全板载通信。SecOC占用报文负载中的若干字节,在其中填入新鲜度值和身份认证信息, 即发送数据的时候进行加密,接收数据的时候进行校验,可以提供消息身份验证及防止重放攻击。
二、SecOC如何实现
1.SecOC在AUTOSAR架构中的位置
数据在传送到PduR(PDU Router)模块后,对于需要进行SecOC的报文,PduR模块会将其路由到SecOC模块进行处理。SecOC模块会对发送报文添加认证信息,包括新鲜度值和MAC信息,对接收到的报文进行校验,查看新鲜度值和MAC信息是否正确,并将结果传回PduR,PduR负责进一步路由。
SecOC模块涉及到的新鲜度值和MAC认证的计算,分别会传到FvM模块以及Crypto相关模块处理。
2.SecOC报文格式
SecOC报文=原始报文PDU+截取的新鲜度值FV+截取的消息认证码MAC
截取的新鲜度值的长度和截取的消息认证码的长度在AUTOSAR文档中有规定:
比如SecOC Profile1格式规定,采用基于AES-128的CMAC算法计算MAC,使用新鲜度值的八个最低有效位作为截断的新鲜度值,并使用MAC的24位最高有效位作为截取MAC值。
简称 | 中文释义 | 全称 |
PDU | 协议数据单元 | Protocol Data Unit |
FV | 新鲜度值 | Freshness Value |
CSM | 加密服务管理 | The AUTOSAR Crypto Service Manager |
MAC | 消息认证码 | Message Authentication Code |
FvM | 新鲜度值管理 | Freshness Value Manager |
3.新鲜度值(FV)
新鲜度值传达了信息的实时性,可以简单理解为计数器,主要作用是防止重放攻击。
完整的FV包括同步计数器(Trip Counter)、重置计数器(Reset Counter)、消息计数器(Message Counter)和重置标志值(Reset Flag)。截取的FV一般为Message Counter低位和Reset Flag。
FV一般由FvM(新鲜度管理模块)管理。新鲜度管理分为主从方式,发送新鲜值同步报文的ECU为主节点,接收新鲜值同步报文的ECU为从节点。一般在车载网络中,主节点为网关。
同步报文
主节点在上电后会向从节点发送同步报文,实现新鲜度值同步收发。
在运行中,所有从节点都接收同步报文的Trip Counter和Reset Counter,这样可以保证所有从节点上的发送ECU和接收ECU的这两个值都相同, 发送ECU可以根据这两个值构建自己完整的新鲜度值;接收ECU可以根据这两个值构建接收报文的完整性新鲜度值,进而判断接收到的MAC是否正确。
同步报文的格式如下:
4.MAC生成与校验
加密算法采用对称加密AES128- CMAC算法实现,具体实现由Crypto相关模块负责,可以采用软件加密或者硬件加密的方式。
SecOC主要负责将用于MAC计算的数据组合到一起,调用Crypto相关模块接口参数用于生成MAC或者校验MAC。
生成MAC要用到的数据有:数据标识符(参数SecOCDataId)、需要被保护的PDU原始数据和完整的新鲜度值,按照顺序组合到一起,用于生成/验证MAC。
举例说明:
当前报文DataId是0x000A(2字节),Pdu是0x0102030405060708(8字节),完整新鲜度值是0x0000010000010101(8字节),
则传递给Crypto相关模块,用于AES128-CMAC计算的数据为:0x000A01020304050607080000010000010101
注:对称加密额外还需要Key,由加密模块负责。
5.发送接收流程
SecOC机制要求发送方和接收方的 ECU 都要实现 SecOC 模块功能。
在发送端,SecOC模块通过向发送的I-PDU中添加认证信息来创建一个Secured I-PDU。认证信息包括截取的新鲜度值和截取的消息认证码(MAC)。
在接收端,SecOC模块通过验证发送端SecOC模块所附加的认证信息,来检查I-PDU的新鲜度和真实性,如果验证成功,则将Pdu数据上传到上层模块中,如果验证失败,则忽略此报文。
注:本章节图片均摘取自《AUTOSAR_SWS_SecureOnboardCommunication.pdf》
三、SecOC配置
1.DBC 配置
1.1报文DBC配置示例
DLC = 12
DataID: 0x000B
PDU长度:8Bytes
FV完整长度(FreshnessValueLength): 8Bytes(64bits)
FV截取长度(FreshnessValueTxLength): 1Bytes(8bits)
Mac截取长度(AuthInfoTxLength): 3Bytes(24bits)
1.2导入DBC文件
在DaVinci Configurator工具栏中,找到Input Files,打开后,点击Open the Input Files Assistant,在里面添加所需DBC文件。
添加成功后,需注意ECU Instance的选择,确认好DBC文件后,点击Update the configuration完成更新。
2.SecOC模块Davinci工程配置
2.1配置SecOC接收周期函数
2.2配置SecOC发送周期函数
2.3配置接收报文属性
MAC认证加密计算需要关联Crypto加密相关模块,接收报文需关联CSM模块接口函数,比如下图中的CsmJob_CmacVerify,用来验证接收到的报文的MAC是否正确。
Secured Rx Pdu Verification选项表示是否对接收的报文进行MAC验证。
2.4配置发送报文
发送SecOC报文时,需要添加认证信息,需要关联CSM模块的接口函数,比如下图中的CsmJob_CmacGenerate,用来计算生成MAC。
下面是SecOC报文发送报文示例:
SecOC具备身份验证和防重放攻击的功能,在汽车安全领域起到了很大的作用,也得到了越来越多的关注和使用。本文主要介绍了AUTOSAR SecOC的处理流程、实现机制以及Davinci配置方法,希望可以帮助大家对SecOC的原理和使用有更深一步的理解。之后,我们还将继续推出AUTOSAR系列其他相关文章,欢迎大家持续关注。
相关文章:

聊聊AUTOSAR: 基于DaVinci的SecOC开发与配置
一、什么是SecOC 当前车载网络通讯环境越来越复杂,未采取任何安全保护的报文,一旦被伪造或者篡改,将非常危险。为了提升信息的安全性,AUTOSAR标准中引进了SecOC,加入了通讯认证机制,能够有效的辨别出信息是…...
.net6.0 重启控制台 命令
在.NET 6.0中,如果你想要创建一个命令行应用程序来重启当前运行的控制台,你可以使用System.Diagnostics命名空间下的Process类来启动一个新的进程,并结束当前进程。 以下是一个简单的示例代码,展示了如何实现重启控制台的功能&am…...

LVS 调度器 nat和DR模式
lvs-nat 修改请求报文的目标IP,多目标IP的DNAT 配置网络 LVS主机 注意网卡的顺序 (nat和主机模式) [rootlvs ~]# cat /etc/NetworkManager/system-connections/ens160.nmconnection [connection] idens160 typeethernet interface-nameens160 [ip…...

MTK Android12 SystemUI 手势导航 隐藏导航栏底部布局
问题:android12 平台手势导航情况下,app页面未设置全屏情况下,底部导航栏会有一个高度的颜色,底部导航会有一个手势导航提示条 需求:去掉手势导航情况下底部的导航栏和手势提示条 文章目录 相关资源修改问题描述解决方案代码跟踪中间提醒小方块代码查找底部手势导航条跟踪…...
electron调用c++ dll lib
主要的工具包 node-addon-apinode-gyp 主要的配置 {"variables": {# module_mac: "./../sdk/mac",},"targets": [{"target_name": "native_module","defines": ["NAPI_DISABLE_CPP_EXCEPTIONS"],&qu…...
23种设计模式(持续更新中)
参考链接干货分享 | 《设计模式之美》学习笔记 - 知乎 (zhihu.com) 总体来说设计模式分为三大类: 创建型模式,共5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共7种:适配器模式、…...

Linux文件系统详解
Linux的一切皆文件 Linux 中的各种事物比如像文档、目录(Mac OS X 和 Windows 系统下称之为文件夹)、键盘、监视器、硬盘、可移动媒体设备、打印机、调制解调器、虚拟终端,还有进程间通信(IPC)和网络通信等输入/输出资…...

大数据面试SQL(五):查询最近一笔有效订单
文章目录 查询最近一笔有效订单 一、题目 二、分析 三、SQL实战 四、样例数据参考 查询最近一笔有效订单 一、题目 现有订单表t5_order,包含订单ID,订单时间,下单用户,当前订单是否有效。 请查询出每笔订单的上一笔有效订…...

OpenCV图像滤波(8)getGaborKernel()函数的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数返回 Gabor 滤波器系数。 Gabor 滤波器在图像处理中非常有用,特别是在纹理分析、特征提取和边缘检测等领域。 函数原型 Mat c…...
门店收银系统源码+同城即时零售多商户入驻商城源码
一、我们为什么要开发这个系统? 1. 商户经营现状 “腰尾部”商户,无小程序运营能力;自营私域商城流量渠道单一;无法和线下收银台打通,库存不同步,商品不同步,订单不同步; 2.平台服…...

MaxKB:基于 LLM大语言模型的知识库问答系统实操
1.MaxKB介绍 MaxKB 是一款基于 LLM(Large Language Model)大语言模型的知识库问答系统。MaxKB 的产品命名内涵为 “Max Knowledge Base”,为用户提供强大的学习能力和问答响应速度,致力于成为企业的最强大脑。与同类基于 LLM 的知…...

linux文件命令:更新文件时间戳的工具touch详解
目录 一、概述 二. touch 命令的基本用途 三. touch 命令的语法 3.1、语法 3.2、touch 命令的选项 3.3、时间字符串格式 四. 常用场景 4.1 创建空文件 4.2 同时创建多个文件 4.3 更新文件的时间戳 4.4 只更新访问时间 4.5 只更新修改时间 4.6 设置特定时间戳 4.7 使用另…...

Docker学习(6):Docker Compose部署案例
一、docker-compose部署mysql 1、准备镜像 2、编写my.cnf配置文件 # 服务端参数配置 [mysqld] usermysql # MySQL启动用户 default-storage-engineINNODB # 创建新表时将使用的默认存储引擎 character-set-serverutf8mb4 # 设置mysql服务端默认字符集…...
4章3节:处理医学类原始数据的重要技巧,R语言中的宽长数据转换,tidyr包的使用指南
在数据分析中,数据的存储方式直接影响分析过程的效率和准确性。常见的数据存储形式有宽型数据(wide format)和长型数据(long format)。宽型数据适合人类查看和理解,而长型数据则更适合计算机处理和分析。为此,R语言提供了tidyr包,用于在这两种数据格式之间进行转换。本…...

[Web安全架构] HTTP协议
文章目录 前言1. HTTP1 . 1 协议特点1 . 2 URL1 . 3 Request请求报文1 . 3 .1 请求行1 . 3 .2 请求头1 . 3 .3 请求正文1 . 3 .4 常见传参方式 1 . 4 Response响应报文1 . 4 .1 响应行1 . 4 .2 响应头1 . 4 .3 响应正文 2. Web会话2 .1 Cookie2 .2 Session2 .3 固定会话攻击 前…...

mysql数据库之运算符
安全等于运算符(<=>) 这个操作符和 = 操作符执行相同的比较操作,不过<=>可以用来判断NULL值。在两个操作数均为NULL时,其返回值为1而不为NULL;而当一个操作数为NULL时,其返回值为0而不为NULL。 下面分别是 SELECT NULL <=>1 SELECT 1<=>0 SEL…...

Spark轨迹大数据高效处理_计算两经纬度点间的距离_使用Haversine formula公式
开发背景 接上文我求的两经纬度点之间的方位角,我的需求里还提到了要计算距离,当然这个距离也是为后面的需求做铺垫的,因此需要求两个经纬度电之间的距离。 不要妄想用勾股定理求出来,实际上距离的计算还是稍微复杂些。这里使用的…...
[C++] : std::copy_n
std::copy_n 是 C 标准库中的一个算法,用于将指定数量的元素从一个输入范围复制到一个输出范围。那这就提供了很灵活的用法了。下面我们举例说明。 语法 template< class InputIt, class Size, class OutputIt > OutputIt copy_n(InputIt first, Size count…...

centos上传工具
yum install lrzsz 安装完成之后 作用是 输入 rz 可以本地上传文件...

【C++】vector习题
一、杨辉三角 class Solution { public:vector<vector<int>> generate(int numRows) {} }; 这里给你一个vector<vector<int>>类型 也就是说vector中的各个数据,存的是各个不同的vector 思路:先给vector开空间,然后…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...