@ju1900
2017-07-24T17:45:52.000000Z
字数 1123
阅读 1470
日志
在IKEv2的头两个消息中,通信双方会协商一系列的安全参数。包括:
在讨论密钥生成之前,先了解下IKEv2通信需要哪些密钥:
这些密钥,有的是固定长度,比如DES算法的密钥长度固定是56比特,而有些算法,比如AES算法,其密钥程度可能是128比特,也可能是192或者256比特。那么在协商时,双方需要通过一个额外的属性来协商出密钥长度。当协商结束完成之后,双方应该在算法和密钥长度方面都达成了一致。而SK_d,SK_Pi和SK_pr的长度则是PRF算法所需要的密钥长度,因为它们最终被用作PRF算法的密钥。
密钥的计算过程如下:
Pfr+ (K, S) = T1 | T2 | T3 | T4 …
其中:
T1 = prf (K, S | 0x01)
T2 = prf (K, T1 | S | 0x02)
T3 = prf (K, T2 | S | 0x03)
T4 = prf (K, T3 | S | 0x04)
…
如何理解以上过程呢?
以T1 = prf (K, S | 0x01)为例,K和S | 0x01为这个prf算法的输入,T1是它的计算结果。分隔符‘|’表示连接的意思,比如S的值是”0x08 0x07 0x06 0x05”,那么 S | 0x01的结果是” 0x080x07 0x06 0x05 0x01”。
T2,T3和T4的计算则是一个迭代的过程,将上一次的计算结果作为这一次的输入的一部分。最后Prf+则是将多次的计算结果连接起来,形成最终的结果。迭代结束的条件是,T1 | T2 | … | Tn 的长度超过所有需要的7个密钥长度之和。
了解了密钥的计算过程,那么一下的IKEv2密钥生成就很好理解了:
SKEYSEED = prf (Ni | Nr, g^ir)
{ SK_d | SK_ai | SK_ar | SK_ei | SK_er |SK_pi | SK_pr } = prf+ (SKEYSEED, Ni | Nr | SPIi | SPIr)
问题:
Ni|Nr
是否加密传输