Diffie–Hellman key exchange DH密钥协商

来源:互联网 发布:企业汉字做域名的品牌 编辑:程序博客网 时间:2024/05/16 17:38

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)。

原创粉丝点击