1. 程式人生 > >IKEv2的金鑰生成過程

IKEv2的金鑰生成過程

在IKEv2的頭兩個訊息中,通訊雙方會協商一系列的安全引數。包括,一個加密演算法,一個完整性演算法,一個DH Group,以及一個PRF偽隨機數演算法。其中,PRF演算法被通訊雙方用來生成即將被用到的各種金鑰。

在討論金鑰生成之前,先了解下IKEv2通訊需要哪些金鑰。首先,加解密需要一對金鑰,稱之為SK_ei和SK_er;然後,完整性演算法需要一對金鑰,稱之為SK_ai和SK_ar;第三,在生成AUTH payload時也需要一對金鑰,稱之為SK_pi和SK_pr;最後,為了給Child SA生成加密材料,也需要一個金鑰,稱之為SK_d。

這些金鑰,有的是固定長度,比如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和DH大數g^ir算出prf+演算法的第一個引數SKEYSEED,然後取Ni | Nr | SPIi | SPIr作為第二個引數,用prf演算法反覆迭代,直到輸出的長度超過7個SK的總長度。然後將輸出的結果從前往後進行擷取,第一個為SK_d,第二個為SK_ai,然後分別為SK_ar,SK_ei,SK_er,SK_pr,SK_pr。