区块链中的数学 – 迪菲-赫尔曼密钥交换

本节介绍离散域上椭圆曲线进行迪菲赫尔曼密钥交换,并加以实例说明

## 写在前面 上一节我们介绍了[离散域上的椭圆曲线签名和验证过程](https://learnblockchain.cn/article/1551),本节继续介绍离散域上椭圆曲线进行迪菲赫尔曼密钥交换,并加以实例说明。首先看看什么是迪菲赫尔曼密钥交换? ## 迪菲-赫尔曼密钥交换 Diffie–Hellman key exchange,缩写为D-H, 是一种安全协议,用于双方在一个不安全的通信网络上建立一个 共享的秘钥,有了共享秘钥以后,就可以使用这个密钥加密交互消息。由于通信双方最终使用的密钥相同,所以可以认为该协议目标是创建一个对称密钥(对称密钥和非对称密钥可自行学习)。该协议也称迪菲-赫尔曼密钥协商,名字以发明人的名字命名,符合惯例,无其他特殊意义。 迪菲-赫尔曼密钥交换本身是一个匿名(无认证)的密钥交换协议,它却是很多认证协议的基础,并且被用来提供传输层安全协议的短暂模式中的前向安全性。 ## 密钥交换(创建)过程 假设A,B两人通信,约定使用同一个有限循环群G和它的一个生成元g。一般过程如下: 1. A选择一个随机正整数a,计算$r_a$=$g^a$ mod p发送给B。 2. B选择一个随机正整数b,计算$r_b$=$g^b$ mod p发送给A。 3. A收到B消息后 计算R1=$r_b^a$ mod p 4. B收到A消息后 计算R2=$r_a^b$ mod p 5. 由于r1==r2,所以得到同一个值,作为共同的密钥。 为什么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, 1. A计算:$r_a$ =$g^a$ mod p=$3^4$ mod 29 =23 发给B 2. B计算:$r_b$ =$g^b$ mod p=$3^7$ mod 29 =12 发给A 3. A收到$r_b$后计算 R1=$r_b^a$ mod p =$12^4$ mod 29= 1 4. A收到$r_a$后计算 R2=$r_a^b$ mod p =$23^7$ mod 29= 1 R1=R2,很巧选取的数据得到的结果的1. 椭圆曲线上应用迪菲-赫尔曼密钥交换的算法与上述有点不同,椭圆曲线上没有点的幂运算,取而代之的是点的标量乘法运算, 这一点在之前文章有所提及[椭圆曲线上的指数运算](https://mp.weixin.qq.com/s?__biz=MzA5NzI4MzkyNA==&mid=2247483693&idx=1&sn=99081b4d1030b4ab9b0e01d7a5e7aa2e&scene=21#wechat_redirect) 1. A生成私钥a,将它乘以基点G得到公钥$Q_a$,即 a *G=$Q_a$ 发给B 2. B生成私钥b,将它乘以基点G得到公钥$Q_b$,即 b *G=$Q_b$ 发给A 3. A计算 ($x_k,y_k$) = a *$Q_b$, $x_k$ 即为交换得到的密钥。 4. B计算 ($x_k,y_k$) = b *$Q_a$, $x_k$即为交换得到的密钥。 结果显而易见,注意实际用到的密钥协商算法参数是严格选取的大整数,例子中只是作为原理说明。现实中密钥交换算法是与其他加密算法一起使用,如RSA_DH, EC-DH, 其实对应了上面列举的两个例子。 实际编程中,密钥交换已经有实现完整的库可以用。例如Java中 KeyAgreement等。 ## 安全性 迪菲-赫尔曼密钥交换本身并没有提供通讯双方的身份验证服务,所以有可能会被中间人攻击。一个中间人在信道的中间分别和A,B进行两次迪菲-赫尔曼密钥交换,就能够成功的向A假装B,向B假装A。此时攻击者可以读取任何一个人的信息并重新加密信息,然后传递给另一个人。因此通常都需要一个能够验证通讯双方身份的机制来防止这类攻击。有很多种安全身份验证解决方案使用到了迪菲-赫尔曼密钥交换。当A和B共有一个公钥基础设施时,他们可以将他们的返回密钥进行签名;STS以及IPsec协议的IKE组件已经成为了Internet协议的一部分。 由于密码学中大量用到模运算,之前很多文章大都提到,下一节将[总结模运算下的各种运算规则](https://learnblockchain.cn/article/1555)。 欢迎关注公众号:blocksight

