メッセージ認証コード(メッセージにんしょうコード、英: Message Authentication Code、MAC)は、メッセージを認証するための短い情報である。MACアルゴリズムは、入力として共通鍵と認証すべき任意長のメッセージを受け取り、MAC(「タグ」とも呼ばれる)を出力する。MACを付加することで、(共通鍵をもつ)検証者がメッセージ内容の変化を検出できるようになり、メッセージの完全性と認証が保証される。このため、メッセージ認証完全性コード(Message Authentication and Integrity Code、MAIC)とも呼ばれる。 MAC関数は暗号学的ハッシュ関数に似ているが、いくつかの必要条件の違いがある。MAC関数は選択平文攻撃における存在的偽造
セキュリティ
MACはデジタル署名とは異なり、MAC値の生成と検証には同じ鍵が使われるので(共通鍵暗号)、送信者と受信者は通信を行う前に鍵を共有しておく必要がある。また共通鍵暗号であるために、認証されたメッセージは送信者本人が作成した物であり偽造ではないという確証、つまり否認不可性をもたない。なぜなら、受信者も含め共通鍵を知っている者であれば捏造したメッセージについてもMAC値を生成することができるからである。
公開鍵暗号を用いたデジタル署名では、メッセージの検証を公開鍵だけで行うことができるので、鍵の所有者はデジタル署名を作成できる秘密鍵を秘匿できる。したがって、デジタル署名が付与された文書はその所有者が署名したものと確定でき、否認不可な文書を作成することができる。 メッセージ認証符号(MAC)の代わりにメッセージ完全性コード(Message Integrity Code, MIC)という用語が、特に通信の分野でMACアドレスとの区別のために用いられることがある。[1] しかし、MICは、メッセージを一意に識別するためのメッセージダイジェストの意味で用いられる場合もある。[2]このため .mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation.cs-ja1 q,.mw-parser-output .citation.cs-ja2 q{quotes:"「""」""『""』"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free a,.mw-parser-output .citation .cs1-lock-free a{background:url("//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited a,.mw-parser-output .id-lock-registration a,.mw-parser-output .citation .cs1-lock-limited a,.mw-parser-output .citation .cs1-lock-registration a{background:url("//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription a,.mw-parser-output .citation .cs1-lock-subscription a{background:url("//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg")right 0.1em center/12px no-repeat}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:#d33}.mw-parser-output .cs1-visible-error{color:#d33}.mw-parser-output .cs1-maint{display:none;color:#3a3;margin-left:0.3em}.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}RFC 4949 MACアルゴリズムは他の暗号プリミティブから構築でき、ハッシュ関数を使う方式(HMAC)、ブロック暗号アルゴリズムを使う方式(OMAC/CMAC、CBC-MAC、PMAC)などがある。また、 Poly1305などの高速なMACアルゴリズムはuniversal hashing 鍵付きハッシュ関数の一種であるuniversal hashing
メッセージ完全性コード
実装
One-time MAC
Pairwise independentという性質は、鍵 k {\displaystyle k} を知らないならば、ある m {\displaystyle m} のハッシュ値 h a s h k ( m ) {\displaystyle hash_{k}(m)} が分かったとしても、別のメッセージ m ′ ( ≠ m ) {\displaystyle m'(\neq m)} のハッシュ値 h a s h k ( m ′ ) {\displaystyle hash_{k}(m')} を推測できないという性質である。このような性質を持つハッシュ関数は、次のように簡単に作れる。素数 p {\displaystyle p} に対して鍵を k = ( a , b ) {\displaystyle k=(a,b)} としたとき、 メッセージ m {\displaystyle m} のハッシュ値(MACにおけるタグ)は、 h a s h k ( m ) = a m + b mod p {\displaystyle hash_{k}(m)=am+b\mod p} である。 応用例として、MACはSSH2においてトランスポート層のデータ一貫性を確保するために使用されている。MACの検証に用いる共通鍵は、通信の暗号化、復号に用いるセッション鍵と同様に、セッション開始時にディフィー・ヘルマン鍵共有によって生成された共有秘密からハッシュ関数によって生成される。実際に通信が始まったら、SSHプログラムは受信したパケットを復号したあと、MACと計算値を比較することでデータの完全性を検証している。[5]
例
脚注^ ⇒IEEE 802.11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications ((2007 revision) ed.). IEEE-SA. (12 June 2007). doi:10.1109/IEEESTD.2007.373646
^ ⇒Fred B Schneider, Hashes and Message Digests, Cornell University
^ ⇒“VMAC: Message Authentication Code using Universal Hashing”. CFRG Working Group. ⇒http://www.fastcrypto.org/vmac/draft-krovetz-vmac-01.txt 2010年3月16日閲覧。.
^ Simmons, Gustavus (1985). “Authentication theory/coding theory”. Advances in Cryptology: Proceedings of CRYPTO 84. Berlin: Springer. pp. 411?431
^ “ ⇒rfc4251”. 2011年10月1日閲覧。 “ ⇒rfc4253”. 2011年10月1日閲覧。
関連項目
チェックサム
HMAC
認証付き暗号 (AEAD)
外部リンク
RSA FAQ's entry on MACs
⇒Ron Rivest lecture on MACs
表
話
編
歴
暗号学的ハッシュ関数とメッセージ認証コード
セキュリティ要約(英語版)
一般的関数
MD5
SHA-1
SHA-2
SHA-3/Keccak
SHA-3最終候補(英語版)
BLAKE
Grostl(英語版)
JH(英語版)
Skein(英語版)
Keccak (勝者)
その他の関数
FSB(英語版)
ECOH(英語版)
GOST(英語版)
HAS-160(英語版)
HAVAL(英語版)
Kupyna(英語版)
LMハッシュ
MDC-2(英語版)
MD2
MD4
MD6(英語版)
N-Hash(英語版)
RadioGatun
RIPEMD
SipHash(英語版)