メッセージ認証コード(MAC:Message Authentication Cade)は、メッセージ(データ)を認証するための短い情報のことです。データの発行元の認証と、データの完全性について保証するためのデータです。つまり、データが本物で、誰かに不正に書き換えられていないか確認するためのデータのことです。

Message Authentication Code(メッセージ・オーセンティケーション・コード)を省略して「MAC」と表現されることもあります。

メッセージ認証は、

  1. 送信側で送るデータ(本体データ)を基にしてチェック用のデータを作成する
  2. 本体データとチェック用のデータを一緒に送信する
  3. 受信側で受け取ったデータ(本体データ)を基にしてチェック用のデータを作成する
  4. 送られてきたチェック用のデータと受信側で作ったチェック用のデータが一致するか判定する

上記のような手順で、データが改ざんされていないか確認する仕組みです。

さて、このやり方ですが、前回の記事で説明した「ディジタル署名」でも同じような改ざん確認手順を行っていました。それと何が違うのでしょうか。

ディジタル署名では、チェック用のデータを作成するときに「公開鍵暗号方式」の仕組みを使用しています。それに対して、メッセージ認証は、共通鍵暗号方式やハッシュ関数を使ってチェック用のデータを作成します。

やっていることの理屈や考え方は同じですが、実際のやり方が異なっているというわけです。

MACの種類

MACには主にHMACとCMACがあります。
どちらも予め共有したハッシュ関数もしくは共通鍵を使ってMACを生成します。データとMACを併せて送信し、受信者がデータとハッシュ関数もしくは共通鍵を基にMACを計算し、受信したMACと一致するかを確認します。秘密鍵やデータが送信者と受信者で同じでないと計算したMACは受信したMACと原則として一致しませんので、この確認によりデータの発行元の認証とデータの完全性を確認できます。

HMAC

HMAC(Keyed-Hashing for Message Authentication)は、ハッシュ関数に基づくMACです。SHA-2等のハッシュ関数を用います。
詳細はRFC2104(HMAC:Keyed-Hashing for message Authenticstion)を参照。

CMAC

CMAC(Cipher-hased Message Authentication Cade)は、共通鍵暗号の一つのブロック暗号に基づくMACです。AES等のブロック暗号を用います。
詳細はRFC4493(The AES-CMAC Alogorithm)を参照。