HKDF
RFC 5869 HMAC-based Extract-and-Expand Key Derivation Function (HKDF)
HMACな鍵導出関数KDF
HKDF(HMAC(MessageDigest()))
ステップ1: 抽出 Extract
HKDF-Extract(salt, IKM) -> PRK
オプション
Hash ハッシュ関数
HashLen ハッシュ長
入力
salt ランダム値 ない場合は長さ0
IKM キー入力
出力
PRK
PRK = HMAC-hash(salt, IKM)
ステップ2: 展開
HKDF-Expand(PRK, info, L) -> OKM
オプション
Hash: ハッシュ
HashLen: ハッシュの出力長
入力
PRK HashLenの長さの擬似ランダム鍵(pseudorandom key) 通常ステップ1 抽出の出力
info オプションのcontextとアプリケーション定義情報 サイズ0可
L 出力長
N = (L + HashLen - 1) / HashLen
T = T(1) | T(2) | T(3) | ... | T(N)
OKM = Tの先頭L オクテット
T(0) = 空文字(長さ0)
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)
...
HMACの出力T(x)を必要な長さまで繋げたもの
https://github.com/okomeki/SoftLibCrypto/blob/master/src/main/java/net/siisise/security/key/HKDF.java