IPsec SA 创建步骤概述
IPsec SA creation steps
There are two steps on the IPsec SA creation, phase 1 is to creat IKE-SA, and phase 2 is to creat IPSEC-SA, the phase2 will be protected by phase 1. phase 1 creat a security tunnel to protect phase2.
step 1: creat IKE-SA, there are two modes on this step, the major is main mode, which including six messages;
1,&2, to negotiate the security policy, 1,initiator send all type policys supported to remote, and if remote search one of them which it support too, it will response to initiator;
including Authentication method: psk or md5; hash- algorithm : md5 or sha; encryption algorithm :des or 3des ; sa life time (duration) x seconds;
3&4 , to exchange the DH and key, and creat key;
5&6, those two messages had been protected by key_id, to authentication each other;
step2 : creat IPSEC-SA;
1, negotiate the IPSEC-protocol:esp or ah; ipsec-mode:tunnel or transport; hash-algorithm: md5 or sha;
2, ack and ack too .
第一阶段
有主模式和积极模式(也叫进取模式)2种
主模式执行3步,6个数据包的双向交换.过程如下:
1、对等体间协商如何来保护管理连接.(使用加密变换集来保护,即安全策略)
2、对等体间使用DH算法来交换密钥,创建密钥,以及保护连接.
3、对等体间进行彼此的验证,这两个消息使用key_id来保护.
积极模式执行的过程:
1、交换保护管理连接的策略,DH算法建立公钥/密钥对并在对等体间进行认证.
2、对收到的数据包做验证,DH算法来共享加密的密钥,并查看连接是否成功建立.
PS:除了预共享密钥认证外,其他的认证方式默认为主模式。
注意!!!只有remote vpn和Easy vpn是积极模式的,其他都是用主模式来协商的
让IKE对等体彼此验证对方并确定会话密钥,这个阶段用DH进行密钥交换,创建完IKE SA后,所有后续的协商都将通过加密和完整性检查来保护。
phase 1帮助在对等体之间创建了一条安全通道,使后面的phase 2过程协商受到安全保护。
第二阶段
使用快速模式
1、协商IPSEC SA使用的安全参数(ipsec协议:AH或者ESP,ipsec模式:传输模式或者隧道模式,hash算法:MD5或者SHA)
2、彼此验证。
此阶段创建IPSEC SA,使用AH或ESP来加密IP数据流。
详细过程主模式协商
IKE phase 1在IPSEC对等体间交换6条消息,这些消息的具体格式取决于使用的对等体认证方法。
一,使用预共享密钥进行验证的主模式(6条)
第一阶段
准备工作
在前2条消息发送以前,发送者和接受者必须先计算出各自的 cookie(可以防重放和DOS攻击),这些cookie用于标识每个单独的协商交换消息cookie ---RFC建议将源目IP,源目端口,本地生成的随机数,日期和时间进行散列操作。 cookie成为留在IKE协商中交换信息的唯一标识。实际上 cookie是用来防止DOS攻击的,它把和其他设备建立IPSEC所需要的连接信息不是以缓存的形式保存在路由器里,而是把这些信息HASH成个 cookie值。
1&2消息
即策略协商。
消息1——发送方向对等体发送一条包含一组或多组策略的提议,在策略提议中包括5元组(加密算法,散列算法,DH组,认证方法,IKE SA寿命(可选))。
策略协商,在这一步中,就四个强制性参数值进行协商:
1)加密算法:选择DES或3DES。
2)hash算法:选择MD5或SHA。哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法。
3)认证方法:选择证书认证、预置共享密钥认证或Kerberos v5认证。
4)Diffie-Hellman组的选择 。
Diffie-Hellman:一种确保共享KEY安全穿越不安全网络的方法,它是OAKLEY的一个组成部分。Whitefield与Martin Hellman在1976年提出了一个奇妙的密钥交换协议,称为Diffie-Hellman密钥交换协议/算法(Diffie-Hellman Key Exchange/Agreement Algorithm)。这个机制的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥。然后可以用这个密钥进行加密和解密。但是注意,这个密钥交换协议/算法只能用于密钥的交换,而不能进行消息的加密和解密。双方确定要用的密钥后,要使用其他对称密钥操作加密算法实际加密和解密消息。然而,它所产生的密钥可用于加密、进一步的密钥管理或任何其它的加密方式。
Diffie-Hellman (DH) 组确定了在密钥交换进程中使用的密钥的强度。 组的编号越大安全性就越高,但是也就需要更多的时间来计算密钥。
消息2——接受方查看IKE策略消息,并尝试在本地寻找与之匹配的策略,找到后,则有一条消息去回应。
注意:发起者会将它的所有策略发送给接受者,接受者则在自己的策略中寻找与之匹配的策略(对比顺序从优先级号小到大)。
默认策略实际就是个模版,没作用,如果认证只配置预共享的话,其他参数就会copy默认策略里的。
在1&2消息中报错可能出现的原因
1,peer路由不通;
2,crypto isakmp key没有设置;
3,一阶段的策略不匹配。
3&4消息
这2条消息用于交换DH算法的公开信息和随机数。两个对等体根据DH的公开信息都算出了双方相等的密值后,两个nonce(随机数)连同预共享密钥 生成第一个skeyID。随后便根据SKEY__ID来推算出其他几个skeyID。并保护后续连接。
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的素材。
skeyID_d---用来协商出后续IPSEC SA加密使用的密钥,是一个中间密钥。
skeyID_a---为后续的IKE消息协商以及IPSEC SA协商进行完整性检查(HMAC中的密钥)。
skeyID_e---为后续的IKE消息协商以及IPSEC SA协商进行加密。
密钥负载——传送的DH公共值(Xab) 而生成 。
临时值负载——当DH临时值一被计算出来,两个对等体就独立计算临时值。(发起者的临时值Ni,响应者的临时值Nr)。
·<密钥推导>
· SKEYID=PRF(preshared key, Ni|Nr)
· SKEYID是从预共享密钥推导得到,并且总是与Ni/Nr有关,这样即使采用相同的预共 享密钥,不同的Ni/Nr产生的SKEYID是不同的
· SKEYID_d =PRF(SKEYID, gab |CKY-i|CKY-r|0)
· SKEYID_a =PRF(SKEYID, SKEYID_d| gab |CKY-i|CKY-r|1)
· SKEYID_e =PRF(SKEYID, SKEYID_a| gab |CKY-i|CKY-r|2)
SKEYID_d:一个中间态密钥,不用于实际的数据加密和认证,仅仅用于导出其他密钥。
由SKEYID和K(是Pre-shared keys,或是证书的公钥)经H计算得出。
5&6消息
这2条消息用于双方彼此验证,这个过程是受skeyID_e加密保护的。(据上下文推测,这个过程会生成hash值来做彼此认证,请看下文的HASH认证成分)
为了正确生成密钥(hash值),每一个对等体必须找到与对方相对应的预共享密钥。
当有许多对等体连接时,每一对对等体两端都需要配置预共享密钥,每一对等体都必须使用ISAKMP分组的源IP来查找与其对等体对应的预共享密钥(此时由于ID还没到,ID要到第二阶段的消息1才会开始发送,彼此先用HASH来彼此验证对方)
HASH认证成分——SKEYID_a,cookieA,cookieB,preshare_key,SA paload,转换集,策略。在5&6消息中报错可能出现的原因
1,crypto isakmp key设置错了
接受者处理过程:
1、用skeyID_e对消息进行加密;
2、用ID(源IP)查找出预共享密钥;
3、skeyID_a和preshare-key等一堆东西一起来计算HASH ;
4、和收到的HASH做比较。
第二阶段(3条)
phase 2的目标是协商IPSEC SA,而且只有一种模式—— 快速模式。快速模式的协商是受IKE SA保护的。使用哪种IPSec协议:AH或ESP。
使用哪种hash算法:MD5或SHA。
使用什么模式:隧道还是传输。
是否要求加密,若是,选择加密算法:3DES或DES
在上述前三个方面达成一致后,将建立起两个SA,分别用于入站和出站通信。
1&2消息
消息1——发送方发送一条报文,其中包含HASH,IPSEC策略提议,NONCE和可选的DH,身份ID:
HASH:是用于给接受方作完整性检查的,用于再次认证对等体(必须)。HASH的成分和5-6阶段一样。
IPSEC策略提议:其中包括了安全协议(AH或者ESP),SPI,散列算法,隧道模式,IPSEC SA生命周期(必须)。
NONCE:用于防重放攻击,还被用作密码生成的材料。仅当启用PFS时用到。
ID:描述IPSEC SA是为哪些地址、协议和端口建立的。
PFS (Perfect Forward Secrecy,利用DH交换,可选):用了PFS后,就会在第二阶段重新DH出个数据加密KEY。这个KEY和以前IKE协商出来的KEY没有任何关系,然后由这个新 KEY来加密数据。到这个IPSEC SA的生命周期后,会再次DH出新的KEY。这样,安全性就提高了(普通等ipec SA过期或密钥超时时,重新生成的数据加密密钥还是根据一阶段DH出来的skeyID_d衍生出来的。PFS启用后,数据加密部分使用的密钥就没有了衍 生的过程)。
DH:重新协商IPSEC SA时使用的密钥交换协议(正常情况下IPSEC阶段使用的密钥都是由skeyID_d衍生而来,密钥之间都有一定的关系,就算IPSEC SA超时,新的KEY还是和skeyID_d有一定的关系)。
安全联盟(SA)由一个三元组来唯一标识,这个三元组包括SPI(Security Parameter Index,安全参数索引)、目的IP 地址、安全协议号(AH 或 ESP)。SPI 是为唯一标识 SA 而生成的一个 32 比特的数值,它在AH 和 ESP 头中传输。
在1&2消息中报错可能出现的原因
1,ipsec trasport不匹配
2,感兴趣流不对称
消息2——使用相同的消息进行响应。
3消息
发送方发送第三条消息,其中包含一个HASH,其作用是确认接受方的消息以及证明发送方处于Active状态(表示发送方的第一条消息不是伪造的,确认作用ACK)。
<实际数据加密密钥>
在快速模式中,最后一条消息发送前,连接的两端必须用和DH相关的信息生成一个新的DH密钥,并用该密钥同SKEYID_d以及其他一些参数连接生成IPSec加解密密钥。下面是步骤:
发起者生成的密钥资源:
1, 生成新的DH共享密钥=(Xb') mod p
2, 用于入口的IPSec SA 的IPSec会话密钥=PRF(SKEYID_d,portocol(ISAKMP),新的共享密钥,SPIr,Ni',Nr')
3, 用于出口的IPSec SA 的IPSec会话密钥=PRF(SKEYID_d,portocol(ISAKMP),新的共享密钥,SPIi,Ni',Nr')
响应者生成的密钥资源:
1, 生成新的DH共享密钥=(Xa') mod p
2, 用于入口的IPSec SA 的IPSec会话密钥=PRF(SKEYID_d,portocol(ISAKMP),新的共享密钥,SPIi,Ni',Nr’)
3, 用于出口的IPSec SA 的IPSec会话密钥=PRF(SKEYID_d,portocol(ISAKMP),新的共享密钥,SPIr,Ni',Nr’)
一些小的知识点和值得注意的地方
1、对于1~4个包为明文内容,用UDP的500(isakmp),以后的5~9个包都为加密内容,用UDP的4500(ipsec-nat-t)(这里有些疑问,应该是主模式都是 用isakmp 500,积极模式使用ipsec-nat-t 4500?)
2、第一阶段为了正确地生成密钥,每一个对等体必须找到与对方相应的预共享密钥,当有许多对等体要连接时,每一对对等体都要配置预共享密钥,这样就会有很多预共享密钥被配置。不过标志对等体IP地址或者主机名的负载直到下一条消息(第二阶段消息1)交换才会到来。因此,每一对对等体必须使用ISAKMP分组的源地址来找到与其对等体对应的预共享密钥。
3、 第二阶段的3个包主要用来协商用于加密用户数据的安全策略(只有认证和加密方法和对应算法),当第二阶段协商完毕之后,第一阶段的策略将暂时不会被使用,直到有新的VPN连接建立时或IPSEC SA加密密钥超时时,才会用第一阶段的策略重新生成并传递新的加密数据和认证的密钥。
4、 加密5-9消息的密钥SKEYID_e = PRF(SKEYID, SKEYID_a| gab |CKY-i|CKY-r|2) 。
5、 真正加密数据的密钥:
用于入口的IPSec SA 的IPSec会话密钥=PRF(SKEYID_d,portocol(ISAKMP),新的共享密钥,SPIr,Ni',Nr') ;
用于出口的IPSec SA 的IPSec会话密钥=PRF(SKEYID_d,portocol(ISAKMP),新的共享密 钥,SPIi,Ni',Nr') ;
6、 第一阶段配置的 加密算法是加密5-9个包的算法。不是用户数据的加密算法。
7、 如果穿越的是路由,则在放行UDP 500号端口的基础之上,还需要放行UDP的4500号端口。
8、如果穿越的是防火墙,刚在放行UDP 500号端口的基础之上,还需要放行ESP协议。
9、这个阶段要协商的SA是密钥交换协议最终要协商的IPSEC SA,当IKE为IPSec协商时可以称为IPSec SA,是保证AH或者ESP的安全通信。
阶段2的安全由阶段1的协商结果来保证。阶段1所协商的一个SA可以用于协商多个阶段2的SA。第1个包协商IP sec SA的策略,建立IPsec的安全关联(SA),在IKE SA协商进行认证的基础上,产生新的Key再次进行双方的认证。
IPSec流程实例
为简单起见,我们假设这是一个Intranet例子,每台主机都有处于激活状态的IPSec策略:
1.用户甲(在主机A上)向用户乙(在主机B上)发送一消息
2.主机A上的IPSec驱动程序检查IP筛选器,查看数据包是否需要受保护以及需要受到何种保护
3.驱动程序通知IKE开始安全协商
4.主机B上的IKE收到请求安全协商通知
5.两台主机建立第一阶段SA,各自生成共享"主密钥" 注:若两机在此前通信中已经建立起第一阶段SA,则可直接进行第二阶段SA协商
6.协商建立第二阶段SA对:入站SA和出站SA。SA包括密钥和SPI。
7.主机A上IPSec驱动程序使用出站SA对数据包进行签名(完整性检查)与/或加密。
8.驱动程序将数据包递交IP层,再由IP层将数据包转发至主机B
9.主机B网络适配器驱动程序收到数据包并提交给IPSec驱动程序。
10.主机B上的IPSec驱动程序使用入站SA检查完整性签名与/或对数据包进行解密。
11.驱动程序将解密后的数据包提交上层TCP/IP驱动程序,再由TCP/IP驱动程序将数据包提交主机B的接收应用程序。
以上是IPSec的一个完整工作流程,虽然看起来很复杂,但所有操作对用户是完全透明的。中介路由器或转发器仅负责数据包的转发,如果中途遇到防火墙、安全路由器或代理服务器,则要求它们具有IP转发功能,以确保IPSec和IKE数据流不会遭拒绝。
这里需要指出的一点是,使用IPSec保护的数据包不能通过网络地址译码NAT。因为IKE协商中所携带的IP地址是不能被NAT改变的,对地址的任何修改都会导致完整性检查失效。(NAT穿越可以解决此问题)
http://blog.csdn.net/wesleyhe/article/details/7223731