メッセージ認証符号

出典: フリー百科事典『ウィキペディア(Wikipedia)』

メッセージ認証コード(メッセージにんしょうコード、: Message Authentication CodeMAC)は、メッセージを認証するための短い情報である。MACアルゴリズムは、入力として共通鍵と認証すべき任意長のメッセージを受け取り、MAC(「タグ」とも呼ばれる)を出力する。MAC値は、(共通鍵をもつ)検証者がメッセージの内容の変化を検出できるようにして、メッセージの完全性を保護し、認証する。このため、メッセージ認証完全性コード(Message Authentication and Integrity Code、MAIC)とも呼ばれる。

セキュリティ[編集]

MAC関数は暗号学的ハッシュ関数に似ているが、いくつかの必要条件の違いがある。MAC関数は選択平文攻撃における存在的偽造に対して耐性がなければならない。つまり、共通鍵を持ちMAC関数を計算できる神託機械にアクセスできる攻撃者が、任意に選んだメッセージに対応するMACを取得できたとしても、他の(神託機械に問い合わせていない)メッセージに対するMACを神託機械に対して問い合わせずに計算で求めることが計算量的に困難でなければならない。

MACはデジタル署名とは異なり、MAC値の生成と検証には同じ鍵が使われるので(共通鍵暗号)、送信者と受信者は通信を行う前に鍵を共有しておく必要がある。また共通鍵暗号であるために、認証されたメッセージは送信者本人が作成した物であり偽造ではないという確証、つまり否認不可性をもたない。なぜなら、受信者も含め共通鍵を知っている者であれば捏造したメッセージについてもMAC値を生成することができるからである。

公開鍵暗号を用いたデジタル署名では、メッセージの検証を公開鍵だけで行うことができるので、鍵の所有者はデジタル署名を作成できる秘密鍵を秘匿できる。したがって、デジタル署名が付与された文書はその所有者が署名したものと確定でき、否認不可な文書を作成することができる。

メッセージ完全性コード[編集]

メッセージ完全性コード(Message Integrity Code, MIC)は、鍵を使わない点がMACとは異なる。MICとMACは同義に使われることがあるが、MICをメッセージ完全性の信頼できる標準として使うには、転送時に暗号化しなければならない。一方MACは共通鍵を使うので、暗号化しなくとも同程度の保証が可能である。あるメッセージにあるアルゴリズムを適用した場合、常に同じMICが生成される。一方、MACの場合はさらに共通鍵も同じでないと、同じMACにはならない。

実装[編集]

MACアルゴリズムは他の暗号プリミティブから構築でき、ハッシュ関数を使う方式(HMAC)、ブロック暗号アルゴリズムを使う方式(OMAC/CMACCBC-MACPMAC)などがある。 また、 Poly1305などの高速なMACアルゴリズムはuniversal hashing[1]をベースとしている。

One-time MAC[編集]

鍵付きハッシュ関数の一種であるuniversal hashing、特にpairwise independentという性質を持つハッシュ関数は、鍵を一回ごとに使い捨てにするならば、安全なメッセージ認証符号として使うことができる。これは、暗号化におけるワンタイムパッドのMAC版と考えることができる[2]

Pairwise independentという性質は、鍵 を知らないならば、ある のハッシュ値 が分かったとしても、別のメッセージ のハッシュ値 を推測できないという性質である。このような性質を持つハッシュ関数は、次のように簡単に作れる。素数 に対して鍵を としたとき、 メッセージ のハッシュ値(MACにおけるタグ)は、 である。

[編集]

MAC.svg

応用例として、MACはSSH2においてトランスポート層のデータ一貫性を確保するために使用されている。MACの検証に用いる共通鍵は、通信の暗号化、復号に用いるセッション鍵と同様に、セッション開始時にディフィー・ヘルマン鍵共有によって生成された共有秘密からハッシュ関数によって生成される。実際に通信が始まったら、SSHプログラムは受信したパケットを復号したあと、MACと計算値を比較することでデータの完全性を検証している。[3]

脚注[編集]

  1. ^ “VMAC: Message Authentication Code using Universal Hashing”. CFRG Working Group. http://www.fastcrypto.org/vmac/draft-krovetz-vmac-01.txt 2010年3月16日閲覧。. 
  2. ^ Simmons, Gustavus (1985). “Authentication theory/coding theory”. Advances in Cryptology: Proceedings of CRYPTO 84. Berlin: Springer. pp. 411–431 
  3. ^ rfc4251”. 2011年10月1日閲覧。 rfc4253”. 2011年10月1日閲覧。

関連項目[編集]

外部リンク[編集]