聊聊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开空间,然后…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