写在前面

上一节我们介绍了离散域上的椭圆曲线签名和验证过程,本节继续介绍离散域上椭圆曲线进行迪菲赫尔曼密钥交换,并加以实例说明。首先看看什么是迪菲赫尔曼密钥交换?

迪菲-赫尔曼密钥交换

Diffie–Hellman key exchange,缩写为D-H, 是一种安全协议,用于双方在一个不安全的通信网络上建立一个 共享的秘钥,有了共享秘钥以后,就可以使用这个密钥加密交互消息。由于通信双方最终使用的密钥相同,所以可以认为该协议目标是创建一个对称密钥(对称密钥和非对称密钥可自行学习)。该协议也称迪菲-赫尔曼密钥协商,名字以发明人的名字命名,符合惯例,无其他特殊意义。

迪菲-赫尔曼密钥交换本身是一个匿名(无认证)的密钥交换协议,它却是很多认证协议的基础,并且被用来提供传输层安全协议的短暂模式中的前向安全性。

密钥交换(创建)过程

假设A,B两人通信,约定使用同一个有限循环群G和它的一个生成元g。一般过程如下:

  1. A选择一个随机正整数a,计算$r_a$=$g^a$ mod p发送给B。
  2. B选择一个随机正整数b,计算$r_b$=$g^b$ mod p发送给A。
  3. A收到B消息后 计算R1=$r_b^a$ mod p
  4. B收到A消息后 计算R2=$r_a^b$ mod p
  5. 由于r1==r2,所以得到同一个值,作为共同的密钥。

为什么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,

  1. A计算:$r_a$ =$g^a$ mod p=$3^4$ mod 29 =23 发给B
  2. B计算:$r_b$ =$g^b$ mod p=$3^7$ mod 29 =12 发给A
  3. A收到$r_b$后计算 R1=$r_b^a$ mod p =$12^4$ mod 29= 1
  4. A收到$r_a$后计算 R2=$r_a^b$ mod p =$23^7$ mod 29= 1 R1=R2,很巧选取的数据得到的结果的1.

椭圆曲线上应用迪菲-赫尔曼密钥交换的算法与上述有点不同,椭圆曲线上没有点的幂运算,取而代之的是点的标量乘法运算, 这一点在之前文章有所提及椭圆曲线上的指数运算

  1. A生成私钥a,将它乘以基点G得到公钥$Q_a$,即 a *G=$Q_a$ 发给B
  2. B生成私钥b,将它乘以基点G得到公钥$Q_b$,即 b *G=$Q_b$ 发给A
  3. A计算 ($x_k,y_k$) = a *$Q_b$, $x_k$ 即为交换得到的密钥。
  4. B计算 ($x_k,y_k$) = b *$Q_a$, $x_k$即为交换得到的密钥。

结果显而易见,注意实际用到的密钥协商算法参数是严格选取的大整数,例子中只是作为原理说明。现实中密钥交换算法是与其他加密算法一起使用,如RSA_DH, EC-DH, 其实对应了上面列举的两个例子。 实际编程中,密钥交换已经有实现完整的库可以用。例如Java中 KeyAgreement等。

安全性

迪菲-赫尔曼密钥交换本身并没有提供通讯双方的身份验证服务,所以有可能会被中间人攻击。一个中间人在信道的中间分别和A,B进行两次迪菲-赫尔曼密钥交换,就能够成功的向A假装B,向B假装A。此时攻击者可以读取任何一个人的信息并重新加密信息,然后传递给另一个人。因此通常都需要一个能够验证通讯双方身份的机制来防止这类攻击。有很多种安全身份验证解决方案使用到了迪菲-赫尔曼密钥交换。当A和B共有一个公钥基础设施时,他们可以将他们的返回密钥进行签名;STS以及IPsec协议的IKE组件已经成为了Internet协议的一部分。

由于密码学中大量用到模运算,之前很多文章大都提到,下一节将总结模运算下的各种运算规则。

欢迎关注公众号:blocksight

区块链技术网。

  • 发表于 2020-05-09 20:19
  • 阅读 ( 1311 )
  • 学分 ( 0 )
  • 分类:入门/理论

评论