HMAC

HMAC-SHA1の生成

HMAC (Hash-based Message Authentication Code または keyed-Hash Message Authentication Code) とは、メッセージ認証符号 (MAC; Message Authentication Code) の一つであり、秘密鍵とメッセージ(データ)とハッシュ関数をもとに計算される。

1997年2月、IBMのKrawczykらにより提唱され、RFC 2104として公開されている。また、FIPS PUB 198にも採用されている。

概要

MACは認証及び改竄検出技術の核となるアルゴリズムである。HMACアルゴリズムは、MAC値(タグ)の算出に暗号学的ハッシュ関数を用いる。ハッシュ関数としては、SHA-2SHA-3など任意の繰返し型ハッシュ関数を適用可能であり、ハッシュ関数Xを用いるHMACは、HMAC-Xと呼ばれる。例えば、SHA256を用いた場合にはHMAC-SHA256となる。 HMACのMAC値(タグ)の長さは、利用されるハッシュ関数の出力長と等しい。例えばHMAC-SHA256であればタグは256ビットである。

他のMACと同様に、HMACは暗号化機能は持たない。タグはメッセージ(あるいは暗号化したメッセージでもよい)と共に送信される。秘密鍵を共有している受信者は、受け取ったメッセージと秘密鍵からHMACアルゴリズムを用いてMAC値を再計算し、送られてきたタグと等しいかどうかをチェックすることで、受け取ったメッセージが同じ鍵を共有している者から送られてきたことを確認できる。

定義

HMACは次のように定義される:

H M A C K ( m ) = h ( ( K o p a d ) | | h ( ( K i p a d ) | | m ) ) . {\displaystyle {\mathit {HMAC}}_{K}(m)=h\left((K\oplus opad)\;||\;h((K\oplus ipad)\;||\;m)\right).}

ここで、 h {\displaystyle h} は繰返し型ハッシュ関数、 K {\displaystyle K} は秘密鍵、 m {\displaystyle m} は認証対象のメッセージ、 i p a d {\displaystyle ipad} o p a d {\displaystyle opad} は定数パディング(具体的には16進数 i p a d = 0x363636...3636 , o p a d = 0x5c5c5c...5c5c {\displaystyle ipad={\textrm {0x363636...3636}},opad={\textrm {0x5c5c5c...5c5c}}} )、" | | {\displaystyle ||} "はビット列の連結、" {\displaystyle \oplus } "は排他的論理和を表す。繰り返し型ハッシュ関数は、任意長の入力を固定長のブロックに分割してから、ブロック毎に圧縮関数で処理することでハッシュ値を求める。例えば、SHA-256では1ブロックは512ビットである。HMACでは、 ( K o p a d ) {\displaystyle (K\oplus opad)} ( K i p a d ) {\displaystyle (K\oplus ipad)} がちょうど1ブロックとなるように、秘密鍵と定数パディングの長さが調整される。もし秘密鍵 K {\displaystyle K} が1ブロックより短い場合は、 K {\displaystyle K} を先頭に寄せて末尾に0x00を必要なだけ追加してブロック長にする。また、定数パディングはちょうど1ブロックになるように0x5cあるいは0x36を繰り返す。例えば、ハッシュ関数のブロック長が 512ビット(64オクテット[1])ならば、ipad と opad は、それぞれ64オクテットの 0x36 や 0x5c の連続である。

脚注

  1. ^ RFC 2104では、octetでなく、byteと書いてある。

参考文献

  • Mihir Bellare, Ran Canetti and Hugo Krawczyk, "Keying Hash Functions for Message Authentication", CRYPTO'96, pp1–15, 1996.

外部リンク

  • RFC 2104
    • HMAC: メッセージ認証のための鍵付ハッシング (HMAC: Keyed-Hashing for Message Authentication) — IPAによる日本語訳


セキュリティ要約(英語版)
一般的関数
SHA-3最終候補(英語版)
その他の関数
  • FSB(英語版)
  • ECOH(英語版)
  • GOST(英語版)
  • HAS-160(英語版)
  • HAVAL(英語版)
  • Kupyna(英語版)
  • LMハッシュ
  • MDC-2(英語版)
  • MD2
  • MD4
  • MD6(英語版)
  • N-Hash(英語版)
  • RadioGatún
  • RIPEMD
  • SipHash(英語版)
  • Snefru(英語版)
  • Streebog(英語版)
  • SWIFFT(英語版)
  • Tiger(英語版)
  • VSH(英語版)
  • WHIRLPOOL
  • crypt(3)(英語版) (DES)
MACアルゴリズム
  • DAA(英語版)
  • CBC-MAC
  • HMAC
  • OMAC(英語版)/CMAC
  • PMAC(英語版)
  • VMAC(英語版)
  • UMAC(英語版)
  • Poly1305
認証付き暗号モード
  • CCM
  • CWC(英語版)
  • EAX(英語版)
  • GCM
  • IAPM(英語版)
  • OCB(英語版)
攻撃
設計
標準化
  • CRYPTREC
  • NESSIE
  • NISTハッシュ関数コンベンション(英語版)
利用
  • ソルト
  • キーストレッチ(英語版)
  • メッセージ認証(英語版)
パスワードハッシュ関数
  • カテゴリ カテゴリ:ハッシュ関数・メッセージ認証コード・認証付き暗号
カテゴリ カテゴリ