2.13. Generating Keying Material (鍵材料の生成)
2.13. Generating Keying Material (鍵材料の生成)
IKE SA (Internet Key Exchange セキュリティアソシエーション) の文脈では, 4 つの暗号アルゴリズムが交渉される: 暗号アルゴリズム (encryption algorithm), 完全性保護アルゴリズム (integrity protection algorithm), Diffie-Hellman 群, および疑似乱数関数 (pseudorandom function, PRF). PRF は, IKE SA と Child SA の両方で用いられるすべての暗号アルゴリズムの鍵材料 (keying material) 構築に用いられる.
各暗号アルゴリズムおよび完全性保護アルゴリズムは固定長の鍵を用い, その固定長の任意のランダム値が適切な鍵になり得ると仮定する. 可変長鍵を受け付けるアルゴリズムでは, 交渉される暗号変換 (cryptographic transform) の一部として固定鍵長を指定しなければならない (Key Length 変換属性の定義は 3.3.5 節). 任意の値がすべて有効な鍵ではないアルゴリズム (例: 鍵パリティ付き DES または 3DES) では, 任意の値から鍵を導出するアルゴリズムを暗号変換が指定しなければならない. Hashed Message Authentication Code (HMAC) に基づく完全性保護関数では, 固定鍵長は下層ハッシュ関数の出力長である.
PRF は任意長の鍵を受け付けるが, 優先鍵長 (preferred key size) を持つと仮定する. SK_d, SK_pi, SK_pr の長さは, 合意された PRF の優先鍵長を用いなければならない (2.14 節). HMAC 構成に基づく PRF では, 優先鍵長は下層ハッシュの出力長に等しい. 他の種類の PRF は優先鍵長を指定しなければならない.
鍵材料は常に, 交渉された PRF アルゴリズムの出力として導出される. 必要な鍵材料が PRF の出力サイズを超える場合があるため, PRF を反復して用いる. 用語 "prf+" は, 疑似乱数関数 "prf" への入力に基づき疑似乱数ストリームを出力する関数を表す.
以下では | は連結 (concatenation) を表す. prf+ は次のように定義される:
prf+ (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)
...
必要なすべての鍵を計算するのに十分な材料が prf+ から出力されるまでこれを続ける. 鍵は出力ビット列から境界を無視して取り出す (例: 256 ビット AES 鍵と 160 ビット HMAC 鍵が必要で prf が 160 ビット生成する場合, AES 鍵は T1 と T2 の先頭から, HMAC 鍵は T2 の残りと T3 の先頭から取る).
各 prf の末尾に連結する定数は 1 オクテットである. prf+ は prf 出力長の 255 倍を超えては定義されない.