为什么能得到共同的密钥?
思考这个问题之前,需要先回答如果得到了共同的密钥,那么将是什么? 不难猜到,得到的共同密钥是$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
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!