HMAC
Hash Based Message Authentication Code ハッシュに基づくメッセージ認証コード
RFC 2104 HMAC: Keyed-Hashing for Message Authentication
https://www.nic.ad.jp/ja/tech/ipa/RFC2104JA.html
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)
メッセージ認証符号(MAC)のひとつ
MD5(廃止), SHAなど暗号ハッシュ関数と組み合わせることで手軽にメッセージ認証コードを作ることができる
ハッシュ関数のブロック長が必要(SHA-3でも可能)
現在利用されているのはSHA2系、時々RIPEMD-160やSHA3、SHAKE128/256
HMAC(H, K, M)
H = ハッシュ関数
B = ハッシュ関数のブロック長 (内部で保持する長さ MD5, SHA-1 は 512bitなので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)
こんな感じだった気がする
https://www.nic.ad.jp/ja/tech/ipa/RFC2104JA.html
SHA-3(Keccak)ではHMACの代わりにKMAC(cSHAKEを利用)があるが、NIST FIPS PUB 202 の7章でHMAC用のブロック長も計算している。
SHAKE128, SHAKE256 は固定長出力にすることでハッシュ関数として利用する。
SHAKE128 は 256bit, SHAKE256 は512bit 固定で使う。
Object Identifier
https://csrc.nist.gov/projects/computer-security-objects-register/algorithm-registration
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-SHAKE128 KMACが最適?
HMAC-SHAKE256 ?
RFC 2202 Test Cases for HMAC-MD5 and HMAC-SHA-1
https://datatracker.ietf.org/doc/html/rfc2202
RFC 3370 Cryptographic Message Syntax (CMS) Algorithms (Section 6.1?)
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)
https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/message-authentication
https://csrc.nist.gov/csrc/media/projects/cryptographic-standards-and-guidelines/documents/examples/hmac_sha3-512.pdf