主模式被设计成将 密钥交换信息 与 身份认证信息 相分离的一种交换技术。通过这种分离,得以将 交换的身份信息 进行加密保护,从而保证身份信息在传输过程中的安全性。
主模式总共需要经过 3 个步骤,共6条消息,来完成第一阶段的协商,最终建立 IKE SA。
这 3 个步骤分别是:模式协商;DH 交换、Nonce 交换;对对方身份的验证;
主模式的特点包括 身份保护 以及 对ISAKMP协商能力的完全利用。其中,身份保护在对方希望隐藏自己的身份时显得尤为重要。在我们讨论野蛮模式时,若使用预共享密钥方法验证,协商能力的完全利用与否也会凸显出其重要性。
交互过程
在消息1、2发送之前,协商发起者和响应者必须计算产生自己的cookie,用于唯一标识每个单独的协商交换,cookie使用源/目的IP地址、随机数字、日期、时间进行 MD5 运算得出,并且放入消息1的ISAKMP中,用以标识单独的一个协商交换。
在第一次交换中
需要交换双方的 cookie 和 SA 载荷
在 SA 载荷中,携带需要协商的 IKE SA 的各项参数,包括:IKE的散列类型、加密算法、认证算法、IKE SA 的协商时间限制、……
第一次交换后,第二次交换前,通信双方需要生成用于产生Diffie-Hellman共享密钥的DH值。生成方法是双方各自生成一个随机数字,通过DH算法对随机数字进行运算,得出一个DH值Xa和Xb(Xa是发起放的DH值,Xb是响应者的DH值),然后双方再根据DH算法运算得出一个临时值Ni和Nr。
在第二次交换中
双方交换各自的密钥交换载荷(即 DH 交换)以及临时值载荷(即nonce交换)。
其中密钥交换载荷包含了Xa和Xb,临时值交换包含了Ni和Nr。
双方交换了临时值载荷Ni和Nr之后,配合事先预置好的预共享密钥,再通过为随机函数运算便可产生一个密钥SKEYID,这个密钥使后续所有密钥生成的基础。随后,通过自己算出来的DH值、交换得到的DH值以及SKEYID进行运算便可产生一个只有双方才知道的共享密钥SKEYID_d。此共享密钥并不进行传输,传输的只是是DH值以及临时值,因此即使第三方得到了这些材料也无法计算出共享密钥。
在第二次交换完成之后,双方所需的计算材料都已经交换完毕,此时,双方就可以将所有的密钥计算出来,并使用该密钥对随后的IKE消息提供安全保护。这些密钥包括:SKEYID_a、SKEYID_e 、SKEYID_a 用来为IKE消息提供完整性以及数据源身份验证等安全服务;SKEYID_e则用于对IKE消息进行加密。
在第三次交换中
是对 标识载荷 和 散列载荷 进行交换。
标识载荷包含 发起者的标识信息、IP-ADDR 或主机名,
散列载荷包含上一过程中产生的三组密钥进行 HASH 运算得出的值。
此时,这两个载荷是通过 SKEYID_e 进行加密的,如果双方的载荷相同,那么认证成功。
至此,IKE Phase 1 主模式预共享密钥交换也就完成了。
实验观察
实验拓扑:
交互抓包(./ipsec-main-mode.pcapng):