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创建完成。

 

 

已标记关键词 清除标记
为了方便在手机上阅读,特整理本资料,来源于华为Hex文档整理而成,高清pdf格式,源文件详见华为Hex文档,仅做学习交流用。 本文档为最新版本V8.0,更新于2020年06月20,整理后共942页,文内设有目录、页眉,方便阅读及查找 共分为6章:1、协议地图;2、链路层;3、MPLS层;4、网络层;5、传输层;6、应用层。 目录 1 协议地图 6 2 链路层 7 2.1 以太帧格式 10 2.1.1 Ethernet Ⅱ以太帧 10 2.1.2 Novell Netware 802.3 Raw以太帧 15 2.1.3 IEEE 802.3 LLC以太帧 17 2.1.4 IEEE 802.3 SNAP以太帧 21 2.2 VLAN帧格式 26 2.3 QinQ帧格式 32 2.4 PPP 38 2.5 PPPoE 47 2.6 HDLC帧 55 2.6.1 IP over HDLC 55 2.6.2 PPP in HDLC-Like 57 2.7 ATM信元 61 2.7.1 ATM信元头 61 2.7.2 AAL5多协议封装 65 2.7.3 IPoEoA/PPPoEoA(AAL5 Ethernet/802.3封装) 69 2.7.4 PPPoA(AAL5 PPP封装) 72 2.8 STP/RSTP/MSTP帧 75 2.9 RPR帧 83 2.10 RRPP帧 88 2.11 LACP帧 91 2.12 以太OAM报文 98 2.12.1 EFM OAM(802.3ah) 98 2.12.2 CFM OAM(802.1ag) 108 2.13 ERPS(G.8032)帧 125 2.14 GVRP帧格式 131 2.15 LLDP帧 136 2.16 IS-IS 153 2.16.1 IS-IS报文通用格式 153 2.16.2 IS-IS Hello消息(IIH消息) 158 2.16.3 IS-IS LSP消息 162 2.16.4 IS-IS CSNP消息 167 2.16.5 IS-IS PSNP消息格式 173 3 MPLS层 178 3.1 MPLS 179 3.2 MPLS Ping/Tracert (MPLS Echo)报文 183 3.3 ATM PWE3 213 3.3.1 ATM PWE3通用封装格式 213 3.3.2 ATM PWE3 N:1信元模式 215 3.3.3 ATM PWE3 1:1信元模式 217 3.3.4 ATM PWE3 AAL5 CPCS-SDU帧模式 220 3.3.5 ATM PWE3 AAL5 CPCS-PDU帧模式 222 4 网络层 225 4.1 ARP/RARP报文 226 4.2 GRE报文格式 233 4.3 ICMP报文格式 240 4.3.1 ICMP报文通用格式 240 4.3.2 ICMP Echo Request/Reply消息格式 244 4.3.3 ICMP目的不可达消息格式 248 4.3.4 ICMP重定向消息 257 4.3.5 ICMP超时消息格式 260 4.3.6 ICMP参数问题消息格式 264 4.3.7 ICMP源端被关闭消息格式 265 4.4 ICMPv6报文格式 268 4.4.1 ICMPv6报文通用格式 269 4.4.2 ICMPv6 Echo消息 272 4.4.3 ICMPv6目的不可达消息 276 4.4.4 ICMPv6重定向消息 281 4.4.5 ICMPv6包太大(Too Big)消息 284 4.4.6 ICMPv6超时消息 286 4.4.7 ICMPv6参数错误消息 289 4.4.8 ICMPv6路由器请求RS(Router Solicitation)消息 291 4.4.9 ICMPv6路由器通告RA(RouterAdvertisement)消息 294 4.4.10 ICMPv6邻居请求NS(Neighbor Solicitation)消息 300 4.4.11 ICMPv6邻居通告NA(Neighbor Advertisement)消息 303 4.5 IGMP 307 4.5.1 IGMPv1报文格式 307 4.5.2 IGMPv2报文格式 310 4.5.3 IGMPv3成员查询消息 317 4.5.4 IGMPv3成员报告消息 322 4.6 IP in IP报文格式 332 4.7 IPSec 335 4.7.1 IPSec报文AH封装 336 4.7.2 IPSec ESP 340 4.7.3 IPSec IKE 345 4.8 IP报文格式 359 4.9 IPv6报文格式 368 4.10 IPv6 in IPv4 (6to4)报文格式 378 4.11 MLD报文格式 382 4.11.1 MLDv1 382 4.11.2 MLDv2查询 389 4.11.3 MLDv2成员报告 395 4.12 OSPF 403 4.12.1 OSPF报文头 403 4.12.2 OSPF Hello 407 4.12.3 OSPF DD 412 4.12.4 OSPF LSR 418 4.12.5 OSPF LSU 422 4.12.6 OSPF LSAck 435 4.13 OSPFv3 440 4.13.1 OSPFv3报文头格式 440 4.13.2 OSPFv3 Hello 442 4.13.3 OSPFv3 DD 445 4.13.4 OSPFv3 LSR 447 4.13.5 OSPFv3 LSU报文格式 449 4.13.6 OSPFv3 LSAck 467 4.14 PIM 469 4.14.1 PIM报文通用格式 470 4.14.2 PIM Hello 473 4.14.3 PIM Register 478 4.14.4 PIM Register-Stop 482 4.14.5 PIM Join/Prune 485 4.14.6 PIM Graft/Graft-Ack 492 4.14.7 PIM Bootstrap 498 4.14.8 PIM Assert 503 4.14.9 PIM C-RP Advertisement 507 4.15 RSVP 511 4.16 VRRP 531 5 传输层 536 5.1 TCP 537 5.2 UDP报文格式 542 5.3 SCTP 545 5.3.1 SCTP 546 5.3.2 SCTP ABORT 552 5.3.3 SCTP COOKIE ACK 556 5.3.4 SCTP COOKIE ECHO 560 5.3.5 SCTP DATA 564 5.3.6 SCTP ERROR 569 5.3.7 SCTP HEARTBEAT 575 5.3.8 SCTP HEARTBEAT ACK 579 5.3.9 SCTP INIT 583 5.3.10 SCTP INIT ACK 589 5.3.11 SCTP SACK 596 5.3.12 SCTP SHUTDOWN 602 5.3.13 SCTP SHUTDOWN ACK 605 5.3.14 SCTP SHUTDOWN COMPLETE 609 6 应用层 614 6.1 1588v2(PTP) 615 6.1.1 1588v2(PTP)报文通用格式 616 6.1.2 1588v2 Sync消息和Delay_Req消息 619 6.1.3 1588v2 Follow_Up消息 624 6.1.4 1588v2 Delay_Resp消息 627 6.1.5 1588v2 Pdelay_Req消息 630 6.1.6 1588v2 Pdelay_Resp消息 634 6.1.7 1588v2 Pdelay_Resp_Follow_Up消息 637 6.1.8 1588v2 Signaling消息 641 6.1.9 1588v2 Management消息 643 6.2 BFD 648 6.3 BGP 655 6.3.1 BGP报文头基本格式 655 6.3.2 BGP OPEN 657 6.3.3 BGP UPDATE 662 6.3.4 BGP NOTIFICATION 668 6.3.5 BGP KEEPALIVE 672 6.3.6 BGP REFRESH 675 6.4 BOOTP 678 6.5 DHCP 685 6.6 DHCPv6 705 6.7 Diameter 711 6.8 DNS 715 6.9 EVPN 723 6.9.1 Ethernet Auto-Discovery Route 724 6.9.2 MAC/IP Advertisement Route 730 6.9.3 Inclusive Multicast Route 736 6.9.4 Ethernet Segment Route 741 6.9.5 IP Prefix Route 747 6.10 IP FPM 755 6.11 L2TP 762 6.12 MPLS LDP 767 6.12.1 MPLS LDP报文通用格式 768 6.12.2 MPLS LDP通告(Notification) 773 6.12.3 MPLS LDP Discovery(Hello) 777 6.12.4 MPLS LDP Initialization 783 6.12.5 MPLS LDP KeepAlive 787 6.12.6 MPLS LDP地址(Address) 791 6.12.7 MPLS LDP地址撤销(Address Withdraw) 794 6.12.8 MPLS LDP标签映射(Label Mapping) 798 6.12.9 MPLS LDP标签请求(Label Request) 803 6.12.10 MPLS LDP标签废弃请求(Label Abort Request) 808 6.12.11 MPLS LDP标签撤销(Label Withdraw) 813 6.12.12 MPLS LDP标签释放(Label Release) 818 6.13 MSDP 824 6.13.1 MSDP Source-Active 824 6.13.2 MSDP Source-Active Request 828 6.13.3 MSDP Source-Active Response 833 6.13.4 MSDP KeepAlive 837 6.14 NetStream 842 6.14.1 NetStream版本5 842 6.14.2 NetStream版本8 844 6.14.3 NetStream版本9 848 6.15 NG MVPN控制消息 854 6.16 RIP 865 6.17 RIPng 870 6.18 NTP 873 6.19 RADIUS 878 6.20 Segment Routing 885 6.20.1 IS-IS LSP for Segment Routing 885 6.20.2 OSPF LSU for Segment Routing 896 6.21 SNMP 910 6.21.1 SNMPv1 910 6.21.2 SNMPv2c 916 6.21.3 SNMPv3 921 6.22 TWAMP 926 6.23 VXLAN 938
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页