02_CCC3.0数字钥匙_SPAKE2+执行流程

news2024/11/26 14:27:38

02_CCC3.0数字钥匙_SPAKE2+执行流程


Vehicle OEM Server
  派生salt、L和w0;这三个参数需要服务器给到车辆端的,所以需要在服务器事先生成。用于与车辆端的做SPAKE2+验证。

DK = Scrypt(pwd, s, Nscrypt, r, p, dkLen);
z0 = DK[0  : 320]
z1 = DK[320 : 320]

  在计算DK的式子中,s(Salt)和pwd是车厂服务器产生的随机数,一个所谓盐值另一个作为配对密码,他们的长度分别是16字节和13字节;所有参数取值可以参考下图:
在这里插入图片描述

  由上图参数计算出来得出的DK、z0和z1的具体数据值是:

  在此得出z0和z1,从而可以派生出w0和w1:

w0  = (z0 mod(n-1))+1
w1  = (z1 mod(n-1))+1

  式子中的n是NIST P-256椭圆曲线算法G点的阶数,是一个大数;其在此取值可以参考下图:
在这里插入图片描述

  计算得出的w0和w1一定不能够相等。
  以上,开头提到的三个参数就剩下L了,那么L可以通过一下公式计算得出:

L = w1 * G

  式中w1在前面的计算中已经派生出来了,G是NIST P-256椭圆曲线算法G点,G是二维平面里的一个点,因此它拥有x和y两个数值,简称G.x和G.y,在此其取值为:
在这里插入图片描述

  因此计算L是属于常数与二维坐标点相乘,从而得出的L必定是二维的。
在这里插入图片描述

  到此,车厂服务器产生了对配对过程中起到作用的四个参数,分别是pwd、s(slat:以下简称s)、L和w0,随后车厂服务器通过web将pwd下发到设备端,以备配对时做SPAKE2+使用。将s和verifier(L、w0)通过安全的专用通道下发到车辆端做SPAKE2+使用。车厂服务器到这一步后暂时推出群聊,剩下的SPAKE2+认证就让设备端和车辆端离线协商并认证。

设备端
  设备端收到服务器的pwd后,当车辆端发送请求开始SPAKE2+命令时,车辆端会将s、Nscrypt、r、P这几个参数发送过来,与服务器一样的步骤生成属于设备端的z0、z1、w0和w1。
  SPAKE2+ Flow中,设备端生成与车辆端交互的第一个数据X:

X = x × G + w0 × M

  式子中的x是一个随机数,M是一个固定值,他们的取值参考下图:

在这里插入图片描述
在这里插入图片描述

  计算得出的X应该是:
在这里插入图片描述
  SPAKE2+ Flow中,车辆端端生成与设备端交互的Y:

Y = y × G + w0 × N

  式子中的y是一个随机数,N是一个固定值,他们的取值参考下图:
在这里插入图片描述
在这里插入图片描述
  计算得出的Y应该是:
在这里插入图片描述
  在此,设备端已经派生出了X,设备端就可以将X发送给车辆端。

车辆端
  当车辆端接收到设备端发过来的X,车辆端就可以计算Z和V了:

Z = y × (X − w0 × M)
V = y × L

  至此,车辆端已经从不同途径获得了 X、Y、Z、V和w0;那么就可以根据这几个数据使用SHA-256哈希出密钥K:

K = SHA-256(len(X) || X || len(Y) || Y || len(Z) || Z || len(V) || V || len(w0) || w0)

  由K可以派生出系统密钥CK和SK:

CK = K [0:128]
SK = K [128:128]

  接下来就需要生成出Y以外传输给设备端的参数M[1], M[1]是个密文,需要K1作为钥匙进行加解密;那么就需要先派生K1:

K1=HKDF(CK, “ConfirmationKeys” || TLV 5Bh || TLV 5Ch, [128:128])

  TLV5B和5C参考下图:
在这里插入图片描述
  从而就可以生成M[1]:

M[1]=C-MAC(K1, X)

  至此,车辆端已经将Y和M[1]派生完成,接下来就将这两个参数发送到设备端。设备端收到车辆端发送的两个参数后就会派生出设备端的Z、V、K和M[2]:

Z=x × (Y − w0 × N)
V=w1 × (Y − w0 × N)
K = SHA-256(len(X) || X || len(Y) || Y || len(Z) || Z || len(V) || V || len(w0) || w0)

  由K可以派生出系统密钥CK和SK:

CK = K [0:128]
SK = K [128:128]

  计算出K2和M[2]:

K2=HKDF(CK, “ConfirmationKeys” || TLV 5Bh || TLV 5Ch, [128:128])
M[2]=C-MAC(K2, Y)

  那么设备端就需要将M[2]发送到车辆端。让车辆端验证M[2]的合法性和设备的合法性。
  如果以上所有步骤都顺利通过,则SPAKE2+流程成功执行,安全通道成功建立。接下来就可以经行双端的证书交换了。

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

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

相关文章

判断环形链表是否有环??返回环形链表的入口点

给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(…

IDEA插件-MavenHapler

1.安装Maven Helper Maven Helper 是 IntelliJ IDEA 中的一个插件,可以帮助您管理 Maven 依赖项。它可以帮助您更容易地删除不再需要的依赖项,查看依赖项的冲突,以及执行其他有关 Maven 依赖项的操作。 打开 IDEA 设置页面: 在插…

gpu超频超额训练导致电源关机

详细原理参见: 离显卡功耗实标还有多远?峰值功耗与电源关系终结篇 – FCPOWERUP极电魔方 和 【硬件科普】如何合理科学的选择电源功率的大小?_哔哩哔哩_bilibili 本人的1250w电源截图: 分析: 12V输出分了6路&#xff…

游戏逆向_Android读写游戏内容

一、背景 Android外挂的实现,需要涉及相应游戏内容的读写。读写的游戏内容包括代码和数据 针对不同的读写对象,通用的步骤就是寻找对象地址(位置)→获取相应权限→读写。下面将更详细介绍下相关实现。 二、实现方式 实现方式可…

了解最新的Android开发趋势和技术的秘诀

前言 当前,Android开发市场已经相当成熟,并且在全球范围内都非常活跃。Android是全球最受欢迎的移动操作系统之一,自Android开源以来,它已经改变了移动技术。市场上大量的企业和开发者都在积极地跟进、深入研究和开发Android系统…

大数据Flink进阶(十二):Flink本地模式开启WebUI

文章目录 Flink本地模式开启WebUI 一、在Flink 项目中添加本地模式 WebUI的依赖

2023 Java面试题短期突击攻略,已帮助400+位程序员成功拿到offer

2023春招已经开始一段时间了,很多同学会问Java面试八股文有必要背吗? 我的回答是:很有必要。你可以讨厌这种模式,但你一定要去背,因为不背你就进不了大厂。 国内的互联网面试,恐怕是现存的、最接近科举考试…

让PyTorch训练速度更快,你需要掌握这17种方法

掌握这 17 种方法,用最省力的方式,加速你的 Pytorch 深度学习训练。近日,Reddit 上一个帖子热度爆表。主题内容是关于怎样加速 PyTorch 训练。原文作者是来自苏黎世联邦理工学院的计算机科学硕士生 LORENZ KUHN,文章向我们介绍了在…

利用Chat GPT建立一个To-Do应用程序--我们终于遇到了我们的替代者吗?

海外Udemy、Coursera、Skillshare、Cantrill等平台精品编码课程,请访问 https://www.postcode.vip 我们看到GitHub Copilot在2021年10月发布,整个开发社区都疯了。 有些人声称我们很快就会失去工作,而其他人,像我一样&#xff0…

首家完成并购并进行重新备案公示的企业征信牌照公司-湖南省征信

2023年4月13日,中国人民银行长沙中心支行发布《关于对湖南省征信有限公司企业征信机构变更备案的公示》。内容显示中国人民银行长沙中心支行根据《征信业管理条例》《征信机构管理办法》《企业征信机构备案管理办法》及有关规定,决定受理湖南省征信有限公…

小程序学习四--组件--样式、数据、方法、属性、数据监听、生命周期、插槽、behavior

一、自定义组件 1.创建组件 2.组件引用--局部引用 3.组件引用--全局引用 4.组件和页面的区别 5.修改组件胡样式隔离选项 stypelsolation的可选值 二、自定义组件数据、方法、属性和数据监听 1.data数据 2.methods方法 事件处理函数、自定义方法_ 3.properties属性 页面中调…

JVM 内存结构

文章目录1、程序计数器2、虚拟机栈2.1 、定义2.2、栈内存溢出2.3 、线程运行诊断3、本地方法栈4、堆4.1、定义4.2 、堆内存溢出4.3 、堆内存诊断5、方法区(Method Area)5.1 、定义5.2、方法区组成5.3 、方法区内存溢出5.4 、运行时常量池5.5 、StringTab…

【JavaEE】TCP网络原理

目录 1.TCP协议定义 2.TCP原理 2.1确认应答机制 2.2超时重传机制 2.3连接管理 2.3.1建立连接(三次握手) 2.3.2断开连接(四次挥手) 2.4滑动窗口 2.5流量控制 2.6拥塞控制 2.7延迟应答 2.8捎带应答 2.9面向字节流&…

【STC8A8K64D4开发板】——按键检测

第2-3讲:按键检测 学习目的学习轻触按键和触摸按键硬件电路原理。学习STC8A8K64D4用作输入时相关寄存器的配置。掌握如何读取GPIO状态。掌握编写轻触按键和触摸按键检测程序。 硬件电路设计 IK-64D4开发板上设计了4个轻触按键和一个触摸按键,提供给用户作…

企业级信息系统开发讲课笔记2.3 利用MyBatis实现关联查询

文章目录零、本节学习目标一、查询需求(一)针对三张表关联查询(二)按班级编号查询班级信息(三)查询全部班级信息二、创建数据库表(一)创建教师表(二)创建班级…

BUUCTF-WEB-INF/web.xml泄露-SSTI注入

第八周 目录 WEB [RoarCTF 2019]Easy Java WEB-INF/web.xml泄露 WEB-INF/web.xml泄露原因 WEB-INF/web.xml泄露利用方法 解决方法 [BJDCTF2020]The mystery of ip 什么是板块注入 SSTI 为什么会产生 什么是render_template render_template: 我们为什么…

背包问题-动态规划

背包问题 容量有限的背包&#xff0c;给很多商品&#xff0c;商品有相应的体积与价值 01背包问题 一个背包 每个物品只有一个 最终状态方程 dp[i][j]max(dp[i-1][j],dp[i-1][j-w[i]]v[i]) 推导过程 由上一层推导过来 选择拿不拿i 最终代码 #include<iostream> #…

第12届蓝桥杯省赛真题剖析-2020年12月20日Scratch编程中级组

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第124讲。 第12届蓝桥杯省赛举办了两次&#xff0c;这是2020年10月20日举行的第一次省赛中级组试题&#xff0c;比赛仍…

【Java实战篇】Day6.在线教育网课平台

文章目录一、需求&#xff1a;绑定媒资1、需求分析2、库表设计与模型类3、接口定义4、Mapper层开发5、Service层开发6、完善controller层二、需求&#xff1a;课程预览1、需求分析2、实现技术3、模板引擎4、Freemarker入门5、部署网站门户6、接口定义7、接口开发8、编写模板9、…

放弃 console.log 吧!用 Debugger 你能读懂各种源码

很多同学不知道为什么要用 debugger 来调试&#xff0c;console.log 不行么&#xff1f; 还有&#xff0c;会用 debugger 了&#xff0c;还是有很多代码看不懂&#xff0c;如何调试复杂源码呢&#xff1f; 这篇文章就来讲一下为什么要用这些调试工具&#xff1a; console.lo…