关于Diffie-Hellman(迪菲赫尔曼密钥交换算法)
Diffie-Hellman算法(下文称DH算法)是由Whitfield Diffie和Martin Hellman在1976年提出的,它是第一个能够让两个通信方在不直接交换密钥的情况下安全地共享加密密钥的公钥密码学协议。通过此算法,通信双方可以在公开的信道上建立一个共享的秘密密钥,进而用于加密和解密信息,确保通信的保密性。
DH算法的基本原理
DH算法的核心思想是利用数学中的离散对数问题,即使一个数字在公网上传输,其逆运算也极为困难,即模运算+幂运算,具体基本过程如下:
选择公参数:两方首先选择一个大质数p和一个原根,这两个参数可以公开,所有通信方都能访问,比如p=23,g=4
私钥选择:每一方选择一个私钥a和b(通常为随机数),并通过公钥生成计算结果
交换公钥:两方互相交换计算得到的公钥A和B
生成共享密钥:每方使用对方的公钥与自己的私钥计算共享密钥
p由于数学的对称性,最终双方会得到相同的共享密钥S。
此时,即使有人在公开的信道上拦截了A和B,由于离散对数问题的困难性,窃听者无法通过这些信息计算出共享密钥,从而保证了通信的安全性
举例说明
假设两位加密货币用户(User1和User2)希望通过DH算法建立一个共享的密钥,以确保他们的传输安全。
首先,User1和User2需要选择一些公共参数,这些参数可以公开,这里假设公共质数 p=23、公共原根为g=5;这两个参数是由网络协议预设的,所有通信方都知道。
接下来两个用户分别选择自己的私钥,这里假设U1私钥为a=6,U2私钥为b=15;私钥是保密的,只有各自知道,不能泄露给对方
接着根据DH算法,每个用户使用私钥计算他们的公钥,并将其发送给对方。
-
User1计算公钥:
A=g^a mod p=5^6 mod 23 = 15625 mod 23 = 8
用户A将公钥发送给User2。
-
User2计算公钥:
B=g^b mod p=5^{15} mod 23 = 30517578125 mod 23 =1 9
用户B将公钥 发送给User1。
现在,User1和User2各自使用对方的公钥与自己的私钥计算共享密钥
User1计算共享密钥:
S_A = B^a mod p = 19^6 mod 23 = 470427 mod 23 = 2
User1得到共享密钥S_A=2
User2计算共享密钥:
S_B = A^b mod p = 8^{15} mod 23 = 327680000 mod 23 = 2
User2得到共享密钥。
最后,由于数学性质,User1和User2都得到了相同的共享密钥
,这就是他们之间用于加密通信的密钥。
尽管在公开信道中,User1和User2互相交换了公钥 和,但第三方即使截获了这些信息,也无法计算出共享密钥 S,因为离散对数问题在现代计算机上是计算非常困难的,一旦建立了共享密钥,User1和User2就可以使用这个密钥进行后续的加密通信。例如,User1可以将消息加密后发送给User2,User2使用相同的密钥解密该消息,反之亦然。
Reference
https://zh.wikipedia.org/wiki/%E8%BF%AA%E8%8F%B2-%E8%B5%AB%E7%88%BE%E6%9B%BC%E5%AF%86%E9%91%B0%E4%BA%A4%E6%8F%9B
https://www.packetmania.net/2020/12/01/DH-and-RSA/
https://github.com/the-web3/cryptography/blob/master/encryptType/README.md
原文始发于微信公众号(Gh0xE9):浅谈迪菲赫尔曼密钥交换算法
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论