メッセージ認証コード
メッセージ認証コード(Message Authentication Code)について
メッセージ認証とは
メッセージ認証とは、送付されたデータ(メッセージ)に改ざんがないことを確認する技術です。
また、送付されたデータが正しい送信者からものであることを確認して、第三者のなりすましを検出することに用いられます。
メッセージ認証はデータの完全性(integrity)を保証する技術です。
メッセージ認証コード(Message Authentication Code:MAC)とは
メッセージ認証コードとは、データ改ざんの有無を検知するための固定長コード(ビット列)です。
出力値(MAC値)を作成する際に、元データだけでなく送信者と受信者のみが共有する鍵を加えるという特徴があります。
メッセージ認証コードの実現方法として、ハッシュ関数を使う方法やブロック暗号を使う方法などがあります。
また、メッセージ認証コードはIPsecやSSL/TLSなど通信内容の認証と正真性のチェックが必要な通信で利用されています。
MACの仕組み
送信者は「データと共有鍵」からMAC値を生成し、データとMAC値を送付します。
共有鍵をもっていない第三者が「改ざんデータ+不正な鍵」を用いてMAC値を生成したとしても、受信者が「改ざんデータ+共有鍵」を用いて生成したMAC値とは一致しないので、受信者はデータが改ざんされたことがわかります。
共有鍵をもっているのは送信者と受信者のみですから、受信者はこのデータが改ざんされていないことを確認できるとともに、正しい送信者から送られたものであるという認証も可能となります。
HMAC(Keyed Hashing for Message Authentication Code:鍵付きハッシュ関数)
HMACとは、ハッシュ関数を使ってメッセージ認証コードを実現する手法です。
HMACではSHA-1、MD5などいろいろなハッシュ関数を利用することができます。
ハッシュ関数はアルゴリズムが公開されているため、データ改竄後にハッシュ値も改竄すると、データが改竄されたことを検知できなくなる可能性があります。
ハッシュ計算時に、秘密鍵の値を加えることえ、ハッシュ値の改竄を防止する技術ことができます。
MAC(HMAC)作成の仕組み
MACは、一方向ハッシュ関数を利用して生成します。
一方向ハッシュ関数とは、任意の長さのメッセージを決められた長さのメッセージに圧縮する技術のことを言います。
一方向ハッシュ関数で圧縮されたメッセージから、元のメッセージに復元することは事実上不可能となります。
MACの作成処理は以下の流れとなります。
処理1
まず、以下の情報を用意します。
認証キー | 送信者と受信者が共有する暗号鍵(64 Bytes) |
ipad | 「0x36」を 64 回繰り返した文字列 |
opad | 「0x5C」 を 64 回繰り返した文字列 |
処理2
「認証キー」と「ipad」を排他的論理和した値と「送信メッセージ」を結合します。
そのデータをハッシュ関数に渡し、ハッシュ値(128 Bytes)を計算します。
ハッシュ値1 = (認証キー XOR ipad) + 送信メッセージ
処理3
「認証キー」と「opad」を排他的論理和した値と「処理2で得たハッシュ値」を結合します。
そのデータをハッシュ関数に渡し、ハッシュ値(128 Bytes)を計算します。
ハッシュ値2 = (認証キー XOR ipad) + ハッシュ値1
このハッシュ値2がMACとして利用されます。