Diffie–Hellman key exchange DH密钥协商

本文详细介绍了Diffie-Hellman密钥交换(DH)的基本原理及其椭圆曲线版本ECDH的工作流程。DH算法允许双方在不安全的信道上建立共享密钥,而ECDH则进一步提高了安全性。

Diffie–Hellman key exchange DH密钥协商

DH算法是一个密钥的磋商算法,并不能交换一个密钥(安全的将密钥从一方发送到另一方),也不能进行数字签名和加密,只能让双方共同产生一个密钥。

原理

发送方Alice,接收方Bob,双方共享DH参数(p,g),DH参数(p,g)公开
multiplicative group of integers modulo p,where p is prime,g is a primitive root modulo p

Alice的私钥a(其实a不是数字证书的私钥,叫secret,就是为本次协商密钥产生的)

Bob的私钥b(同理,b也不是数字证书的私钥,也是secret)

  1. Alice和Bob约定使用一个模 p = 23和g = 5(5是primitive root modulo 23)
  2. Alice选择一个保密的整数 a = 4作为私钥,计算出公钥 A = ga mod p,将公钥A发送给Bob;
    • A = 54 mod 23 = 4
  3. Bob选在一个保密的整数 b = 3,计算出公钥 B = gb mod p,将公钥B发送给Alice;
    • B = 53 mod 23 = 10
  4. Alice 计算出共享密钥 s = Ba mod p
    • s = 104 mod 23 = 18
  5. Bob 计算共享密钥 s = Ab mod p
    • s = 43 mod 23 = 18
  6. Alice和Bob现在就共享一个密钥(s = 18)

Ab mod p = gab mod p = gba mod p = Ba mod p

More specifically

(ga mod p)b mod p = (gb mod p)a mod p
只有a,b,s是保密的,其他的值:p,g,A,B都是公开传输的。一旦Alice和Bob计算出了共享的密钥s,他们就可以使用只有他们双方知道的s作为加密密钥,在公开通道上传输数据。

当然需要足够大的a,b和p的值才能保证上面例子的安全。

g = public (prime) base, known to Alice, Bob, and Eve(窃听者的名字). g = 5

p = public (prime) modulus, known to Alice, Bob, and Eve. p = 23

a = Alice’s private key, known only to Alice. a = 6

b = Bob’s private key known only to Bob. b = 15

A = Alice’s public key, known to Alice, Bob, and Eve. A = ga mod p = 8

B = Bob’s public key, known to Alice, Bob, and Eve. B = gb mod p = 19

DH参数

DH参数(p,g) RFC3526给出了参考值

ECDH算法

Eliptic-curve Diffie-Hellman(ECDH)是基于EC算法的DH方案,将DH算法的模幂运算变成了点乘运算,据说速度有所提高,安全性也增加。

假设Alice和Bob希望建立一个共享密钥,但是他们之间可用的信道是被第三方窃听的。

首先双方要商定参数(p,a,b,G,n,h)。

双方必须有ECC密钥对,包含私钥d(一个随机选择的整数范围[1,n-1]),公钥表现为一个点Q(Q=dG)。令Alice的密钥对表示为(dA, QA) 令Bob的密钥对表示为(dB, QB)。在执行密钥协商协议之前,双方需要提前知道对方的公钥。

Alice计算点(xk,yk)=dAQB。Bob计算点(xk,yk)=dBQA。共享密钥xk(这个点的x坐标)。大部分基于ECDH的标准协议使用KDF通过xk分散出一个对称密钥。

公钥要么是固定的(可信的,一般是通过数字证书),要么是临时的(ECDHE,E表示临时ephemeral)。如果是固定密钥,那么服务器端(Bob)少一步计算QB,用证书公钥代替,服务器发送证书到客户端,使用ECDH时,服务器必须使用ECC证书,服务器不发送server key exchange报文。ECDH的服务器私钥是固定的(服务器证书对应的私钥),服务器私钥泄露,会导致会话密钥被第三方算出。如果使用ECDHE,Alice和Bob双方的的私钥都是临时生成的,服务器证书对应私钥不参与密钥协商,所以私钥泄露不会影响会话密钥安全,是前向安全的(forward secrity)。

椭圆曲线迪菲 - 赫尔曼密钥交换(Elliptic Curve Diffie - Hellman Key ExchangeECDH)是现代密码学中用于安全交换密钥的重要协议,结合了椭圆曲线加密(ECC)和迪菲 - 赫尔曼密钥交换(Diffie - Hellman Key ExchangeDH)的特点。 ### 介绍 椭圆曲线加密(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 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值