【网络安全技术】IPsec——IKE (Internet Key Exchange)

一、IKE简介

IKE是要建立一个Security Association(SA)用于IPsec,也就是传后面的AH、ESP包。

IKE使用了一种很独特的设计,他先建立第一个ISAKMP SA安全通道,这是阶段一,然后阶段二在这个已经建立的安全通道下,协商用于IPsec的SA。这种设计理念我目前还不能完全理解。

网上找的这个图很形象

第一个SA里面包含了一系列的参数,例如认证算法、加密算法、密钥等等。用来保护IKE本身的通信。

二、IKE过程

下面看看过程

1.Phase 1

主要分为三个步骤,1协商SA,2交换密钥,3认证

分两种模式,主模式和激进模式,主模式每个步骤双方各发一条消息,共6条消息,激进模式有将信息合并,一共三条消息。

分四种认证方法

a.Authenticated With Signatures

b.Authenticated With Public Key Encryption

c.Authenticated With a Revised Mode of Public Key Encryption

d.Authenticated With a Pre-Shared Key

还有几个其他的模式不看了,用的时候再去查RFC2409

下面梳理下一阶段的过程

1.发送者发送一个协商请求,附上自己的SPI**(Security Parameter Index)**,SPI是单向的,就类似于自己的安全通信策略数据库的一个索引,通过SPI来在自己的数据库里索引唯一的一组参数,认证算法、加密算法、密钥等等。

这个消息里还会有DOI(Domain of interpretation),这个字段指明了一个规则,表明接下里的参数协商使用什么样的规则。比如这个字段可能是1,代表是下面的参数协商使用IPsec的规则。

接下来他会一个或多个Transform Payload,每个Transform载荷是一组安全参数,发送过去供接收方选择。

这是一个例子,里面的参数有加密算法:AEC-CBC,密钥长度128位,哈希算法SHA,Group-Description指定了某一个DH组,里面有DH的两个参数,大素数和本原根,下一个是认证方式,预共享密钥,这个也可能是数字证书PKI,后面两个参数规定了这次协商出来的SA的时间。

2.接收方收到之后,会附上自己的SPI,选一个transform组,回回去。

3.这样参数都有了,三四步就可以开始交换密钥了。

这里看文档(RFC 2409),我理解的是,先用基本的DH来交换以获得一个共同秘密,这里并没有做认证,所以面临中间人攻击,但是他在后续做了认证。在获得这个共享秘密(g^xy)之后,用这个共享秘密和双方的其他认证信息来生辰一个密钥SKEYID,数字签名、公钥算法、提前分享的密钥三种认证方式生成密钥的方式不同,如下所示:

复制代码
For signatures:            SKEYID = prf(Ni_b | Nr_b, g^xy)
For public key encryption: SKEYID = prf(hash(Ni_b | Nr_b), CKY-I | CKY-R)
For pre-shared keys:       SKEYID = prf(pre-shared-key, Ni_b | Nr_b)

有了这个SKEYID之后,在根据这个和共享秘密等在生成真正的三组加密不同信息的密钥:

复制代码
SKEYID_d = prf(SKEYID, g^xy | CKY-I | CKY-R | 0)
SKEYID_a = prf(SKEYID, SKEYID_d | g^xy | CKY-I | CKY-R | 1)
SKEYID_e = prf(SKEYID, SKEYID_a | g^xy | CKY-I | CKY-R | 2)

这三组密钥用来加密不同的信息,e用来加密正常消息,a用来认证,d用来处理非ISAKMP的SA。

4.最后两条消息是双方验证身份,这里就是用刚才生成的密钥加密的通信了

这里看一个使用签名的例子,如果是要用签名来认证,那么一开始的两条就需要交换公钥,比如通过证书。

复制代码
 Initiator                          Responder
 -----------                        -----------
 HDR, SA                     -->
                             <--    HDR, SA
 HDR, KE, Ni                 -->
                             <--    HDR, KE, Nr
 HDR*, IDii, [ CERT, ] SIG_I -->
                             <--    HDR*, IDir, [ CERT, ] SIG_R

