密钥交换主要用于密钥的建立。在ISAKMP体系中,无论是数据加密算法还是认证算法,都需要一个双方都知道的密钥。然而,互联网环境是不安全的,如何才能够通过不安全的互联网环境建立起一个安全的密钥呢?
一般有两种方式。第一种叫做密钥传输,第二种叫做密钥生成。
顾名思义,密钥传输就是直接把密钥发给对方。一个典型的例子是,首先在客户端随机生成一个密钥,然后使用服务端的公开密钥进行加密。由于只有服务端知道如何对加密数据解密,所以保证了密钥的安全性。但是,如果服务端的私钥被窃取了,那么通信就变得不安全。
密钥生成与密钥传输有着本质的不同。由于密钥是不在网络上传输的,这样,即便一个攻击者截取了密钥交换信息,也无法取得密钥。密钥生成通常使用Diffie-Hellman算法。首先通信的双方各自独立的生成一个私钥,记为Xi和Xr。然后利用Xi和Xr生成可以公开的密钥信息Yi和Yr。双方交换Yi和Yr,于是发起端拥有Xi和Yr,而接收端拥有Yi和Xr。利用这些信息和DH算法,两端就可以生成相同的密钥。
从计算量上来讲,密钥传输的计算量比密钥生成要少。但是从安全性上来看,无疑密钥生成的安全性更高。所以,现在主流的密钥交换协议,比如IPSec,都是基于DH算法来实现的。