メッセージ認証コード(MAC)
チェック用のデータだよ
メッセージ認証の話で出てくるよ
共通鍵暗号方式やハッシュ関数を使って作るよ
「MAC」と表現された場合は「Message Authentication Code」の略だよ
簡単に書くよ
メッセージ認証コード(MAC)(読:メッセージニンショウコード 英:message authentication code)とは
データの やり取りにおいて「(送り手側では)送るデータをもとにして作ったチェック用のデータを一緒に送ってやる」→「(受け手側では)受け取ったデータをもとにして作ったチェック用のデータと、送られてきたチェック用のデータを比較して、一致するか確認する」をやることでデータがおかしくなってないかチェックするやり方……が、いくつか あるんだけど、その中でも「共通鍵暗号方式
(暗号化と復号に同じ鍵を使う暗号化のやり方)」と呼ばれるやり方を使ったり「ハッシュ関数
(入力されたデータをもとにして作った適当な値を返してくれる関数)」と呼ばれるやつを使ったりしてチェック用のデータを作るやり方を「メッセージ認証」と言うのね。それを踏まえて、メッセージ認証の話で出てくる「チェック用のデータ」のこと
です。
詳しく書くよ
最初に留意事項です。
「メッセージ認証」と言われて「あぁ、アレのことね」と分かる方は最後まで読む必要ありません。
メッセージ認証の話で出てくるチェック用のデータが「メッセージ認証コード」です。
ちなみに「Message Authentication Code(メッセージ・オーセンティケーション・コード)」を省略して「MAC」と表現されることも あります。
あるいは「メッセージ認証符号」と表現されることも あります。
気が向いたら、覚えてあげてください。
以上が「メッセージ認証」の意味を知っている人向けの説明です。
「メッセージ認証?それ何?おいしいの?」な人は、このまま読み進めてください。
予備知識を含め、用語の中身についてガッツリ説明します。

