本节介绍离散域上椭圆曲线进行迪菲赫尔曼密钥交换,并加以实例说明
上一节我们介绍了离散域上的椭圆曲线签名和验证过程,本节继续介绍离散域上椭圆曲线进行迪菲赫尔曼密钥交换,并加以实例说明。首先看看什么是迪菲赫尔曼密钥交换?
Diffie–Hellman key exchange,缩写为D-H, 是一种安全协议,用于双方在一个不安全的通信网络上建立一个 共享的秘钥,有了共享秘钥以后,就可以使用这个密钥加密交互消息。由于通信双方最终使用的密钥相同,所以可以认为该协议目标是创建一个对称密钥(对称密钥和非对称密钥可自行学习)。该协议也称迪菲-赫尔曼密钥协商,名字以发明人的名字命名,符合惯例,无其他特殊意义。
迪菲-赫尔曼密钥交换本身是一个匿名(无认证)的密钥交换协议,它却是很多认证协议的基础,并且被用来提供传输层安全协议的短暂模式中的前向安全性。
假设A,B两人通信,约定使用同一个有限循环群G和它的一个生成元g。一般过程如下:
为什么r1==r2? 可以推导如下:
$R_1=r_b^a\ mod\ p=(g^bmodp)^a=(g^b)^a\ mod\ p=g^{ba}\ mod\ p$ $R_2=r_a^b\ mod\ p=(g^amodp)^b=(g^a)^b\ mod\ p=g^{ab}\ mod\ p$
得到R1==R2, 这里用到了指数模运算的性质(下一节将详细介绍模运算规则)。 于是,A和B就同时协商出一个新的群元素,它可以被用作共享秘密。因为群是乘法交换的。
假定 在模素数29有限域上 g=3, p=29
A 秘密选择随机数a=4,B秘密选择随机数b=7,
椭圆曲线上应用迪菲-赫尔曼密钥交换的算法与上述有点不同,椭圆曲线上没有点的幂运算,取而代之的是点的标量乘法运算, 这一点在之前文章有所提及椭圆曲线上的指数运算
结果显而易见,注意实际用到的密钥协商算法参数是严格选取的大整数,例子中只是作为原理说明。现实中密钥交换算法是与其他加密算法一起使用,如RSA_DH, EC-DH, 其实对应了上面列举的两个例子。 实际编程中,密钥交换已经有实现完整的库可以用。例如Java中 KeyAgreement等。
迪菲-赫尔曼密钥交换本身并没有提供通讯双方的身份验证服务,所以有可能会被中间人攻击。一个中间人在信道的中间分别和A,B进行两次迪菲-赫尔曼密钥交换,就能够成功的向A假装B,向B假装A。此时攻击者可以读取任何一个人的信息并重新加密信息,然后传递给另一个人。因此通常都需要一个能够验证通讯双方身份的机制来防止这类攻击。有很多种安全身份验证解决方案使用到了迪菲-赫尔曼密钥交换。当A和B共有一个公钥基础设施时,他们可以将他们的返回密钥进行签名;STS以及IPsec协议的IKE组件已经成为了Internet协议的一部分。
由于密码学中大量用到模运算,之前很多文章大都提到,下一节将总结模运算下的各种运算规则。
欢迎关注公众号:blocksight
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!