「MAC(Message Authentication Code)」とは、文字通りメッセージ(=文書)を「認証」するための短い情報である。和名は「メッセージ認証符号」。
「MAC(Message Authentication Code)」とは、文字通りメッセージ(=文書)を「認証」するための短い情報である。和名は「メッセージ認証符号」。
ここでいう「認証」とは、メッセージが改ざんされてないことを確認することである。つまり、受信者が受信したメッセージを「認証」するときに、当該メッセージが送信後に変化していないこと(完全性)を保証する。
下図は送信者を「Alice」、受信者を「Bob」として、MACによるメッセージ認証を示したものであり、図中の番号は説明中の番号と対応する。
(1)前準備
MACでは、事前に送信者と受信者が「共通鍵」を共有する。
(2)MAC生成とメッセージ送信
送信者はメッセージを用意する(2-1)。次に、メッセージと共通鍵を「MACアルゴリズム」に通し、MACを得る(2-2)。
MACアルゴリズムとは、鍵とメッセージを基にMACを計算するようなアルゴリズムのことだ。そのようなアルゴリズムとして、ハッシュ関数を用いる「HMAC(Hash-based Message Authentication Code)」、ブロック暗号を用いる「AES-CMAC(Advanced Encryption Standard - Cipher-based Message Authentication Code)」などがある。
最後に、送信者はメッセージとMACを一緒にして受信者に送信する(2-3)。
(3)メッセージ受信とMAC検証
受信者はメッセージを受信すると、送信者と同様にMACを計算する(3-1)。受信者が計算したMACと送信者から受け取ったMACが一致したとき、受信者は「メッセージは第三者(攻撃者)により改ざんされてない」と判断する(3-2)。逆に、一致しないときは、「メッセージは改ざんされた」と判断する(3-3)。
MACを活用する上での注意点は、共有鍵を用いるため、メッセージの作成者の正当性を保証しない(否認防止にならない)ことである。
例えば、送信者があるメッセージを送ったことを第三者(検証者)に証明する場合を考えてみる。そのメッセージのMACを認証するには、送信者と受信者が共有している鍵が必要である。
これは、その鍵を検証のために受け取った検証者から見ると、そのMACを付けたのは送信者または受信者のどちらなのかを決定できないことを意味する(第三者に対する認証が実現していないということ)。つまり、受信者がそのメッセージを送った、という“うそ”も通ることになる。
逆に、送信者は「自分がそのメッセージを送っていない」と否認することも可能である。従って、冒頭で述べた通り、MACはメッセージの「完全性だけ」を保証し、それを認証する手段を提供するものであることを覚えておく必要がある。
なお、第三者に対する認証を可能にしつつ、否認防止を実現する方式として、本用語集で解説している「電子署名」がある。電子署名の方式として有力なデジタル署名では、公開鍵暗号を用いるため、公開鍵が信用できない状況では、本用語集で解説している「PKI」を利用するとよい。
【2004/1/1】初版公開。
【2019/2/25】最新情報に合わせて内容を書き直しました(セキュリティ・キャンプ実施協議会 著)。
Copyright © ITmedia, Inc. All Rights Reserved.