聊聊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开空间,然后…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...