メッセージ認証コード(メッセージにんしょうコード、英: 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')} を推測できないという性質である。