DH密钥交换协议

时间:2022-06-14 02:01:30

密钥交换

密钥交换简单点来说就是允许两名用户在公开媒体上交换信息以生成“一致”的、可以共享的密钥。也就是由甲方产出一对密钥(公钥、私钥),乙方依照甲方公钥产生乙方密钥对(公钥、私钥)。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥。这个密钥可以在后续的通信中作为对称密钥来加密通讯内容。

离散对数问题

如果p 是一个素数,g 和x 是整数,计算 \(y = g^x mod p\) 非常快。但是相反的过程:先知道 p, g 和y,要求某个x(离散对数),满足等式\(y = g^x mod p\),通常十分困难。此相反求离散对数的过程称为“离散对数问题”。例如:如果\(15 = 3^xmod 17\), 则x = 6。

g和p的选择对此类系统的安全性影响很大。为了保证无法求解离散对数问题,p应该是一个很大的素数,例如1024bit的,而且 (p-1)/2也应该是素数。g要求是p的primitive root,也就是讲整数序列: \(g^0 mod p,g^1 mod p, g^2 mod p, …., g^{p-1} mod p\)中的p个元素均是不同的整数。

DH协议

问题

Alice和Bob 想共有一个密钥,用于对称加密。但是他们之间的通信渠道是不安全的。所有经过此渠道的信息均会被敌对方:Eve看到。哪他们要如何交换信息,才能不让Eve知道这个密钥呢?

方法

DH 算法的安全性依赖于计算离散对数问题,DH协议的方案:

DH密钥交换协议

1、Alice和Bob先对p 和g达成一致,而且公开出来。Eve也就知道它们的值了。

2、Alice取一个私密的整数a,不让任何人知道,发给Bob 计算结果:\(A=g^a mod p\). Eve 也看到了A的值。

3、类似,Bob 取一私密的整数b,发给Alice计算结果\(B=g^b mod p\).同样Eve也会看见传递的B是什么。

4、Alice 计算出\(K'=B^a mod p=(g^b)^a mod p=g^{ab} mod p\).

5、Bob 也能计算出\(K=A^b mod p=(g^a)^b mod p=g ^{ab} mod p\).

6、Alice 和 Bob 现在就拥有了一个共用的密钥K/K'.

7、虽然Eve看见了p,g, A and B, 但是鉴于计算离散对数的困难性,她无法知道a和b 的具体值。所以Eve就无从知晓密钥K/K' 是什么了。

中间人攻击

简单描述为:一个中间人“丙”在信道的中间进行两次DH密钥交换,一次和甲,另一次和乙,就能够成功的向甲假装自己是乙,反之亦然。

而攻击者可以解密(读取和存储)任何一个人的信息并重新加密信息,然后传递给另一个人。因此通常都需要一个能够验证通讯双方身份的机制来防止这类攻击。

有很多种安全身份验证解决方案使用到了DH密钥交换。例如当甲和乙共有一个公钥基础设施时,可以将他们的返回密钥进行签名。

参考

1、DH 密钥交换算法

2、Diffie–Hellman 密钥交换协议简介