2. HMAC-based Key Derivation Function (HMAC ベースの鍵導出関数)
2. HMAC-based Key Derivation Function (HMAC ベースの鍵導出関数)
2.1. Notation (表記法)
HMAC-Hash は, ハッシュ関数 'Hash' でインスタンス化された HMAC 関数 [HMAC] を表します。HMAC には常に2つの引数があります: 最初は鍵で, 2番目は入力 (またはメッセージ) です。(抽出ステップでは, 'IKM' は HMAC 鍵としてではなく, HMAC 入力として使用されることに注意してください。)
メッセージが複数の要素で構成される場合, 2番目の引数で連結 (| で表記) を使用します。例えば, HMAC(K, elem1 | elem2 | elem3) です。
この文書のキーワード "MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY"、"OPTIONAL" は, [KEYWORDS] に記載されているとおりに解釈されるものとします。
2.2. Step 1: Extract (ステップ1: 抽出)
HKDF-Extract(salt, IKM) -> PRK
Options (オプション):
Hash: ハッシュ関数; HashLen はハッシュ関数出力の長さをオクテット単位で表します
Inputs (入力):
salt: オプションのソルト値 (非秘密のランダム値); 提供されない場合は, HashLen 個のゼロの文字列に設定されます。IKM: 入力鍵材料 (input keying material)
Output (出力):
PRK: 疑似ランダム鍵 (pseudorandom key, HashLen オクテット)
出力 PRK は次のように計算されます:
PRK = HMAC-Hash(salt, IKM)
2.3. Step 2: Expand (ステップ2: 拡張)
HKDF-Expand(PRK, info, L) -> OKM
Options (オプション):
Hash: ハッシュ関数; HashLen はハッシュ関数出力の長さをオクテット単位で表します
Inputs (入力):
PRK: 少なくとも HashLen オクテットの疑似ランダム鍵 (通常は抽出ステップからの出力)info: オプションのコンテキストおよびアプリケーション固有情報 (長さゼロの文字列でも可)L: 出力鍵材料の長さ (オクテット単位) (<= 255*HashLen)
Output (出力):
OKM: 出力鍵材料 (output keying material, L オクテット)
出力 OKM は次のように計算されます:
N = ceil(L/HashLen)
T = T(1) | T(2) | T(3) | ... | T(N)
OKM = first L octets of T
ここで:
T(0) = empty string (zero length)
T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)
T(2) = HMAC-Hash(PRK, T(1) | info | 0x02)
T(3) = HMAC-Hash(PRK, T(2) | info | 0x03)
...
(各 T(n) の末尾に連結される定数は単一のオクテットです。)