SecOC基础原理详解1

news2024/9/23 3:31:37

1、SecOC是什么?

SecOC官方说法叫安全通讯模块。通俗一点就是发送CAN原始数据的时候进行加密,解析CAN原始数据的时候进行解密。

车上实施SecOC机制数据的ECU(ECU是啥?可以百度一下),即使接收到了攻击性的CAN指令,在解密的时候出现错误,也会将此帧CAN报文丢弃。大大降低了数据攻击的风险。
例如:负责汽车动力功能的ECU,收到了启动发动机或者关闭发动机的指令。如果此指令不是正常触发的,而是攻击性触发的。想想多可怕。

1.1、SecOC应用范围

可以实施SecOC机制报文的CAN数据必须是CANFD格式的,CAN标准格式的实施不了SecOC机制,后面会详解具体原因。SecOC 机制用于保护车内网中敏感信息的完整性、可认证性和防重放性。保护的对象以 PDU 为单位,需要预先选择和配置要由 SecOC 保护的每条 PDU 消息。在实施时,需要在受保护的 PDU 消息尾部增加新鲜度值的信息和完整性校验值的信息。

1.2、基础名词解释

词汇名称词汇含义
SecOCSecure On Board Communication(安全通讯模块)
PDUProtocol Data Unit(协议数据单元)- CAN数据
安全PDU实施 SecOC 机制的 PDU
MACMessage Authentication Code(消息认证码)
ECUElectronic Control Unit(电子控制单元)
VINVehicle Identification Number(车辆识别代码)

本章暂时用到这些名词,其他名词会在需要的时候解析!

1.3、安全方案规范

本文描述的 SecOC 模块提供了验证车辆架构内的 ECU 之间基于 PDU通信的完整性和新鲜性(防止重放攻击 )所必需的功能。该方法要求 PDU 发送端 ECU和 PDU 接收端 ECU 都实现 SecOC 模块。两侧的 SecOC 模块与 PDUR模块进行交互。

SecoC 模块在系统架构中的位置如下图所示
SecOC模块
当需要发送安全 PDU 时,上层应用的 PDU 信息由 PDUR 模块转发到 SecOC模块,SecOC 模块对 PDU 信息进行处理,加入了认证信息,再调用 PDUR 提供的 API将安全 PDU 通过下层通信接口发送出去。

当下层通信模块接收到安全 PDU 时,安全 PDU 信息由 PDUR 模块转发到SecOC 模块,SecOC 模块对 PDU 信息进行验证,如果验证通过,则调用 PDUR模块提供的 API将PDU 信息转发到上层应用。
SecOC模块运行机制

在发送方 ,SecOC 模块通过向待发送的 PDU 添加认证信息来创建安全 PDU。认证信息包括 MAC 值(消息认证码)和新鲜度值信息。为了提供消息新鲜度,PDU 发送方和接收方的 SecOC 模块从新鲜度值管理模块获得每个安全 PDU 的新鲜度值( Freshness Value,简称 FV)

在接收方,SecOC 模块通过验证发送方 SecOC 模块附加的认证信息来检查安全 PDU 的新鲜性和完整性。为了验证安全 PDU 的新鲜性和完整性,提供给接收方 SecOC 的安全 PDU 数据应是发送方 SecOC 生成的安全 PDU 数据,该安全PDU 数据在传输和处理的过程中不应被其它模块修改。验证通过后才能继续处理该 PDU,由 PDUR 模块将该 PDU 转发至应用层使用;如果验证不通过,则不再路由该 PDU,拒绝接收。

2、SecOC报文详解

2.1、安全PDU

安全PDU是由原始 PDU、新鲜度值信息和 MAC值信息组成。
安全 PDU 的内容结构顺序如图所示:

原始PDU新鲜度值MAC值

原始 PDU、新鲜度值信息和 MAC值含义如下:

名称内容
原始PDUCAN数据
新鲜度值每个安全 PDU 需要配置有一个新鲜度值新鲜度值 FV 是用于确保安全 PDU新鲜度的单调计数器。新鲜度值应来自新鲜度值管理模块。
MAC值使用SecOC密钥、安全PDU的数据标识符(如:CAN-FD 协议的 PDU 数据标识符为 CAN ID)、真实有效负载(原始 PDU) 、新鲜度值通过AES-128-CMAC 算法生成的唯一认证数据串

2.1.1、新鲜度值

