IKEv1报文交互简析

IKEv1协议分为两个阶段。阶段1(Phase 1)用来建立IKE SA安全关联;阶段2(Phase 2)用来建立IPSec SA安全关联,前者有两种模式:主模式与野蛮模式。后者有快速模式(Quick mode)完成。

阶段1(Phase 1)其中主模式下共由3组报文组成,Phase1建立的IKE SA主要用来保护阶段2的协商过程,以及保护状态信息等的报文传输。主模式(Main Mode)的第一组报文用来协商加密及完整性校验等参数:

有如下日志log信息可见,responder回复的协商结果:加密算法使用3DES_CBC、哈希算法采用SHA、认证方法为预共享密钥、Diffie-Hellman组选用5(1536-bit modulus对应DH Group 5)。

ike 0: comes 192.168.1.97:500->192.168.1.127:500,ifindex=4....
ike v1: responder: main mode get first message...
ike v1: negotiation result
ike v1: proposal id = 1:
ike v1:   protocol id = ISAKMP:
ike v1:      trans_id = KEY_IKE.
ike v1:      encapsulation = IKE/none
ike v1:         type=OAKLEY_ENCRYPT_ALG, val=3DES_CBC.
ike v1:         type=OAKLEY_HASH_ALG, val=SHA.
ike v1:         type=AUTH_METHOD, val=PRESHARED_KEY.
ike v1:         type=OAKLEY_GROUP, val=1536.
ike v1: ISKAMP SA lifetime=28800
ike v1: selected NAT-T version: RFC 3947
ike v1: cookie c8de607e668cc6ef/e5a5cd77892a7659
ike v1: sent IKE msg : 192.168.1.127:500->192.168.1.97:500, len=120

主模式的第二组报文,主要用于交换各自的KE(Key Exchange)与NONCE数据,这两个数据用来生成之后使用的加密主密钥(SKEYID),生成过程中将使用第一组报文协商一致后的加密/完整性校验参数,SKEYID生成公式如下:

预共享密钥方式:
SKEYID = prf(pre-shared_key, Nonce_initiator | Nonce_responder)

证书方式:
SKEYID = prf(HASH(Nonce_initiator | Nonce_responder), Cookie_initiator  |  Cookie_responder)

其中prf为带秘钥的哈希函数(pseudo-random function),Nonce_initiator和Nonce_responder分别为IKE请求发起者的NONCE值与响应者的NONCE值。

根据主密钥(SKEYID),生成其它三个秘钥:

SKEYID_d 用于IKE阶段2
SKEYID_a 用于数据完整性校验
SKEYID_e 用于加密IKE消息

以下为日志信息,自此组报文之后的报文都为加密报文:

ike 0: comes 192.168.1.97:500->192.168.1.127:500,ifindex=4....
ike v1: responder:main mode get 2nd message...
ike v1: NAT not detected 
ike v1: sent IKE msg : 192.168.1.127:500->192.168.1.97:500, len=292
ike v1: ISAKMP SA c8de607e668cc6ef/e5a5cd77892a7659 key 24:5886A076EACF9F262C12907359E4F3AB565503F4D7F71094

Main模式的第三组报文,使用SKEYID_e秘钥加密传输,其主要内容为ID字段与一个HASH值字段。哈希值字段将选取之前的报文中的一些字段生成,目的在于可验证之前的传输是否正常以及做身份认证。其包含的字段有第一组报文交换中的两个Cookie值(Cookie_i与Cookie_r)和安全关联(SA)载荷;第二组报文中的两个Key Exchange数据;第三组报文中自身的ID值;以及主密钥(SKEYID)。

如下日志信息显示,预共享秘钥认证成功。

ike 0: comes 192.168.1.97:500->192.168.1.127:500,ifindex=4....
ike v1: responder: main mode get third message...
ike v1: PSK authentication succeeded
ike v1: authentication OK
ike v1: sent IKE msg : 192.168.1.127:500->192.168.1.97:500, len=68
ike v1: established IKE SA c8de607e668cc6ef/e5a5cd77892a7659

阶段2用于建立IPSec SA,其采用快模式Quick Mode。快模式所有的报文都使用第一阶段生成的秘钥SKEYID_e进行加密,并且使用秘钥SKEYID_a进行完整性校验。加密算法与验证算法都采用第一阶段协商的结果。 Quick模式有3个报文组成。

第一个报文用于协商安全关联提议(SA Proposal)与数据加密转换集(Transformset),用于包含此数据包完整性的hash值计算如下:

