安全联盟(SA)
IPSec通过在IPSec对等体间建立双向安全联盟(SA),形成一个安全互通的IPSec隧道,来实现Internet上数据的安全传输
SA由一个三元组来唯一标识,这个三元组包括安全参数索引SPI(Security Parameter Index)、目的IP地址和使用的安全协议号(AH或ESP)。其中,SPI是为唯一标识SA而生成的一个32位比特的数值,它在AH和ESP头中传输。在手工配置SA时,需要手工指定SPI的取值。使用IKE协商产生SA时,SPI将随机生成
SA是单向的逻辑连接,因此两个IPSec对等体之间的双向通信,最少需要建立两个SA来分别对两个方向的数据流进行安全保护。如图1所示,为了在对等体A和对等体B之间建立IPSec隧道,需要建立两个安全联盟,其中,SA1规定了从对等体A发送到对等体B的数据采取的保护方式,SA2规定了从对等体B发送到对等体A的数据采取的保护方式
另外,SA的个数还与安全协议相关。如果只使用AH或ESP来保护两个对等体之间的流量,则对等体之间就有两个SA,每个方向上一个。如果对等体同时使用了AH和ESP,那么对等体之间就需要四个SA,每个方向上两个,分别对应AH和ESP
有两种方式建立IPSec安全联盟:手工方式和IKE自动协商方式。二者的主要区别为
密钥生成方式不同
手工方式下,建立SA所需的全部参数,包括加密、验证密钥,都需要用户手工配置,也只能手工刷新,在中大型网络中,这种方式的密钥管理成本很高;IKE方式下,建立SA需要的加密、验证密钥是通过DH算法生成的,可以动态刷新,因而密钥管理成本低,且安全性较高
生存周期不同
手工方式建立的SA,一经建立永久存在;IKE方式建立的SA,其生存周期由双方配置的生存周期参数控制
因此,手工方式适用于对等体设备数量较少时,或是在小型网络中。对于中大型网络,推荐使用IKE自动协商建立SA
IKE协议
因特网密钥交换IKE(Internet Key Exchange)协议建立在Internet安全联盟和密钥管理协议ISAKMP定义的框架上,是基于UDP(User Datagram Protocol)的应用层协议。它为IPSec提供了自动协商密钥、建立IPSec安全联盟的服务,能够简化IPSec的使用和管理,大大简化IPSec的配置和维护工作
IKE负责自动建立和维护IKE SA(也称为ISAKMP SA)和 IPSec SA。功能主要体现在如下几个方面:
对双方进行认证
交换公共密钥,产生密钥资源,管理密钥
协商协议参数(封装,加密,验证….)
IKE协议版本分为IKEv1和IKEv2 是公有协议 IKEv1 在RFC2409 IKEv2 在RFC 5996
IKE的三大组件
SKEME:定义如何通过公共密钥技术(DH算法)实现密钥交换
Oakley:提供了IPSec对各种技术的支持,例如对新的加密与散列技术。并没有具体的定义使用什么样的技术
ISAKMP:定义了消息交换的体系结构,包括两个IPSEC对等体间分组形式和状态转变(定义封装格式和协商包交换的方式)下层由UDP协议承载 源目端口号为500
IKEV1版本
IKE的三个模式
IKEv1建立IKE SA的过程定义了主模式(Main Mode)和野蛮模式(Aggressive Mode)两种交换模式
主模式包含三次双向交换,用到了六条信息 野蛮模式只用到三条信息
主模式过程
消息①和②用于策略交换,发起方发送一个或多个IKE安全提议,响应方查找最先匹配的IKE安全提议,并将这个IKE安全提议回应给发起方
消息③和④用于密钥信息交换,双方交换Diffie-Hellman公共值和nonce值,IKE SA的认证/加密密钥在这个阶段产生
消息⑤和⑥用于身份和认证信息交换(双方使用生成的密钥发送信息),双方进行身份认证和对整个主模式交换内容的认证
主模式详细报文过程
1 2报文过程
1-2消息用于参数的协商(明文) 协商内容:(加密算法 验证算法 验证方式 DH组 有效期)
Initiator(发起者) Responder(响应方)
============================================================================================
HDR, SA -->
<-- HDR, SA
Ci SA
Ci Cr SA
HDR ISAKMP头部
Ci Cr 代表发起方和响应方的SPI
所对应的命令行如下
ike proposal 10
encryption-algorithm aes-192 ---加密算法
authentication-algorithm md5 ---认证算法
integrity-algorithm hmac-sha2-256 ---完整性算法
检查:
[FW1]display ike proposal verbose
11:42:46 2019/08/04
IKE Proposal Priority 10:
------------------------------------------------------------------
Authentication Method : PRE_SHARED ---身份验证方法
Authentication Algorithm : MD5 ---认证算法
Encryption Algorithm : 192-AES ---加密算法
Diffie-Hellman Group : DH-Group2 ---DH算法
Sa Duration(Seconds) : 86400 ---SA持续时间
Integrity Algorithm : HMAC-SHA2-256 ---完整性算法
------------------------------------------------------------------
注意:安全提议是有默认配置,可以修改
DH算法组可以修改
[FW1-ike-proposal-10]dh ?
group1 Indicate the 768-bit Diffie-Hellman group
group14 Indicate the 2048-bit Diffie-Hellman group
group15 Indicate the 3072-bit Diffie-Hellman group
group16 Indicate the 4096-bit Diffie-Hellman group
group2 Indicate the 1024-bit Diffie-Hellman group,default
group5 Indicate the 1536-bit Diffie-Hellman group
3 4报文过程
3-4消息用于密钥素材的交换及产生密钥 如果1 2两个消息不协商出DH组的3 4消息中的KE也不会有
Ci Cr , KE, Ni -->
<-- Ci Cr , KE, Nr
KE key exchange 密钥交换
Ni Nr 随机数
通过前面1 2的DH算法算出公共的K值
通过K值推导SKEYID(种子密钥)
SKEYID分为两种情况 预共享密钥方式(PSK)和采用数字证书方式(在1 2两个报文中进行协商)
在预共享密钥认证中,认证字作为一个输入来产生密钥,通信双方采用共享的密钥对报文进行Hash计算,判断双方的计算结果是否相同。如果相同,则认证通过;否则认证失败
在数字证书认证中,通信双方使用CA证书进行数字证书合法性验证,双方各有自己的公钥(网络上传输)和私钥(自己持有)。发送方对原始报文进行Hash计算,并用自己的私钥对报文计算结果进行加密,生成数字签名。接收方使用发送方的公钥对数字签名进行解密,并对报文进行Hash计算,判断计算结果与解密后的结果是否相同。如果相同,则认证通过;否则认证失败
在数字信封认证中,发送方首先随机产生一个对称密钥,使用接收方的公钥对此对称密钥进行加密(被公钥加密的对称密钥称为数字信封),发送方用对称密钥加密报文,同时用自己的私钥生成数字签名。接收方用自己的私钥解密数字信封得到对称密钥,再用对称密钥解密报文,同时根据发送方的公钥对数字签名进行解密,验证发送方的数字签名是否正确。如果正确,则认证通过;否则认证失败
采用预共享密钥的方式(1-2消息中已经协商)
SKEYID = prf(pre-shared-key, Ni_b | Nr_b)
采用数字证书 (1-2消息中已经协商)
SKEYID = prf(K,Ni_b | Nr_b)
DH(DIFFIE-HELLMAN)密钥交换算法
网关A和B利用ISAKMP消息的Key Exchange和nonce载荷交换彼此的密钥材料
Key Exchange用于交换DH公开值
nonce用于传送临时随机数
由于DH算法中IKE Peer双方只交换密钥材料,并不交换真正的共享密钥,所以即使***窃取了DH值和临时值也无法计算出共享密钥,这一点正是DH算法的精髓所在 从抓包中可以看到IKE Peer双方交换密钥材料
Diffie-Hellman算法是一种公开密钥算法。通信双方在不传送密钥的情况下通过交换一些数据,计算出共享的密钥。即使第三方(如***)截获了双方用于计算密钥的所有交换数据,也不足以计算出真正的密钥。DH保证了IKE不在网络上直接传输密钥,而是通过一系列数据的交换,最终计算出双方共享的密钥
但DH没有提供双方身份的任何信息,不能确定交换的数据是否发送给合法方,第三方可以通过截获的数据与通信双方都协商密钥、共享通信,从而获取和传递信息,所以IKE还需要身份认证来对对等体身份进行认证
密钥材料交换完成后,IKE Peer双方结合自身配置的身份验证方法各自开始复杂的密钥计算过程(预共享密钥或数字证书都会参与到密钥计算过程中),最终会产生三个密钥:
SKEYID_d:用于衍生出IPSec报文加密和验证密钥——最终是由这个密钥保证IPSec封装的数据报文的安全性!
SKEYID_d = prf(SKEYID, K | Ci | Cr | 0)
推导因子
prf(伪随机函数)
SKEYID_a:ISAKMP消息完整性验证密钥——谁也别想篡改ISAKMP消息了,只要消息稍有改动,响应端完整性检查就会发现!
SKEYID_a = prf(SKEYID, SKEYID_d | K | Ci | Cr | 1)
用于验证的密钥
SKEYID_e:ISAKMP消息加密密钥——再也别想窃取ISAKMP消息了,窃取了也看不懂!
SKEYID_e = prf(SKEYID, SKEYID_a | K | Ci | Cr | 2)
用于加密的密钥, 用于后续5-6消息的加密以及快速模式的加密
整个密钥交换和计算过程在IKE SA超时时间的控制下以一定的周期进行自动刷新,避免了密钥长期不变带来的安全隐患
DH(Diffie-Hellman)密钥交换算法
5 6报文过程
5-6消息用于身份认证
预共享密钥方式身份认证
HDR*, IDii, HASH_I -->
<-- HDR*, IDir, HASH_R
HDR *------代表加密
ID 身份标识,一般使用IP地址
HASH_I = prf(SKEYID, K | Ci | Cr | SAi | IDii_b )
HASH_R = prf(SKEYID, K| Ci | SAi | IDir_b )
数字证书方式的身份认证
HDR*, IDii, [ CERT, ] SIG_I -->
<-- HDR*, IDir, [ CERT, ] SIG_R
来源:51CTO
作者:Oldboy1key
链接:https://blog.51cto.com/13817711/2479118