HMAC
Hash Based Message Authentication Code
RFC 2104 HMAC: Keyed-Hashing for Message Authentication FIPS PUB 198-1 The Keyed-Hash Message Authentication Code (HMAC) ハッシュ関数のブロック長が必要(SHA-3でも可能)
HMAC(H, K, M)
H = ハッシュ関数
B = ハッシュ関数のブロック長 (内部で保持する長さ)
L = ハッシュ関数のハッシュ長
K = 鍵
if Kの長さ < L 不適
if Kの長さ > L のとき {
K = H(K)
}
ipad = Bのサイズを0x36 で埋める XOR K
opad = Bのサイズを0x5cで埋める XOR K
HMAC = H( opad | H( ipad | Message ) )
NMAC(K1, K2, M) = H(K1, H(K2, M))
HMAC = NMAC(opad, ipad, M)
こんな感じだった気がする
SHA-3ではHMACの代わりにKMACがあるが、NIST FIPS PUB 202 の7章でHMAC用のブロック長も計算している。 SHAKE128, SHAKE256 はハッシュ関数として利用できない。
RFC 6151 HMAC-MD5 のセキュリティ