安全 PDU 中包含完整新鲜度值的一部分,即截取的新鲜度值,新鲜度直被称为两部分,高有效位和低有效位。包含在安全 PDU 有效载荷中的计数器部分被称为新鲜度值的低有效位,计数器的剩余部分被称为新鲜度值的高有效位。

2.1.2、MAC值

计算 MAC 值的数据包括安全 PDU 的数据标识符( CAN ID )、PDU 原始数据和完整的新鲜度值。
安全 PDU 的数据标识符、PDU 原始数据和完整的新鲜度值分别连接在一起,以组成传递给 MAC 值生成 验证算法(本规范使用 AES-128CMAC 算法)的数据。

用于 MAC 值生成验证算法的数据 = PDU 的数据标识符 | PDU 原始数据| 完整的新鲜度值

其中新鲜度值需要从新鲜度值管理模块获取。

2.2、安全PDU截取

原始新鲜度值数据长度为 8 字节;原始 MAC 值数据长度为 16 字节。对 CAN-FD 协议的新鲜度值信息、MAC 值信息长度定义如下:
安全PDU
应通过截取的方式缩短安全PDU 中的新鲜度值和 MAC 值的长度,即在安全 PDU 中存放截取的新鲜度值和截取的 MAC 值。截图方式如上图所示。

在截取 MAC 值时应将原始 MAC 值的高有效位进行截取作为截取的 MAC值。截取的长度(SecOCAuthinfoTruncLength)为48bit,即6个字节。
在截取新鲜度值时,应将原始新鲜度值的低有效位进行截取,作为截取的新截取的长度SecOCFreshnessValueTruncLength 为16bit,即两个字节。

发送到通信链路另一侧的所有 Secoc 数据( 即新鲜度值、MAC 值、数据标识符)应以 Big Endian(大端)字节顺序编码,以便每个 Secoc 模块以相同方式解析数据。

因为SecOC的加密信息需要占用8字节,因此SecOC机制仅适合CAN-FD格式。

3、SecOC报文的创建与验证

3.1、创建安全PDU

为原始 PDU 创建安全 PDU 包括以下 6 个步骤

  1. 准备构建安全 PDU
    在准备期间,应分配必要的缓冲区以保存认证过程的中间和最终结果
  2. 为生成 MAC 值构建数据
    SecOC 模块应构造用于生成 MAC 值的数据 DataToAuthenticator
    DataToAuthenticator 是通过连接PDU 的数据标识符 SecOCDatald 原始PDU以及该 PDU 的数据标识符相对应的完整新鲜度值而形成的。PDU的数据标识符和新鲜度值应以 Big Endian 字节顺序编码
  3. 生成MAC 值
    SecOC 模块应通过将 DataToAuthenticator,DataToAuthenticator 的长度传递到认证算法( AES-128-CMAC ) 中生成 MAC 值。SecOC 模块应将生成的 MAC 值截取为指定的位数SecOCAuthlnfoTruncLength。
  4. 构建安全PDU
    SecOC 模块应通过将截取的新鲜度值信息和截取的 MAC 值信息添加到原始 PDU 来构建安全 PDU。
    安全 PDU 中内容的结构顺序应符合以下要求安全 PDU = 原始 PDU 截取的新鲜度值 (长度为SecOCFreshnessValueTruncLength )截取的 MAC 值 ( 长度为SecOCAuthInfoTruncLength)
  5. 更新新鲜度值
    需要通知新鲜度值管理模块 将安全 PDU 对应的新鲜度值增进行更新
  6. 发送安全 PDU
    将安全 PDU 发送。

3.2、验证安全PDU

