ハッシュ関数

ハッシュ関数 (hash function) とは

ハッシュ関数とは、データから一意となる代表数値を得る操作/処理のための関数です。

任意の長さの入力データから固定長のビット列「ハッシュ値」を出力します。

ハッシュ関数は認証方法として用いられ、「完全性/正真性(integrity)」を確認することができます。


例えば、データやファイルに対する認証を行う場合、データから一意となる値「認証コード」を生成して比較する方法が用いられます。

この一意となる認証コードの生成方法として、ハッシュ関数を利用します。

ハッシュ関数によって生成された認証コードは「ハッシュ値」といいます。

なお、一方向ハッシュ値は「メッセージダイジャスト(Message Digest)」や「フィンガープリント(fingerprint)」と呼ばれます。


ハッシュ値の特性

特徴としては以下が挙げられます。

  • ハッシュ値から入力データを逆算・推測できない一方向性であること。
  • 入力データに関係なく、ハッシュ値は必ず固定長となる。
  • 同一入力データからは同一ハッシュ値が出力される。
  • 同一ハッシュ値が偶然生成される可能性が極めて低いこと。

一方向性ハッシュ関数(One Way Hash Function)

ハッシュ関数とは、入力情報(メッセージ)から一意となる出力「ハッシュ値」を生成する処理です。

任意のメッセージから衝突(collision)が起こらない一意な値を生成することで、データの完全性を確認することができます。

なお、一方向性とは、メッセージからハッシュ値の生成ができても、ハッシュ値からメッセージの生成ができないことを意味します。


衝突

2つの異なるメッセージが同じハッシュ値になることを衝突といいます。

ハッシュ関数は、メッセージが1ビットでも変化すれば生成するハッシュ値が変化します。

衝突の発生が困難になる性質を「衝突耐性」といいます。

  • 弱衝突耐性とは、ハッシュ値からメッセージを発見することが困難となる性質です。
  • 強衝突耐性とは、ハッシュ値が一致する2つのメッセージを発見することが困難となる性質です。

ハッシュ関数について

MD4

Rivestが1990年に考案した128ビットのハッシュ値を生成するハッシュ関数です。

MD4はハッシュ値の衝突を発見する方法が考案されており、安全ではありません。

MD4の仕様はRFC1186(RFC1320)として公開されています。


MD5

Rivestが1991年に考案した128ビットのハッシュ値を生成するハッシュ関数です。

MD5に対する攻撃手法がいくつか発見されており、安全であるとはいえません。

MD5の仕様はRFC1321として公開されています。


SHA-1

NISTが1995年に考案した160ビットのハッシュ値を生成するハッシュ関数です。

SHA-1の欠点も見つかっていて、それを突いた不正や解読のリスクが指摘されいます。


SHA-2

NISTが2010年末を目安として、次世代のハッシュ関数として推奨したハッシュ関数です。

SHA-2のハッシュ値は、224ビット、256ビット、384ビット、512ビットと長く、SHA-1 より安全性が高いといえます。

それぞれビット長に合わせて、SHA-224、SHA-256、SHA-384、SHA-512 と呼ばれており、これらを総称してSHA-2といいます。


RIPEMD-160 (ライプエムディー)

RIPEMD-160は1996年にDobbertinらによって考案された160ビットのハッシュ値を生成するハッシュ関数です。


関連ページ