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(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}
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 6151 HMAC-MD5 のセキュリティ
RFC 6234 US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)