HMAC
Hash Based Message Authentication Code ハッシュに基づくメッセージ認証コード
RFC 2104 HMAC: Keyed-Hashing for Message Authentication RFC 6234 US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF) SHA-2用のサンプル等
FIPS PUB 198-1 The Keyed-Hash Message Authentication Code (HMAC) ハッシュ関数のブロック長が必要(SHA-3でも可能)
HMAC(H, K, M)
H = ハッシュ関数
B = ハッシュ関数のブロック長 (内部で保持する長さ MD5, SHA-1 は 64?)
L = ハッシュ関数のハッシュ長
K = 鍵
if (Kの長さ < L) 不適
if (Kの長さ < B) 0で埋める
if Kの長さ > L のとき {
K = H(K)
}
ipad = Bのサイズを0x36 で埋める
opad = Bのサイズを0x5cで埋める
HMAC = H( K XOR opad | H( K XOR ipad | Message ) )
NMAC(K1, K2, M) = H(K1, H(K2, M))
HMAC = NMAC(K XOR opad, K XOR ipad, M)
こんな感じだった気がする
SHA-3(Keccak)ではHMACの代わりにKMAC(cSHAKEを利用)があるが、NIST FIPS PUB 202 の7章でHMAC用のブロック長も計算している。 SHAKE128, SHAKE256 はハッシュ関数として利用できない。256bit(SHAKE128),512bit(SHAKE256)固定で使う? Object Identifier
OBJECTIDENTIFIER
isakmpOakley OBJECT IDENTIFIER ::= {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) ipsec(8) isakmpOakley(1)}
rsadsi OBJECT IDENTIFIER ::= {iso(1) member-body(2) us(840) rsadsi(113549)}
digestAlgorithm OBJECT IDENTIFIER :== {rsadsi 2}
nistAlgorithms OBJECT IDENTIFIER ::= { joint-iso-ccitt(2) country(16) us(840) organization(1) gov(101) csor(3) nistAlgorithm(4)}
hashAlgs OBJECT IDENTIFIER ::= { nistAlgorithms 2 }
table:HMAC OID
HMAC-MD4
HMAC-MD5 {isakmpOakley 1}
HMAC-SHA1 {isakmpOakley 2}
HMAC-TIGER {isakmpOakley 3}
HMAC-RIPEMD160 {isakmpOakley 4}
HMAC-SHA-224 {digestAlgorithm 8}
HMAC-SHA-256 {digestAlgorithm 9}
HMAC-SHA-384 {digestAlgorithm 10}
HMAC-SHA-512 {digestAlgorithm 11}
HMAC-SHA3-224 {hashAlgs 13} RFC 9688
HMAC-SHA3-256 {hashAlgs 14}
HMAC-SHA3-384 {hashAlgs 15}
HMAC-SHA3-512 {hashAlgs 16}
HMAC-SHAKE256 ?
RFC 2202 Test Cases for HMAC-MD5 and HMAC-SHA-1
RFC 3370
RFC 4231 Identifiers and Test Vectors for HMAC-SHA-224, HMAC-SHA-256, HMAC-SHA-384, and HMAC-SHA-512
RFC 4634 → 6234
RFC 6151 HMAC-MD5 のセキュリティ
RFC 6234 US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)