ハッシュ関数
ハッシュ関数 (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ビットのハッシュ値を生成するハッシュ関数です。