验证安全 PDU 包括以下 6 个步骤

  1. 解析安全 PDU
    收到安全 PDU 后,Secoc 模块应从中解析原始 PDU,截取的新鲜度值和截取的 MAC 值
  2. 从新鲜度值管理模块获取新鲜度值
    SecOC 模块从新鲜度值管理模块获取与 PDU ID 对应的新鲜度值
  3. 构建验证 MAC 的数据
    SecOc 模块应构造用于计算接收方 MAC 值( DataToAuthenticator )的数据。该数据由 SecOCDatald,原始 PDU 数据以及用于验证的新鲜度值( FreshnessVerifyValue ) 连接组成
  4. 验证安全 PDU 中的认证信息
    SecOc 模块应通过将 DataToAuthenticator,DataToAuthenticator 的长度,从安全 PDU 解析的 MAC 值和其长度 SecOCAuthlnfoTruncLength 传递到认证算法( AES-128-CMAC ) 中来验证 MAC 值
    如果 MAC 值验证通过( 即通过本地认证算法计算得到的 MAC 值与 PDU中截取的 MAC 值一致 ),则安全 PDU 通过验证。
  5. 更新新鲜度值
    如果安全 PDU 通过验证,需要对本地的新鲜度值进行更新将本地的新鲜度值设置为此次待验证新鲜度值
  6. 将原始 PDU 传递给上层应用
    如果安全 PDU 的验证成功,则 Secoc 模块应使用 PDUR 模块提供的接口将原始 PDU 传递给上层应用模块。

4、SecOC报文与普通报文的区别

以CAN-FD格式报文为例,举例以下两种情况:

  1. DLC = 16
普通报文:
 ID         DLC                         DATA                                             
0x123       16      01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16
//全是有效数据

SecOC报文:
 ID         DLC                         DATA                                             
0x123       16      01 02 03 04 05 06 07 08 00 01 AD 3B 34 CF BC 67
//前8个是有效数据,9-10是新鲜度值,11-16是MAC值
  1. DLC = 32
普通报文:
 ID         DLC                         DATA                                             
0x123       32      01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
//全是有效数据

SecOC报文:
 ID         DLC                         DATA                                             
0x123       32      01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 00 01 AD 3B 34 CF BC 67
//前24个是有效数据,24-25是新鲜度值,26-32是MAC值

总结

SecOC说通俗一点就是在原始CAN帧上面加入一些标识,在解析的时候先识别标识,再解析数据,否则认为数据是无效的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/855279.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何将NAS空间变为本地磁盘,并拥有与实体硬盘所有常用功能

1.前言 作为一个垃圾佬,用自己的双路E5板子,加持PCIE拆分,4块PM983A齐上阵,气势可嘉。作为一个家庭NAS,如果仅仅用他当作一个普通的存储区存储数据那未免太过于浪费了;另一边,由于工作机硬盘太…

leetcode 子序列问题