HASH = prf ( SKEYID_a, M-ID | SA Proposal | Nonce_i | (KE) | (CID_I) | (CID_r))

此HASH算法的秘钥为SKEYID_a,M-ID为ISAKMP报文头中的Message-ID值,此值在快模式的三个报文中相同,标识同一个IPSec SA的建立。Nonce_i为随机数。KE(Key Exchange Data)与 CID_i、CID_r(Client ID)都为可选值,依据配置而定。如果开启PFS(Perfect Forward Security),就需要KE字段,以便重新生成新的秘钥。

粗略的讲,最后得到的哈希值大致为整个报文的HASH值。
 

ike 0: comes 192.168.1.97:500->192.168.1.127:500,ifindex=4....
ike 0: responder received first quick-mode message
ike v1:p2: peer proposal is: peer:0:0.0.0.0-255.255.255.255:0, me:0:0.0.0.0-255.255.255.255:0
ike v1:p2: matched phase2
ike v1:p2: our proposal:
ike v1:p2: proposal id = 1:
ike v1:p2:   protocol id = IPSEC_ESP:
ike v1:p2:   PFS DH group = 5
ike v1:p2:      trans_id = ESP_3DES
ike v1:p2:      encapsulation = ENCAPSULATION_MODE_TUNNEL
ike v1:p2:         type = AUTH_ALG, val=SHA1
ike v1:p2:      trans_id = ESP_AES (key_len = 128)
ike v1:p2:      encapsulation = ENCAPSULATION_MODE_TUNNEL
ike v1:p2:         type = AUTH_ALG, val=SHA1
ike v1:p2: incoming proposal:
ike v1:p2: proposal id = 1:
ike v1:p2:   protocol id = IPSEC_ESP:
ike v1:p2:   PFS DH group = 5
ike v1:p2:      trans_id = ESP_3DES
ike v1:p2:      encapsulation = ENCAPSULATION_MODE_TUNNEL
ike v1:p2:         type = AUTH_ALG, val=SHA1
ike v1:p2:      trans_id = ESP_AES (key_len = 128)
ike v1:p2:      encapsulation = ENCAPSULATION_MODE_TUNNEL
ike v1:p2:         type = AUTH_ALG, val=SHA1
ike v1:p2: negotiation result:
ike v1:p2: proposal id = 1:
ike v1:p2:   protocol id = IPSEC_ESP:
ike v1:p2:   PFS DH group = 5
ike v1:p2:      trans_id = ESP_3DES
ike v1:p2:      encapsulation = ENCAPSULATION_MODE_TUNNEL
ike v1:p2:         type = AUTH_ALG, val=SHA1
ike v1:p2: set pfs=1536
ike v1:p2: using tunnel mode.
ike v1:p2: sent IKE msg : 192.168.1.127:500->192.168.1.97:500, len=356

与报文1类似,第二个回复报文包括协商后的结果,此报文的HASH值如下,与报文1的hash的唯一不同是随机数采用Nonce_r:

HASH = prf ( SKEYID_a, M-ID | Nonce_I | SA offer | Nonce_r | (KE) | (CID_i) | (CID_r))

Quick模式的第3个报文确认之前的2个交互报文,其内容仅包括一个HASH值,其值如下:

HASH = prf ( SKEYID_a, 0 | M-ID | Nonce_i | Nonce_r)

ike 0: comes 192.168.1.97:500->192.168.1.127:500,ifindex=4....
ike v1: found 192.168.1.127 4 -> 192.168.1.97:500
ike v1:p2: replay protection enabled
ike v1:p2: SA life soft seconds=1777.
ike v1:p2: SA life hard seconds=1800.
ike v1:p2: IPsec SA selectors #src=1 #dst=1
ike v1:p2: add IPsec SA: SPIs=0dc36847/ebc60db2
ike v1:p2: IPsec SA dec spi 0dc36847 key 24:60B384FEB7463702B30F5DC178A80932A6B2DEE530B2D65C auth 20:DA5DA2B7357A029BF8B8C657EC8F1EF05C779927
ike v1:p2: IPsec SA enc spi ebc60db2 key 24:BDCD7B34121DCE1A2E1E64EF8808FD4A2F9EC05CA660DF80 auth 20:0D9F38476CF79ECCB68AF1E7AFE42DF87C4B0074
ike v1:p2: added IPsec SA: SPIs=0dc36847/ebc60db2

至此IKEv1协议的交互完成,IKE SA与IPSec SA创建完成。

猜你喜欢

转载自blog.csdn.net/sinat_20184565/article/details/81093595
今日推荐