前两条就是协商SA,第三四条交换密钥,KE就是要交换的DH公钥,两个N就是随机数,这两个随机数看上面有用于计算接下来的密钥。

最后两条认证,ID就是身份信息,CERT证书可选,SIG是用以下算出来的HASH,对他签名,这个hash的计算包含了双方的DH公私钥,以及刚用DH公共秘密算出来的SKEYID,以及双方的cookie,SAi是整个SA载荷的body,ID就是身份。他们分别会对这些做hash,然后用自己的私钥签名,然后发给对方。

复制代码
  HASH_I = prf(SKEYID, g^xi | g^xr | CKY-I | CKY-R | SAi_b | IDii_b )
  HASH_R = prf(SKEYID, g^xr | g^xi | CKY-R | CKY-I | SAi_b | IDir_b )

现在设想有个中间人,他可以劫持前两条消息,获得两边的cookie,然后劫持第三四条消息,使用典型的中间人攻击,自己生成两个公私钥对,分别用他们和A和B交换秘密,也自己生成两个随机数,发给a和b,以计算接下来的那一串SKEYID。算出来两对密钥,那他们分别在第五六条和A和B做认证。身份信息可以伪造,签名是用私钥签名的哈希,中间人没法生成这个,对面比如A拿到后,用B的公钥解不开,那就发现不对了,那么中间人攻击就失败了。

上面说的是主模式,还有一种是激进模式,还是看个例子,使用签名的激进模式。

复制代码
        Initiator                          Responder
       -----------                        -----------
        HDR, SA, KE, Ni, IDii       -->
                                    <--    HDR, SA, KE, Nr, IDir,
                                                [ CERT, ] SIG_R
        HDR, [ CERT, ] SIG_I        -->

直接在前两条消息就把DH的密钥交换了,而且接收方在第二条也发送了认证消息,这样第三条发送方发的认证消息就是最后一条了。

这样,一阶段就结束了。

2.phase 2

二阶段就是要在刚才建立的SA里建一条用于接下来传真正的ip包的SA

复制代码
        Initiator                        Responder
       -----------                      -----------
        HDR*, HASH(1), SA, Ni
          [, KE ] [, IDci, IDcr ] -->
                                  <--    HDR*, HASH(2), SA, Nr
                                               [, KE ] [, IDci, IDcr ]
        HDR*, HASH(3)             -->
复制代码
   HASH(1) = prf(SKEYID_a, M-ID | SA | Ni [ | KE ] [ | IDci | IDcr )
   HASH(2) = prf(SKEYID_a, M-ID | Ni_b | SA | Nr [ | KE ] [ | IDci |
   IDcr )
   HASH(3) = prf(SKEYID_a, 0 | M-ID | Ni_b | Nr_b)

首先发起者要发协商消息,第一个hash就是用之前协商好的SKEYID_a,和(这条消息的头里的message id和包里剩下所有内容的连接),做的HMAC,然后SA就是发起者提出的很多Transform,一个Transform就是一套规则,Ni是随机数,剩下两个KE是可选的,可以再进行一次密钥协商,后面那个没看懂,也是可选的。

响应者同样会回一个选好SA的包,只有一个Transform,这个包很类似,hash2里面还包含了刚才发来的随机数。

最后,发起者收到之后,会回一个类似ACK的东西,里面就是哈希过的message id和两个随机数。

注意这些消息都是加密的,除了ISAKMP的头不加密,剩下的内容都是用刚才的SKEYID_e来加密的。所以这些协商都提供了完整性和机密性保护。

这个SA里协商了之后AH和ESP需要的信息。

相关推荐
用户9623779544818 小时前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机21 小时前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机21 小时前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954481 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star1 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954481 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher3 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行6 天前
网络安全总结
安全·web安全
red1giant_star6 天前
手把手教你用Vulhub复现ecshop collection_list-sqli漏洞(附完整POC)
安全
ZeroNews内网穿透6 天前
谷歌封杀OpenClaw背后:本地部署或是出路
运维·服务器·数据库·安全