718 最长重复子数组 此处求的是连续的子序列,使用动态规划进行求解。 使用dp[i][j]表示第1个序列前i个数字和第2个序列前j个数字的最大的重复子数组长度。 class Solution(object):def findLength(self, nums1, nums2):""":type nums1: List[int]:t…

Kotlin语法

整理关键语法列表如下: https://developer.android.com/kotlin/interop?hlzh-cn官方指导链接 语法形式 说明 println("count ${countnum}")字符串里取值运算 val count 2 var sum 0 类型自动推导 val 定义只读变量,优先 var定义可变变量…

Visual Studio在Release模式下设置代码的调试

Visual Studio在Release模式下设置代码的调试 Debug 模式下模型的加载速度、打开速度会降低很多,这里不推荐使用 Debug 模式进行调试。 Release 模式下可进行调试,使用 Release 模式调试,会提高模型打开速度、 加载速度、编译速度&#xff0c…

ChatGPT 6 月流量下滑 10%大模型遇到增长停滞,背后原因是什么?

近期数据显示,ChatGPT在过去的6个月中流量下滑了10%。这引发了对大模型发展是否达到瓶颈的疑问。我们对此进行了分析,并得出以下观点。首先,ChatGPT在实用性方面存在一些问题。它生成的文本内容往往过于模板化,句式和结构的同质性…

【计算机视觉 | Kaggle】保姆级教程:入门 Kaggle 的步骤详细介绍

文章目录 一、Overview二、Evaluation三、Timeline四、Code Requirements五、Data5.1 数据的可视化5.2 文件 六、Discussion七、Code 一、Overview 当进入到一场比赛的 Overview 页面后,先读完 Description,了解比赛讲了一件什么事情。 我们以一场比赛…

无涯教程-Perl - getprotobynumber函数

描述 此函数在标量context中将协议NUMBER转换为其对应的名称,在列表context中将其名称和相关信息转换为:($name,$aliases,$protocol_number)。 语法 以下是此函数的简单语法- getprotobynumber NUMBER返回值 此函数针对错误返回undef,否则返回标量context中的协议编号,并在…

Metamask登录方式集成

Metamask登录 https://www.toptal.com/ethereum/one-click-login-flows-a-metamask-tutorial#how-the-login-flow-works 参考: https://zh.socialgekon.com/one-click-login-with-blockchain 后端需要在用户表中增加address和nonce字段。兼容其他登录方式&#xff0…

添加@Transactional事务

1. 在启动类上新增开启注解功能 EnableTransactionManagement EnableTransactionManagement //开启事务注解功能 SpringBootApplication public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);} } 2. 方法上…

【Linux】gdb 的使用

目录 1. 使用 gdb 的前置工作 2. 如何使用 gdb 进行调试 1、如何看到我的代码 2、如何打断点 3、怎么运行程序 4、如何进行逐过程调试 5、如何进行逐语句调试 6、如何监视变量值 7、如何跳到指定位置 8、运行完一个函数 9、怎么跳到下一个断点 10、如何禁用/开启…

[OnWork.Tools]系列 04-快捷启动

简介 主要功能是将常用的软件拖动到软件中,实现快速点击启动,结合软件设置中的设置的快捷键,可以快速呼出对应的面板,使用快捷键快速启动应用 拖拽内容 拖拽快捷方式到面板,双击快速打开 拖拽文件方式到面板,双击快速打开 拖拽文件夹到面板双击快速打开 拖拽项目调整顺序 右…

python编程求出介于这两个数 之间的所有质数并打印输出。显示格式为“*数是质数

这里写自定义目录标题 练习 :提示用户输入两个正整数,编程求出介于这两个数之间的所有质数并打印输出。显示格式为“*数是质数。”代码打印效果 练习 :提示用户输入两个正整数,编程求出介于这两个数之间的所有质数并打印输出。显示…

在时间和频率域中准确地测量太阳黑子活动及使用信号处理工具箱(TM)生成广泛的波形,如正弦波、方波等研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

英信翻译为世界动力电池大会提供同传服务

2023年6月8日-11日,世界动力电池大会在四川宜宾举行。作为世界级动力电池行业盛会,以“绿色新动力世界新动能”为主题,2023世界动力电池大会积极服务全球碳中和愿景,致力于推动全球动力电池产业高质量可持续发展,得到了…

web安全漏洞

1.什么是Web漏洞 WEB漏洞通常是指网站程序上的漏洞,可能是由于代码编写者在编写代码时考虑不周全等原因而造成的漏洞。如果网站存在WEB漏洞并被黑客攻击者利用,攻击者可以轻易控制整个网站,并可进一步提前获取网站服务器权限,控制…

外资的“噩梦”,特斯拉不惧挑战,租赁印度办公楼,入驻当地市场

根据8月9日《印度时报》的报道,特斯拉近期在印度正式成立了名为“特斯拉印度汽车与能源公司”的子公司。 据可靠消息人士透露,特斯拉已在印度浦那维曼纳加尔地区的Panchshil商业园总部租下了面积为5850平方英尺的办公空间,该商业园被认为是印…

Cobalt Strike(cs)下载及使用

下载地址 https://pan.baidu.com/s/1OzsPz8vzEunZW35Oqdq2aw?pwdraf2 提取码:raf2 使用 1、启动服务 2、客户端连接服务,可以是linux\windows 3.新建监听器 4、生成反弹shell 5、在目标机器上执行生成的exe文件,靶机可以ping同攻击机&…

网页版Java(Spring/Spring Boot/Spring MVC)五子棋项目(四)对战模块

网页版Java(Spring/Spring Boot/Spring MVC)五子棋项目(四)对战模块 一、约定前后端交互接口1. 建立连接接口2. 针对落子的请求和响应 二、实现前端页面三、实现后端1. 当用户进入房间,更新用户状态 OnlineUserManager…

BDA初级分析——先导课

思考题:假设你是三只松鼠营销团队的一员 美团or抖音?你会如何选择? 一、什么是数据分析 数据分析是根据业务问题,对数据进行收集、清洗、处理和建模的过程,用于识别有助于业务的信息,获取关键业务结论并辅…

A2C原理和代码实现

参考王树森《深度强化学习》课程和书籍 1、A2C原理: Observe a transition: ( s t , a t , r t , s t 1 ) (s_t,{a_t},r_t,s_{t1}) (st​,at​,rt​,st1​) TD target: y t r t γ ⋅ v ( s t 1 ; w ) . y_{t} r_{t}\gamma\cdot v(s_{t1};\mathbf…