Https核心加密算法-Diffie–Hellman key exchange

Diffie–Hellman key exchange

 

【维基百科】:http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

【国际协议】:http://www.ietf.org/rfc/rfc2631.txt

【简单讲解】:http://searchsecurity.techtarget.com/definition/Diffie-Hellman-key-exchange

【htps讲解】:http://blog.jobbole.com/45530/

 

算法描述:

公钥算法的特点就是很容易由算子计算出结果,而基本上不可能作逆向运算。这也就是使用了两个质数的所要达到的目的。

现在假设Alice和Bob分别是参与DH式密钥交换过程的两方,他们一开始会商议确定一个小质数(一般是2,3,5这样的小数字)和一个大质数(有300位以上)作为加密的原始信息。小质数和大质数都可以直接传输,不必担心交换过程中的不安全。

需要明白的是,Alice和Bob各自都持有着自己的私钥(100多位的数),而且也永远不应该共享自己的私钥。不光是两人之间,也包括其他不相关的人都不应该拥有这两组私钥。网络中传输的是他们的私钥、小质数和大质数混合运算得到的结果。更确切来说,就是:

  • Alice的结果 = (小质数Alice的密码)% 大质数
  • Bob的结果 = (小质数Bob的密码)% 大质数
  • (“%” 符号表示取模运算,即取得除法运算的余数)

所以Alice使用大质数和小质数加上自己的私钥运算,就会得出结果,而Bob做同样的计算,也能得到相同的结果。当他们接收到对方的运算结果时,他们可以由数学计算导出会话中所要传输的信息,也就是说:

Alice计算的是

  • (Bob的结果Alice的密码)% 大质数

而Bob则计算

  • (Alice的结果Bob的密码)% 大质数

Alice和Bob得出来的数字相同,这个数字也就是会话中所要共享的密码。请注意,双方都没有向对方传输各自的私钥,而连接过程中也没有明文传递保密信息。这一点真是太棒了!

实例:

Alice and Bob agree to use a prime number p=23 and base g=5. 
Alice chooses a secret integer a=6, then sends Bob A = ga mod p 
A = 56 mod 23 
A = 15,625 mod 23 
A = 8 
Bob chooses a secret integer b=15, then sends Alice B = gb mod p 
B = 515 mod 23 
B = 30,517,578,125 mod 23 
B = 19 
Alice computes s = B a mod p 
s = 196 mod 23 
s = 47,045,881 mod 23 
s = 2 
Bob computes s = A b mod p 
s = 815 mod 23 
s = 35,184,372,088,832 mod 23 
s = 2 
Alice and Bob now share a secret: s = 2. This is because 6*15 is the same as 15*6. So somebody who had known both these private integers might also have calculated s as follows: 
s = 56*15 mod 23 
s = 515*6 mod 23 
s = 590 mod 23 
s = 807,793,566,946,316,088,741,610,050,849,573,099,185,363,389,551,639,556,884,765,625 mod 23 
s = 2 

椭圆曲线迪菲 - 赫尔曼密钥交换(Elliptic Curve Diffie - Hellman Key Exchange,ECDH)是现代密码学中用于安全交换密钥的重要协议,结合了椭圆曲线加密(ECC)和迪菲 - 赫尔曼密钥交换(Diffie - Hellman Key Exchange,DH)的特点。 ### 介绍 椭圆曲线加密(ECC)是一种基于椭圆曲线数学结构的加密算法,提供了与RSA等传统加密算法相似的安全性,但使用更短的密钥长度,在相同安全级别下,需要更少的计算资源,适合资源受限环境,如移动设备和物联网设备。迪菲 - 赫尔曼密钥交换(DH)是一种密钥协商协议,允许双方在未事先共享密钥的情况下协商出一个共享密钥,其安全性基于数论中的离散对数问题。而椭圆曲线迪菲 - 赫尔曼密钥交换(ECDH)则将二者结合,用椭圆曲线算术代替了传统DH中的模幂运算 [^4]。 ### 原理 ECDH的核心原理是利用椭圆曲线上点的加法和乘法运算。双方首先选择一条共同的椭圆曲线和一个基点。每一方各自选择一个私有整数,将其与基点相乘得到一个公有值,并将这个公有值发送给对方。收到对方的公有值后,再用自己的私有整数与之相乘,最终双方会得到相同的共享密钥。由于离散对数问题的困难性,攻击者即使截获了双方交换的公有值,也难以从这些公有值计算出私有整数和共享密钥 [^4]。 ### 应用 - **安全通信**:在许多安全通信协议中使用,如TLS(传输层安全协议),确保客户端和服务器之间通信的机密性和完整性。在TLS握手过程中,客户端和服务器可以使用ECDH来协商出一个会话密钥,用于后续数据的加密传输。 - **物联网**:由于其在资源受限环境下的优势,非常适合物联网设备。物联网设备通常计算能力和能量有限,ECDH能够在保证安全的同时,减少设备的计算负担和能量消耗。 - **移动应用**:在移动应用开发中,可用于保护用户与服务器之间的通信。例如,在一些金融类移动应用中,使用ECDH来确保用户登录信息和交易数据的安全传输。 ```python # 以下是一个简化的ECDH示例(仅为概念展示,实际应用需更完善的实现) import ecdsa # 选择椭圆曲线 curve = ecdsa.NIST256p # 生成私钥 private_key_a = ecdsa.SigningKey.generate(curve=curve) private_key_b = ecdsa.SigningKey.generate(curve=curve) # 生成公钥 public_key_a = private_key_a.get_verifying_key() public_key_b = private_key_b.get_verifying_key() # 模拟交换公钥后计算共享密钥 shared_secret_a = private_key_a.signing_key.privkey.secret_multiplier * public_key_b.pubkey.point shared_secret_b = private_key_b.signing_key.privkey.secret_multiplier * public_key_a.pubkey.point # 验证共享密钥是否相同 assert shared_secret_a == shared_secret_b ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值