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

这篇具有很好参考价值的文章主要介绍了02_CCC3.0数字钥匙_SPAKE2+执行流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

  在计算DK的式子中,s(Salt)和pwd是车厂服务器产生的随机数,一个所谓盐值另一个作为配对密码,他们的长度分别是16字节和13字节;所有参数取值可以参考下图:
02_CCC3.0数字钥匙_SPAKE2+执行流程

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

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

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

  式子中的n是NIST P-256椭圆曲线算法G点的阶数,是一个大数;其在此取值可以参考下图:
02_CCC3.0数字钥匙_SPAKE2+执行流程

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

L = w1 * G

  式中w1在前面的计算中已经派生出来了,G是NIST P-256椭圆曲线算法G点,G是二维平面里的一个点,因此它拥有x和y两个数值,简称G.x和G.y,在此其取值为:
02_CCC3.0数字钥匙_SPAKE2+执行流程

  因此计算L是属于常数与二维坐标点相乘,从而得出的L必定是二维的。
02_CCC3.0数字钥匙_SPAKE2+执行流程

  到此,车厂服务器产生了对配对过程中起到作用的四个参数,分别是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是一个固定值,他们的取值参考下图:

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

  计算得出的X应该是:
02_CCC3.0数字钥匙_SPAKE2+执行流程
  SPAKE2+ Flow中,车辆端端生成与设备端交互的Y:

Y = y × G + w0 × N

  式子中的y是一个随机数,N是一个固定值,他们的取值参考下图:
02_CCC3.0数字钥匙_SPAKE2+执行流程
02_CCC3.0数字钥匙_SPAKE2+执行流程
  计算得出的Y应该是:
02_CCC3.0数字钥匙_SPAKE2+执行流程
  在此,设备端已经派生出了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参考下图:
02_CCC3.0数字钥匙_SPAKE2+执行流程
  从而就可以生成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+流程成功执行,安全通道成功建立。接下来就可以经行双端的证书交换了。文章来源地址https://www.toymoban.com/news/detail-413280.html

到了这里,关于02_CCC3.0数字钥匙_SPAKE2+执行流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LabVIEWCompactRIO 开发指南22 CVT客户端通信(CCC)

    LabVIEWCompactRIO 开发指南22 CVT客户端通信(CCC) 如果使用第3章中讨论的CVT进行进程间通信,请考虑使用CCC。如果已经创建了CVT标签,并且想在网络上发布此数据,CCC不失为一个简单而优雅的解决方案。它基于TCP/IP,最适合1:1系统配置。如果使用的是1:N或N:1系统配置,请考

    2024年02月05日
    浏览(21)
  • 介绍 sCrypt:BTC 的 Layer-1 智能合约框架

    在 TypeScript 中开发 BTC 智能合约 我们非常高兴地推出 sCrypt:一种现代 Typescript 框架,用于在 BTC 上开发第一层智能合约,无需分叉。 现在,人们可以使用现代开发工具在易于使用的统一框架中编写、测试、调试、部署和调用智能合约。 任何 web2 开发人员都可以在 BTC 上开发智

    2024年01月18日
    浏览(30)
  • sCrypt 合约中的椭圆曲线算法:第二部分

    我们在脚本中实现了椭圆曲线 (EC) 算法。在之前的实现中,我们进行链下计算并在脚本中验证结果。我们这里直接用脚本计算。 基于EC的应用非常多,特别是在密码学领域,如数字签名、加密、承诺方案等。作为具体示例,我们重新实现了 ECDSA 签名验证,允许使用任意消息验

    2024年01月16日
    浏览(38)
  • MySQL运维02-MySQL执行SQL文件的几种方式

    对于这种方式,还可以查看文件执行时的输出,有如下两种方法: 在MySQL服务器上执行SQL文件,一种方法是可以通过mysql -e或者直接登录mysql客户端后,通过source命令执行文件。另一种方法是将SQL文件作为mysql客户端的输入,即 mysql batch-file

    2024年02月11日
    浏览(56)
  • openssl3.2 - 官方demo学习 - kdf - scrypt.c

    设置 kdf-SCRYPT算法的参数, 取key

    2024年01月16日
    浏览(32)
  • 【数据安全-02】AI打假利器数字水印,及java+opencv实现

    AIGC 的火爆引燃了数字水印,说实话数字水印并不是一项新的技术,但是这时候某些公司拿出来宣传一下特别应景,相应股票蹭蹭地涨。数字水印是什么呢,顾名思义,和我们在pdf中打的水印作用差不多,起到明确版权、防伪验真的作用。但是不同于传统肉眼可见的水印,数

    2024年02月11日
    浏览(26)
  • 【spring源码系列-02】通过refresh方法剖析IOC的整体流程

    Spring源码系列整体栏目 内容 链接地址 【一】spring源码整体概述 https://blog.csdn.net/zhenghuishengq/article/details/130940885 【二】通过refresh方法剖析IOC的整体流程 https://blog.csdn.net/zhenghuishengq/article/details/131003428 【三】xml配置文件启动spring时refresh的前置工作 https://blog.csdn.net/zhenghuishen

    2024年02月08日
    浏览(33)
  • Flink Job 执行流程

    ​ 基于 Yarn 层面的架构类似 Spark on Yarn 模式 ,都是由 Client 提交 App 到 RM 上面去运行,然后 RM 分配第一个 container 去运行 AM ,然后由 AM 去负责资源的监督和管理 。需要说明的是, Flink 的 Yarn 模式更加类似 Spark on Yarn 的 cluster 模式,在 cluster 模式中, dirver 将作为 AM 中的一

    2024年02月04日
    浏览(34)
  • spring mvc 执行流程

    1、客户端发起请求先经过Filter处理 2、经过Filter后到达Servlet 3、在请求到了DispatchServlet核心处理器,收到请求后DispatchServlet向HandlerMapping请求查询Handler 4、HandlerMapping返回HandlerExecutionChain处理执行链到DispatchServlet,HandlerExecutionChain包括了Handler和Interceptor 5、DispatchServlet根据Han

    2024年02月11日
    浏览(32)
  • spark sql 执行流程

    最近学习了spark sql执行流程,从网上搜到了大都是sql解析、analyzer、optimizer阶段、sparkplan阶段,但是我比较好奇的是,这几个阶段是怎么串起来的,于是花了好几天着重从源码层面看看了看具体实现,写了几点自己认为应该注意的地方。 spark sql的命令主要分为两种形式:com

    2024年02月14日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包