IPSec协商分为两个阶段:
- 第一阶段协商对对方的身份进行认证,并且为第二阶段的协商提供一条安全可靠的通道。
- 第二阶段主要对IPSEC的安全性能进行协商,产生真正可以用来加密数据流的密钥。
第一阶段主模式(IKE SA 阶段):
发送cockie包,用来标识唯一的一个IPSEC会话。
IKE阶段一(主模式):发送消息1 initiator====>responsor
-
包结构
- isakmp header
- sa payload
- proposal payload
- transform payload
-
定义一组策略:
- 加密方法:DES
- 认证身份方法:预共享密钥
- 认证散列:MD5
- 存活时间:86400秒
- Diffie-Hellman group:1
-
IKE阶段二(主模式):发送消息2 initiator<====responsor
- 同上
IKE阶段三(主模式):发送消息3 initiator====>responsor
-
通过DH算法产生共享密钥
- KE(Key Exchang) Payload
- nonce(暂时) Payload
DH算法:
A: P(较大的质数) B: P(较大的质数)
G G
PriA(随机产生) PriB(随机产生)
PubA=G^PriA mod P PubB=G^PriB mod P
交换PubA和PubB
Z=PubB^PriA mod P Z=PubA^PriB mod P
Z就是共享密钥,两个自我产生的Z应相同,它是用来产生3个SKEYID的素材。
IKE阶段四(主模式):发送消息4 initiator<====responsor
同上
-
主模式第3、4条消息其实就是DH算法中需要交换的几个参数,然后路由器再通过DH算法计算出的公共密钥计算出以下3个参数(这是在发送第5、6个消息前完成的):
- SKEYID_d:留在在第二阶段用,用来计算后续的IKE密钥资源;
- SKEYID_a:散列预共享密钥,提供IKE数据完整性和认证;
- SKEYID_e:用来加密下一阶段的message,data, preshared key,包括第二阶段。
IKE阶段五(主模式):发送消息5 initiator====>responsor
Identity Payload:用于身份标识
Hash Payload:用来认证
以上2个负载都用SKEYID_e加密-
IKE阶段六(主模式):发送消息6 initiator<====responsor
- 同上
- 消息5、6是用来验证对等体身份的。至此IKE协商第一阶段完成。
第二阶段快速模式(IPSec SA 阶段):
首先判断是否启用了PFS(完美转发安全),若启用了则重新进行DH算法产生密钥,若没有启用则是用第一阶段的密钥。
-
IPSec阶段一(快速模式):发送消息1 initiator====>responsor
- 同样定义一组策略,继续用SKEYID_e加密:
- Encapsulation— ESP
- Integrity checking— SHA-HMAC
- DH group— 2
- Mode— Tunnel
- 同样定义一组策略,继续用SKEYID_e加密:
-
IPSec阶段二(快速模式):发送消息2 initiator<====responsor
- 同上,主要是对消息1策略的一个确认。
- 在发送消息3前,用SKEYID_d,DH共享密钥,SPI等产生真正用来加密数据的密钥。
-
IPSec阶段三(快速模式):发送消息3 initiator====>responsor
- 用来核实responsor的liveness。
至此,整个IPSec协商的两个过程已经完成,两端可以进行安全的数据传输
总结如下:
9个包的来回,前6个为主模式,后3个为快速模式.
相关参数---相关参数----DH算法----DH算法(产生3个SKEYID的素材)-----身份认证-----身份认证-----组策略-------组策略确认------核实responsor的liveness
参考
http://www.360doc.com/content/12/0410/16/9523427_202515919.shtml
http://blog.chinaunix.net/uid-20246210-id-1970586.html