ハッシュ値

数値や文字列のデータをハッシュ関数によって一定の長さに変換した値。

ハッシュ関数とは擬似乱数を生成する一方向関数で、ハッシュ値の逆算や偽造は極めて困難とされる。

(※1)

ハッシュ値の主な特徴は次のとおりです。

  • 一方向性)ハッシュ値から元のデータを復元することは極めて困難
  • 衝突耐性)異なるデータから同じハッシュ値が生成される(衝突)可能性が非常に低い
  • 高速性)大きなデータでも短時間でハッシュ値を計算できる

ハッシュ値は次のような場面で広く利用されています。

  • データの改ざん検出)ファイルやメッセージのハッシュ値を比較することで、内容が変更されていないか確認できる
  • パスワード管理)パスワードをハッシュ化して保存することで、漏洩時のリスクを軽減
  • 電子署名)データの整合性や履歴の保証に利用される

代表的なハッシュ関数には、SHA-256、SHA-1、MD5などがあります。

例1: 短い文字列のハッシュ値
元のデータ(文字列): hello
この文字列をSHA-256でハッシュ化すると、以下のようなハッシュ値が得られます:
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
元の文字列が短くても、ハッシュ値は固定長(SHA-256では64文字)になります。
このハッシュ値は「hello」という文字列に特有のもので、他の文字列では異なる値になります。
例2: 異なるデータのハッシュ値
元のデータ(文字列):Hello(最初の文字が大文字)
この文字列をSHA-256でハッシュ化すると、以下のようなハッシュ値になります:
185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
先ほどの「hello」とは異なるハッシュ値になっています。
たった1文字の違いでも、ハッシュ値は大きく変わります。

ハッシュ値をもっと知る

ハッシュ値は、元データの内容を直接扱わずにデータの同一性や改ざん有無を確認できる点が大きな特徴です。そのため、電子署名やタイムスタンプでは、文書そのものではなくハッシュ値を対象に処理が行われます。
これにより、大容量データでも高速に処理でき、わずかな変更でも検知できる仕組みが実現されています。

よくある誤解・Q&A

Q1. ハッシュ化と暗号化はどのように違うのでしょうか?
A1. ハッシュ値はハッシュ関数による一方向関数による変換で、元のデータに戻すことはできません。暗号化は復号が可能です。
Q2. なぜ電子署名ではハッシュ値を使うのですか?
A2. 文書全体ではなくハッシュ値に電子署名することで、処理を高速化し、改ざん検出を確実に行うためです。
Q3. 異なるデータが同じハッシュ値になることはありますか?
A3. 理論上はありえます。入力データの種類や長さは無限である一方、ハッシュ値の長さは有限なため、異なるデータが同じハッシュ値を持つ可能性はゼロではありません。
ただし、現代のハッシュ関数(例:SHA-256)は、このような現象が発生しにくいよう設計されており、実用上はほとんど問題になることはありません。安全性を確保するためには、十分な長さを持つハッシュ関数を選ぶことが重要です。SHA-256などでは実用上問題となる確率は極めて低いとされています。

関連用語

関連記事

引用元・参考文献

  1. 出典:用語集 電子認証局会議

    https://www.c-a-c.jp/vocabulary.html