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)