ハッシュとは?

ある入力値から、特殊な計算方法によって、その入力値の代わりになる値を得ることをハッシュ計算と呼び、得られた値をハッシュ値と呼ぶ。

利用方法としては、文章(またはデータ)の同一性をチェックする際に便利なことが挙げられる。

たとえば、100文字の文章があったとして、その文章から得られるハッシュ値は、f56f 4hgm g5df 3sdeであるとすると、その計算の過程は、数学でいう関数になるが、入力される文章が全く同じであれば、同じ出力結果(同じハッシュ値)となり、1文字でも違う部分があれば、全く異なるハッシュ値(例えば、751a 823c d1c6 915f)が出力される。

そのため、その100文字のメールを受け取った人は、同じ関数で計算した場合、その出力結果がf56f 4hgm g5df 3sdeであれば、途中で改ざんされていないことが確認できる。

理論的には、f56f 4hgm g5df 3sdeの出力結果を持つ他の文章が存在する可能性もあるが、f56f 4hgm g5df 3sdeから逆算して文章を作成することはできないため、それを見つけようとするのは非常に時間と費用がかかり、面倒な作業となる。

ハッシュ計算特有の呼び方

入力値をメッセージ、出力値(ハッシュ値)をダイジェストと呼ぶことがある。

特徴

理想的な暗号ハッシュ関数には、5つの主な特性がある。

  1. 決定的アルゴリズム(入力値が同じであれば、出力値も常に同じとなる計算方法)なので、同じメッセージが常に同じハッシュになる
  2. 任意のメッセージのハッシュ値を短時間で計算することができる
  3. すべての可能なメッセージを試す以外は(このやり方をブルートフォースという)、そのハッシュ値からメッセージを生成することは実行不可能である
  4. メッセージに対する小さな変更は、新しいハッシュ値と古いハッシュ値に関連性がないように見えるほど、ハッシュ値が大きく変化する
  5. 同じハッシュ値を持つ2つの異なるメッセージを見つけることは不可能である
左の水色の部分がメッセージ、黄色の部分がハッシュ関数、ピンクがハッシュ値

どこで使われているのか?

代表的なものは、デジタル署名、メッセージ認証などで、例えば、ブラウザとサーバー間の通信やメールを使用する際のSSL通信において使用されている。

また、データベースの高速化技術などのために使われている。

コンピュータが、仮にテキストファイルが100万個あるとして、その中から、ある特定のファイルに対して全く同じ内容のものがいくつあるのかをチェックする際、予めハッシュ値を作っておけば、非常に高速に処理ができる。