[关闭]
@ju1900 2017-07-24T17:45:52.000000Z 字数 1123 阅读 1470

IKEv2的密钥生成过程

日志


在IKEv2的头两个消息中,通信双方会协商一系列的安全参数。包括:

在讨论密钥生成之前,先了解下IKEv2通信需要哪些密钥:

这些密钥,有的是固定长度,比如DES算法的密钥长度固定是56比特,而有些算法,比如AES算法,其密钥程度可能是128比特,也可能是192或者256比特。那么在协商时,双方需要通过一个额外的属性来协商出密钥长度。当协商结束完成之后,双方应该在算法和密钥长度方面都达成了一致。而SK_d,SK_Pi和SK_pr的长度则是PRF算法所需要的密钥长度,因为它们最终被用作PRF算法的密钥。

密钥的计算过程如下:

  1. Pfr+ (K, S) = T1 | T2 | T3 | T4

其中:

  1. T1 = prf (K, S | 0x01)
  2. T2 = prf (K, T1 | S | 0x02)
  3. T3 = prf (K, T2 | S | 0x03)
  4. 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密钥生成就很好理解了:

  1. SKEYSEED = prf (Ni | Nr, g^ir)
  2. { SK_d | SK_ai | SK_ar | SK_ei | SK_er |SK_pi | SK_pr } = prf+ (SKEYSEED, Ni | Nr | SPIi | SPIr)
  1. 根据协商的随机数Ni, Nr和DH大数g^ir算出prf+算法的第一个参数SKEYSEED
  2. 取Ni | Nr | SPIi | SPIr作为第二个参数,用prf算法反复迭代,直到输出的长度超过7个SK的总长度
  3. 将输出的结果从前往后进行截取,第一个为SK_d,第二个为SK_ai,然后分别为SK_ar,SK_ei,SK_er,SK_pr,SK_pr

问题:

  1. 在这个过程 Ni|Nr 是否加密传输
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注