IKEv1原理

一,符号参数介绍

 HDR:HDR是ISAKMP报文的头部。当带有 * 号时表示被加密。

 SPI:Security Parameter Index,安全参数索引。可以手工配置(基本不使用),IKE协商产生。是对IP地址,端口,协议,日期,本地生成的随机数的hash计算。

 Ci:是发起者的cookie,及ISAKMP头部中的SPI。

 Cr:是响应者的cookie,及ISAKMP头部中的SPI。

 SA:安全联盟,具有一个或多个提议的安全联盟协商,内容包括认证算法,认证方式,加密算法,DH组。被SPI,目的地址,安全协议号(AH或ESP)唯一标识。

 g^xy:由Diffie-Hellman算法得出的只有双方知道的值。

 KE:KE是在DH算法和密钥相关的信息,相当于生成各种密钥的材料。其材料包括有(Ci:发起方的SPI(cookie值),响应方的SPI(Cookie值)。

 g^xi和g^xr:是DH组的发起方和响应方的公共值。

 Ni:发起者发送的伪随机数。

 Nr:响应者发送的伪随机数。

 SKEYID:由其他材料推导出的字符串。

 SKEYID_d:是为了得出密钥的安全关联参数。

 SKEYID_e:用于加密5,6消息和后续的阶段2消息。

 SKEYID_a:用于验证的计算因子。

 IDii:发起方身份标识。

 IDir:响应方身份标识。

 HASH:散列值的载荷。

二,IKEv1

2.1主模式

__________________________________________________________________

|      发起方                  响应方       |      

|     HDR,SA        ==》                       |(发送给IKE安全提议给对方查找匹配的提议。)

|                 《==      HDR,SA        |(接受提议给对方发送确认的IKE安全提议)

|     HDR,KE,Ni         ==》                 |(发送密钥生成信息给对方生成密钥)

|                 《==      HDR,KE,Nr     |(发送密钥生成信息给对方生成密钥)

|       HDR*,IDii,HASH_I   ==》                 |(发送身份和验证数据给对方验证身份和验证交换过程)

|                  《==   HDR*,IDir,HASH_R    |(发送身份和验证数据给对方验证身份和验证交换过程)

————————————————————————————————————

2.1.1消息1~2

  发起方发送HDR(ISAKMP头部,内有Ci),SA(安全联盟)内有IKE提议(发起方可以供响应方选择的认证算法,认证方式,加密算法,DH组)。

  响应方收到后,也发送HDR(Cr),SA(自己选择对方ike提议中的一组算法)给发起方。

2.1.2消息1~2抓包

1.消息1

  这是发起方发送给响应方的第一个消息,HDR(暂时已知Ci,因为对端暂时未发送)。

   展开SA载荷,内有IKE可以协商的参数。

 

 2.消息2

  响应方收到发起方的消息1,ISAKMP头部HDR中有双方的SPI值,并且发送的SA中是接收对端ike提议的结果。

2.1.3消息3~4

   发起方发送HDR,KE(Key Exchange,密钥交换材料的载荷。包含g^xi),Ni(发起方的伪随机数)。

   响应方发送HDR,KE(Key Exchange,密钥交换材料的载荷。包含g^xr),Nr(响应方的伪随机数)。

   发起方和响应方均接收完密钥材料后,经过协商选择的DH组算法通过交换的密钥材料算出只有双方共同知道的g^xy

   在此实验中使用的预共享密钥,则SKEYID的值的计算方式为:  SKEYID = prf(pre-shared-key,Ni | Nr)。由预共享密钥,双方的随机数得出。如果是数字证书的方式,SKEYID = prf(Ni|Nr,g^xy)。

   得出SKEYID后,我们可以得到SKEYID_d,它可以由已知条件得出:SKEYID_d = prf(SKEYID, g^xy | Ci | Cr | 0)。至于SKEYID_d的作用,rfc文档中的解释是得到密钥的安全相关参数。

   SKEYID_a = prf ( SKEYID, g^xy, | Ci | Cr | 1)用于提供ISAKMP消息,作为完整性的密钥,被用作HMAC计算的计算因子。

   SKEYID_e = prf( SKEYID, g^xy, | Ci | Cr | 2)用于后续5,6,阶段2消息的加密。

   如果没有配置PFS(完美向前保护)则,KEYMAT = prf ( SKEYID_d, protocol | SPI | Ni_b | Nr_b )。配置了PFW则,KEYMAT = prf(SKEYID_d, g^xy | protocol | SPI | Ni_b | Nr_b)。

2.1.4消息3~4抓包

发起方消息3:

 响应方消息4:

 2.1.5消息5~6

   将HDR*(ISAKMP的头部,被加密的),IDii(发起方的ID号,我觉得这应该也被加密了),HASH_I(hash计算的值)。

   HASH_I = prf ( SKEYID, g^xi | g^xr | Ci | Cr | SA | IDii )

   HASH_R = prf ( SKEYID, g^xr | g^xi | Cr | Ci | SA | IDir)

2.2野蛮模式

________________________________________________________________________

|    发起方                  接收方            |

|  HDR,SA,KE,Ni,IDii         ==》                      |
|                《==    HDR,SA,KE,Nr,IDir,HASH_R    |

|   HDR*,HASH_I        ==》                    |

————————————————————————————————————————

消息①:发起方发送ISAKMP消息,携带建立的IKE SA所使用的参数和密钥生成相关的信息和身份验证信息。

消息②:网关B对收到的第一个数据包进行确认,查找并返回SA,密钥生成信息和身份验证信息。

消息③:发起方回应验证结果,并建立IKESA(加密)。

1.第一个消息中带有,HDR(ISAKMP头部),SA(安全联盟),KE(生成密钥的关键材料),Ni(伪随机数),IDii(设备识别号)。在图中已标出。

SA:加密算法,验证算法等

 

 

 KE,Ni,IDii:

 2.第二个消息带有HDR(ISAKMP报头,SA(安全联盟),KE(密钥生成关键材料),Nr(随机数),IDir(设备识别号),HASH_R(用于验证)。

 2.3快速模式

_____________________________________________________________________

|      发起方                响应方            |

|    HDR*,HASH(1),SA,Ni                        |(发送IPSec安全提议,身份,验证数据给对方,对方查找匹配的安全提议并生成密钥)

|      [, 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)

 

posted @ 2022-10-11 09:34  L_F_A_L  阅读(852)  评论(1编辑  收藏  举报