我们为什么需要 DH 算法
最近在复习安全的时候就在想,对于 DH 就有两个问题:
- 既然非对称加密算法可以实现带身份认证的、安全的密钥的交换,为什么还需要没有身份认证的 DH 算法呢?
- 非对称加密算法体系的身份认证实际上是依靠三方 CA 的权威性实现的,那可不可以构建一套 DH 的 CA 呢?
这篇文章就用来回答这两个问题。
〇、DH 算法概述
对安全算法有所了解的都知道,DH 算法是一个应用非常广的密钥交换算法,经常被用于协商的第一阶段,比如 TLS、IPsec 等。很多人有个误区,认为 DH 算法属于非对称加密算法,但我们应该知道,DH 算法并没有加解密的功能,所以并不能认为是非对称加密算法,它只能用于协商密钥。
一、DH 算法原理
先上 DH 算法原理图,Wikipedia 经典图:
DH 算法的密钥协商过程如下:
- Alice 取一个大的随机整数 并发送给 Bob:
- Bob 取一个大的随机整数 并发送给 Alice:
- Alice 计算
- Alice 计算
在协商过程中,g、p 公开,X、Y 在网络中传输,要想计算 x、y,需要计算离散对数问题
优点
- 计算简单
- 动态的,易于生成密钥对,每次协商都会重新生成
- 容易扩展到多方
缺点
- 没有身份认证的能力,所以不能解决中间人攻击的问题
二、与非对称加密算法的对比
非对称加密算法采用公私钥对的方式,公钥加密私钥解密,私钥加密公钥解密。相对于 DH 来说,非对称加密算法的特点有:
- 公私钥对一旦生成就无法修改
- 可用于身份认证
- 可构建身份认证体系 —— 数字证书体系
- 不具有前向安全性(PFS),私钥一旦泄露,历史所有消息都可被解密
其带有身份认证的属性,所以经常用于密钥交换(信息加密)、数字签名、身份认证。
我们为什么需要 DH
让我们回到问题上:
- 既然非对称加密算法可以实现带身份认证的、安全的密钥的交换,为什么还需要没有身份认证的 DH 算法呢?
因为非对称加密算法的静态、不具有前向安全性的问题很大,这意味着一旦私钥泄露,历史的所有消息都将会被破解。而 DH 动态的特点可以弥补这一点,使用 DH 算法每隔一段时间进行 rekey,这样通信双方的共享密钥时周期性变更的,即使破解了其中一个密钥,也无法得到完整的通信数据。
但是由于 DH 不具有身份认证的能力,所以经常需要结合数字证书体系来防止中间人攻击。
- 非对称加密算法体系的身份认证实际上是依靠三方 CA 的权威性实现的,那可不可以构建一套 DH 的 CA 呢?
这个问题还是比较好回答的,根本原因是 DH 不具有身份认证功能。在 PKI 体系中,CA 使用私钥签发证书,用户系统/浏览器中保存有 CA 公钥,可以轻易对证书的有效性进行验证。这个验证过程还是基于非对称加密算法的身份认证属性实现的,而 DH 无法做到。
Done!