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-2やSHA-3など任意の繰返し型ハッシュ関数を適用可能であり、ハッシュ関数Xを用いるHMACは、HMAC-Xと呼ばれる。例えば、SHA256を用いた場合にはHMAC-SHA256となる。 HMACのMAC値(タグ)の長さは、利用されるハッシュ関数の出力長と等しい。例えばHMAC-SHA256であればタグは256ビットである。
他のMACと同様に、HMACは暗号化機能は持たない。タグはメッセージ(あるいは暗号化したメッセージでもよい)と共に送信される。秘密鍵を共有している受信者は、受け取ったメッセージと秘密鍵からHMACアルゴリズムを用いてMAC値を再計算し、送られてきたタグと等しいかどうかをチェックすることで、受け取ったメッセージが同じ鍵を共有している者から送られてきたことを確認できる。
定義
HMACは次のように定義される:
![{\displaystyle {\mathit {HMAC}}_{K}(m)=h\left((K\oplus opad)\;||\;h((K\oplus ipad)\;||\;m)\right).}](https://wikimedia.org/api/rest_v1/media/math/render/svg/6bc8c58838277ecb21b5db65429ca17747ff0a79)
ここで、
は繰返し型ハッシュ関数、
は秘密鍵、
は認証対象のメッセージ、
と
は定数パディング(具体的には16進数で
)、"
"はビット列の連結、"
"は排他的論理和を表す。繰り返し型ハッシュ関数は、任意長の入力を固定長のブロックに分割してから、ブロック毎に圧縮関数で処理することでハッシュ値を求める。例えば、SHA-256では1ブロックは512ビットである。HMACでは、
と
がちょうど1ブロックとなるように、秘密鍵と定数パディングの長さが調整される。もし秘密鍵
が1ブロックより短い場合は、
を先頭に寄せて末尾に0x00を必要なだけ追加してブロック長にする。また、定数パディングはちょうど1ブロックになるように0x5cあるいは0x36を繰り返す。例えば、ハッシュ関数のブロック長が 512ビット(64オクテット[1])ならば、ipad と opad は、それぞれ64オクテットの 0x36 や 0x5c の連続である。
脚注
- ^ 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アルゴリズム | |
---|
認証付き暗号モード | - CCM
- CWC(英語版)
- EAX(英語版)
- GCM
- IAPM(英語版)
- OCB(英語版)
|
---|
攻撃 | |
---|
設計 | - アバランシェ効果(英語版)
- ハッシュ衝突
- Merkle–Damgård構成法(英語版)
|
---|
標準化 | |
---|
利用 | - ソルト
- キーストレッチ(英語版)
- メッセージ認証(英語版)
|
---|
パスワードハッシュ関数 | |
---|
カテゴリ:ハッシュ関数・メッセージ認証コード・認証付き暗号
|
|
|
|
---|
- 暗号史
- 暗号解読
- Cryptography portal
- en:Outline of cryptography
| |
|
カテゴリ |