2121516312627

  • Tiny熊
  • 更新于 2022-06-13 11:53
  • 阅读 29

为什么能得到共同的密钥?

思考这个问题之前,需要先回答如果得到了共同的密钥,那么将是什么? 不难猜到,得到的共同密钥是$K_A$和$K_B$

只要二者相同,也就达到了密码协商的目...

为什么能得到共同的密钥?

思考这个问题之前,需要先回答如果得到了共同的密钥,那么将是什么? 不难猜到,得到的共同密钥是$K_A$和$K_B$

只要二者相同,也就达到了密码协商的目的:用户A,B独自计算出一个相同的秘密值

那$K_A$和$K_B$相不相同呢?这里仔细分析下。

$K_B = KDF (x_v | y_v |Z_A |Z_B ,klen)$ $K_A = KDF (x_u | y_u |Z_A |Z_B ,klen)$

观察这两个式子,只要 $x_v | y_v$ 与 $x_u | y_u$ 相同就可以,而这两者分别是U,V的坐标,问题转化成了 U = V 。

下面看下U和V是否相等?

$V=h * t_B(P_A + \overline{x_1}R_A)$ $U=h v t_A(P_B + \overline{x_2}R_B)$

相同h可以消去,消去h后用 表示:

$V_h = t_B(P_A + \overline{x_1}R_A)$ $U_h = t_A(P_B + \overline{x_2}R_B)$

$t_B$表达式代入

$V_h = (d_B + \overline{x_2} r_B)(P_A + \overline{x_1}R_A)$ $=d_BP_A + d_B \overline{x_1}R_A + \overline{x_2}r_B P_A + \overline{x_2}r_B\overline{x_1}R_A$ $=d_BGd_A + d_B \overline{x_1}r_AG + \overline{x_2}r_BGd_A + \overline{x_2}r_B\overline{x_1}r_AG$ $=d_AP_B + \overline{x_1}r_AP_B + \overline{x_2}R_Bd_A + \overline{x_2}R_B\overline{x_1}r_A$ $=(d_A + \overline{x_1} r_A)(P_B + \overline{x_2}R_B)$ $=t_A(P_B + \overline{x_2}R_B )$ $=U_h$

依次回推, 可得 $K_A=K_B$

小结

本节讲了SM2算法中的密钥协商过程,较迪菲赫尔曼密钥交换略有复杂,其实本质是一样的。最后证明了 为什么这样做可以得出相同的密钥?

知其然知其所以然是我们一贯坚持的原则!

本文内容主要参照 《《GBT 32918.2-2016 信息安全技术 SM2椭圆曲线公钥密码算法 第3部分:密钥交换协议》

好了,下一篇继续说sm2的一些实现相关的内容。

欢迎关注公众号:blocksight

  • 学分: 0
  • 标签:
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Tiny熊
Tiny熊
0x1231...6564
登链社区发起人 登链团队对 DEFI 应用有深刻的理解和丰富的开发经验,如果你有开发、审计、培训合作等需求, 加我微信:xlbxiong 。 咨询问题在问答区提问即可,微信好友太多,不看问题,请凉解~