メッセージ認証

 インターネット上において第三者が通信途中の情報を変更することをデータの改ざんといいますが、このデータの改ざん防止をするための手段がメッセージ認証(Message Authentication)です。一般的なメッセージ認証では、何らかの計算によって算出した短いデータ(MAC値)を、メッセージ本文に添付して送信し、受信側では、届いたメッセージ本文から、送信側と同じような計算をして、MAC値を計算し、メッセージ本文に添付されたMAC値と比較して、一致すれば通信の途中で改ざんされていないと判断します。

 MAC値の算出にはハッシュ関数を使う場合、ブロック暗号(共通鍵方式)を使う場合、公開鍵暗号方式を使う場合などがあります。
 
 公開鍵暗号方式を使う場合は、改竄検知とともに送信者の確認(なりすまし検知)もできます。この方式は一般に、電子署名と呼ばれますので、電子署名の章をご覧ください。





 MAC値の算出にハッシュ関数を利用する場合を特にHMAC(Hash-based MAC)といいます。

 ハッシュ関数は、与えられた入力値から、規則性のない固定長の値を生成する演算手法です。出力値はハッシュ値と呼ばれます。


 ハッシュ関数には、同じ入力値からは同じ出力値が得られる性質があるとともに、異なる入力値からは全く違う出力値が得られるという性質があります。
 ハッシュ関数は、ハッシュ値から入力値を割り出すことはできないという性質を持っていなくてはなりません。この性質を持つためには、ハッシュ関数は一方向性関数でなくてはなりません。
 入力値がハッシュ値よりも長い場合には、複数の異なる入力値から同じハッシュ値が得られることがあります(ハッシュ値の衝突)が、もしそうだとしてもある入力値と同じハッシュ値になる別の入力値を見つけることは困難でなくてはなりません。



 ハッシュ関数を使う場合は、メッセージ本文をハッシュ関数に与えた出力(ハッシュ値)と、メッセージ本文を相手側に送信します。受信側でもメッセージ本文から、ハッシュ値を計算して、送られてきたハッシュ値と比較します。もし、通信の途中でメッセージが改ざんされているとすれば、受信者が算出したハッシュ値は、送られてきたハッシュ値と違うはずです。途中で改ざんがない場合は、ハッシュ値は一致しています。この方式ですと、途中で改ざんが行われたかどうかしか分かりませんが、メッセージ認証コード(Message Authentication Code、MAC)では、ハッシュ関数にメッセージ本文だけでなく、送信者と受信者が共有する共通鍵を入力します。ハッシュ関数にメッセージ本文と共通鍵を加えて出てきた出力をMAC値といいます。



 メッセージ本文と一緒に共有鍵をハッシュに入力できるのは、受信者と予め鍵を取り交わしている、送信者本人にしかできないことですので、MACを使うと本人確認をすることもできます(なりすましの防止)。この場合は電子署名とあまり変わらないようにも見えますが、電子署名の場合は、署名の検証は対応する公開鍵があれば誰にでもできますが、MACの場合は、この共有鍵を持つ人(通信相手)にしか署名の検証ができません。

 ハッシュ関数を使ったMACには、HMAC-MD5、HMAC-SHA1、HMAC-SHA2(SHA-224、SHA-256、SHA-384、SHA-512)などがあります。

種類 ダイジェスト長
(bits)
概要
MD5  128 RSA暗号の開発者であるロナルド・リベスト(Ronald Linn Rivest)が開発。MD4の後継。脆弱性が認められているので、総務省及び経済産業省による「電子政府推奨暗号リスト」から外されている。
SHA-1  160 (通称「シャーワン」)。アメリカ合衆国国家安全保障局(NSA)の設計。原理的には、MD4、MD5と同じ。1995年、米国標準技術局(NIST)によって米政府標準に採用された。脆弱性が発見されているため、米政府での利用はほぼ終了している(2010年)。NISTはSHA-2への移行を推奨している。
SHA-2
(SHA-224)
(SHA-256)
(SHA-384)
(SHA-512)

224
256
384
512 
アメリカ国家安全保障局(NSA)の開発。SHA-1の脆弱性を修正するためにダイジェスト長を長くし、更に様々な長さを選択できるようにした。ただ、技術的にはSHA-1と同じなので同様の弱点を持つとされる。米政府が特許を持つがロイヤリティフリー。

※MD5、SHA-1の脆弱性は、強衝突耐性に対する脆弱性です。ハッシュ関数は、ハッシュ値が同じとなるような2つの異なる入力(メッセージ)を見つけるのが困難という性質(強衝突耐性)を持たなくてはならないが、この強衝突耐性が実際に突破されています。

 MACアルゴリズムを、ブロック暗号を使って構築している方式にはOMAC/CMAC、CBC-MAC、PMACなどがあります。









更新記録

2016/06/28



























ページの先頭