メッセージ認証符号

メッセージ認証コード(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と計算値を比較することでデータの完全性を検証します。

脚注




関連項目




外部リンク



もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。