メッセージ認証コード(MAC)とは
メッセージ
認証コード(MAC)は、メッセージの
認証を行うための短い情報です。MAC
アルゴリズムは、共通鍵と任意の長さのメッセージを入力として受け取り、MAC(タグとも呼ばれる)を出力します。このMACをメッセージに付加することで、共通鍵を持つ検証者はメッセージの内容が変更されていないかを検出し、メッセージの完全性と
認証を保証できます。このため、「メッセージ
認証完全性コード(MAIC)」とも呼ばれます。
セキュリティ
MAC関数は
暗号学的
ハッシュ関数に似ていますが、いくつかの重要な違いがあります。MAC関数は、選択平文攻撃に対して存在的偽造を防ぐ耐性が求められます。つまり、共通鍵を持つ攻撃者が、自由に選んだメッセージに対応するMACを神託機械から取得できたとしても、他のメッセージに対するMACを神託機械に問い合わせることなく計算で求めることが困難でなければなりません。
MACは
デジタル署名とは異なり、MAC値の生成と検証に同じ鍵(共通鍵)を使用します。そのため、送信者と受信者は通信前に鍵を共有しておく必要があります。また、
共通鍵暗号であるため、
認証されたメッセージが送信者本人によって作成されたものであるという確証(否認不可性)は得られません。これは、受信者も共通鍵を知っているため、メッセージを捏造し、そのMAC値を生成できてしまうからです。
一方、
公開鍵暗号を用いた
デジタル署名では、メッセージの検証を公開鍵だけで行うことができます。そのため、鍵の所有者は秘密鍵を秘匿でき、
デジタル署名が付与された文書は署名者本人によって作成されたものであると確定でき、否認不可な文書を作成することができます。
メッセージ完全性コード(MIC)
メッセージ
認証符号(MAC)の代わりに、特に通信分野で「メッセージ完全性コード(MIC)」という用語が、MACアドレスとの区別のため用いられることがあります。しかし、MICはメッセージを一意に識別するメッセージダイジェストの意味でも用いられるため、RFC4949では、MICという用語の代わりに、チェックサム、エラー検出符号、ハッシュ、鍵付きハッシュ、メッセージ
認証符号、protected checksumの使用が推奨されています。
実装
MAC
アルゴリズムは、他の
暗号プリミティブを組み合わせて構築できます。具体的には、
ハッシュ関数を用いる方式(HMAC)、
ブロック暗号アルゴリズムを用いる方式(OMAC/CMAC、CBC-MAC、PMAC)などがあります。また、Poly1305のような高速なMAC
アルゴリズムは、ユニバーサルハッシングを基盤としています。
One-time MAC
鍵付き
ハッシュ関数の一種であるユニバーサルハッシング、特にpairwise independentという性質を持つ
ハッシュ関数は、鍵を一度だけ使い捨てにするならば、安全なメッセージ
認証符号として利用できます。これは、
暗号化における
ワンタイムパッドのMAC版と考えることができます。
Pairwise independentとは、鍵`k`を知らない場合、あるメッセージ`m`のハッシュ値`hash_k(m)`が分かっても、別のメッセージ`m' (≠ m)`のハッシュ値`hash_k(m')`を推測できないという性質です。この性質を持つ
ハッシュ関数は、以下のように簡単に作成できます。
素数`p`に対して、鍵を`k=(a,b)`としたとき、メッセージ`m`のハッシュ値(MACにおけるタグ)は、
hash_k(m) = am + b mod p
で表されます。
例
応用例として、MACはSSH2において、トランスポート層のデータ一貫性を確保するために使用されています。MACの検証に用いられる共通鍵は、通信の
暗号化、復号に用いられるセッション鍵と同様に、セッション開始時に
ディフィー・ヘルマン鍵共有によって生成された共有秘密から
ハッシュ関数によって生成されます。実際に通信が開始されると、SSHプログラムは受信したパケットを復号した後、MACと計算値を比較することでデータの完全性を検証します。
脚注
関連項目
- - チェックサム
- - HMAC
- - 認証付き暗号 (AEAD)
外部リンク