それでは、いってみましょう。
まずは予備知識として
・改ざん
・関数
・ハッシュ関数
・ハッシュ値
・暗号
・暗号化
・復号
・暗号鍵(鍵)
・暗号化方式
・共通鍵暗号方式
・メッセージ認証
について説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
改ざんは、ファイルの中身などを「こっそり書き換えちゃうこと」です。
例えば、ピヨ太君の作った苺ショートを こっそりミカンショートにしちゃうような行為を指します。
関数は「何かを入れると何かをやって何かを返してくれる、処理のまとまり」です。
一般的には、入力を受けて処理をやり、その結果として出力があります。
ついでなので書いておくと、関数に入れる値は「引数(ヒキスウ)」と言います。
関数から出てくる値は「戻り値」です。
ちょっと汚い話で恐縮ですが、人間は、ご飯を食べて、ウンチを出します。
人間が関数だと考えてください。
ご飯に相当するものが引数です。
ウンチに相当するものが戻り値になります。
ハッシュ関数は「入力に対応する適当な値(適当に見える値)を返してくれる関数」です。
例えば「愛媛みかん」を入れると「3」が返ってきます。
「青森りんご」を入れると「4」が返ってきます。
「栃木苺」を入れると「とちおとめ」が返ってきたりします。
何を入れると何が返ってくるか、入れたものからは分かりません。
返ってくるのは適当な値です。
ただし、同じものを入れれば、必ず同じ値が返ってきます。
「愛媛みかん」を入れると、必ず「3」が返ってきます。
何回入れても「3」が返ってきます。
1.適当な値が返ってくる
2.同じ入力に対しては同じ値が返ってくる
というのがハッシュ関数の特徴です。
※話を単純化するために「適当な値」という表現を使っていますが、実際には適当では ありません。入力されたデータを「特定のルールに沿って」ぐちゃぐちゃにした値が返ってきます。
ハッシュ値は「ハッシュ関数から返ってくる値(戻り値)」です。
入力されたデータをもとにして作られた適当な値(適当に見える値)です。
ハッシュ値には
1.ハッシュ値から元のデータを特定するのは、ほとんど無理
2.元のデータが同じなら生成されるハッシュ値も同じ
3.元のデータが変わると生成されるハッシュ値は(ガッツリと)変わる
といった特徴があります。
「元データ→ハッシュ値」は お手軽だけど「元データ←ハッシュ値」は すっごい大変だよ、ということです。
暗号は「ルールを知っている人しか意味を読み取れないようにするために、特定のルールに従って ぐちゃぐちゃに変換したデータ」です。
暗号は、そのまま見ても内容が分かりません。
パッと見では ぐちゃぐちゃになっているからです。
ルールを知っている人は、そのルールに沿って元の形に戻すことで内容を読み取れます。
暗号にすることで悪い人に盗み見られても大丈夫な気分になれます。
変換ルールを知らない人は書かれている内容を読み取れないからです。
データを暗号にすることを「暗号化」と言います。
暗号を元のデータに戻すのは「復号」です。
暗号化の逆ですね。
暗号鍵(鍵)は「暗号化したり、元に戻したり(復号)するときに使うデータ」です。
暗号化方式は「暗号化の やり方(方式)」です。
細かく見ていくと、ややこしかったりしますけどね。
今回は気にしないでください。
共通鍵暗号方式は「暗号化と復号に同じ鍵を使う暗号化方式」です。
例えば、そうですね。
ピヨ太君がピヨ子さんにデータを暗号化して送るとしましょう。
まずピヨ太君は自分の手元にある鍵を使ってデータを暗号化します。
次に、暗号化したデータをピヨ子さんに送ります。
ピヨ子さんはピヨ太君から暗号化されたデータを受け取りました。
自分の手元にある鍵を使ってデータを元に戻します。
ピヨ太君の手元にある鍵とピヨ子さんの手元にある鍵は同じものです。
このような
同じ鍵を使って暗号化や復号をするやり方
が共通鍵暗号方式です。
文字通り「共通の鍵を使ってやる暗号化の方式」ですね。
メッセージ認証は
1.送り手側で送るデータ(本体データ)をもとにしてチェック用のデータを作る
2.本体データとチェック用のデータを一緒に送ってやる
3.受け手側で受け取ったデータ(本体データ)をもとにしてチェック用のデータを作る
4.送られてきたチェック用のデータと受け手側で作ったチェック用のデータが一致するか判定する
ことでデータが改ざんされていないか確認するやり方……が、いくつか あるのですが、その中でも特に、チェック用のデータを作るときに共通鍵暗号方式やハッシュ関数を使う やり方です。
例えば、そうですね。
ピヨ太君がピヨ子さんにデータを送ることにしました。
まずピヨ太君は送るデータ(本体データ)を あれやこれやして、チェック用のデータを作ります。
次に、本体データとチェック用のデータをセットでピヨ子さんに送ってやります。
データを受け取ったピヨ子さんは、本体データを(ピヨ太君と同じやり方で)あれやこれやして、チェック用のデータを作ります。
最後に、ピヨ太君から送られてきたチェック用のデータとピヨ子さん自身が作ったチェック用のデータを見比べます。
ピヨ太君から送られてきたチェック用のデータとピヨ子さん自身が作ったチェック用のデータが一致すれば「多分、改ざんは されていないんじゃないかな」と判断できます。
もし一致しなければ「あれ?改ざんされてるっぽいな」と判断できます。
このようなやり方で、改ざんされていないかチェックする仕組みが、メッセージ認証です……と言いたいところなのですが、チェック用のデータを付けて送ってやることで改ざんされていないかチェックする仕組みは、メッセージ認証以外にも いろいろ あります。
例えば「デジタル署名」と呼ばれるものも、そのひとつです。
ただし、デジタル署名は、チェック用のデータを作るときに「公開鍵暗号方式」と呼ばれる仕組みを使います。
それに対してメッセージ認証は、共通鍵暗号方式やハッシュ関数を使ってチェック用のデータを作ります。
理屈や考え方は一緒だけど、やり方が違うわけです。
以上を踏まえて、上でも書きましたが
メッセージ認証の話で出てくるチェック用のデータ
が「メッセージ認証コード」です。
「MAC」と表現されることも あります。
「MAC」と表現された場合は「Message Authentication Code(メッセージ・オーセンティケーション・コード)」の略です。
気が向いたら、覚えてあげてください。
※「Message Authentication Code」を何となく日本語にすると「メッセージ認証コード」となります。[詳細]
一言でまとめるよ
まぁ「メッセージ認証コード」って単語が出てきたら「データが改ざんされていないかチェックするためのデータなんだな~」と お考えください。
おまけ
■訳してみるよ
「message(メッセージ)」の意味は「伝言」とか「伝達」とか「連絡」とかです。
「認証」は日本語ですね。
「code(コード)」の意味は「記号」とか「暗号」とか「符号」とか「コード」とかです。
何となく くっつけると
伝言の認証の記号
となります。
■検索してみる?






