【网络安全技术】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需要的信息。

相关推荐
ai产品老杨35 分钟前
部署神经网络时计算图的优化方法
人工智能·深度学习·神经网络·安全·机器学习·开源
云起无垠1 小时前
第74期 | GPTSecurity周报
人工智能·安全·网络安全
网安-轩逸1 小时前
【网络安全】身份认证
网络·安全·web安全
网络安全-杰克3 小时前
关于网络安全里蜜罐的详细介绍
安全·web安全·php
?crying3 小时前
安全见闻 -- 量子计算
安全·量子计算
newxtc3 小时前
【AiPPT-注册/登录安全分析报告-无验证方式导致安全隐患】
人工智能·安全·ai写作·极验·行为验证
?crying4 小时前
蓝队基础1 -- 企业信息架构与安全基础
安全·架构
找藉口是失败者的习惯4 小时前
HTTP vs. HTTPS:从基础到安全的全面对比
安全·http·https
网络安全工程师老王4 小时前
web3+web2安全/前端/钱包/合约测试思路——尝试前端绕过直接上链寻找漏洞
安全·web安全·网络安全·信息安全·web3
群联云防护小杜4 小时前
服务器被挂马怎么办?——解决服务器被挂马的方法和步骤
运维·服务器·网络协议·tcp/ip·安全·ddos