IPSec协商分为两个阶段:第一阶段协商对对方的身份进行认证,并且为第二阶段的协商提供一条安全可靠的通道。第二阶段主要对IPSEC的安全性能进行协商,产生真正可以用来加密数据流的密钥。
第一阶段主(IKE SA 阶段):
发送cockie包,用来标识唯一的一个IPSEC会话。
IKE阶段一(主模式):发送消息1 initiator====>responsor
isakmp header
sa payload
proposal payload
transform payload
isakmp header
sa payload
proposal payload
transform payload
定义一组策略:
加密方法:DES
认证身份方法:预共享密钥
认证散列:MD5
存活时间:86400秒
Diffie-Hellman group:1
加密方法:DES
认证身份方法:预共享密钥
认证散列:MD5
存活时间:86400秒
Diffie-Hellman group:1
IKE阶段二(主模式):发送消息2 initiator<====responsor
同上
同上
IKE阶段三(主模式):发送消息3 initiator====>responsor
通过DH算法产生共享密钥
KE(Key Exchang) Payload
nonce(暂时) Payload
通过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的素材。
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,包括第二阶段。
同上
主模式第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加密
Identity Payload:用于身份标识
Hash Payload:用来认证
以上2个负载都用SKEYID_e加密
IKE阶段六(主模式):发送消息6 initiator<====responsor
同上
消息5、6是用来验证对等体身份的。至此IKE协商第一阶段完成。
同上
消息5、6是用来验证对等体身份的。至此IKE协商第一阶段完成。
第二阶段快速模式(IPSec SA 阶段):
首先判断是否启用了PFS(完美转发安全),若启用了则重新进行DH算法产生密钥,若没有启用则是用第一阶段的密钥。
IPSec阶段一(快速模式):发送消息1 initiator====>responsor
同样定义一组策略,继续用SKEYID_e加密:
Encapsulation— ESP
Integrity checking— SHA-HMAC
DH group— 2
Mode— Tunnel
IPSec阶段二(快速模式):发送消息2 initiator<====responsor
同上,主要是对消息1策略的一个确认。
在发送消息3前,用SKEYID_d,DH共享密钥,SPI等产生真正用来加密数据的密钥。
IPSec阶段三(快速模式):发送消息3 initiator====>responsor
用来核实responsor的liveness。