漏えい、改ざんなどの検知を目的に、任意のデータを不可逆的に短く変換した値のこと
ハッシュ値は元データから特定のアルゴリズムによって生成される不規則な文字列のこと。元データを短い固定長のデータで表現したものともみなせるため、要約値・ダイジェスト値と呼ばれることもある。ハッシュ値を得るために用いるアルゴリズムがハッシュ関数となる。
ハッシュ値の特徴として、不可逆であること、すなわち元データを復元するのが不可能、あるいは非常に困難な点が挙げられる。そして、元データと用いるアルゴリズムが同じであれば、同じハッシュ値が得られる点も特徴の1つである。入力される元データの値の長さに依存せず、ハッシュ値の長さは一定となる。一方で、異なる入力値から同じハッシュ値が生じないように、ハッシュ関数は設計されている。
これまで、ハッシュ関数としては、MD5、SHA-1、SHA-2、SHA-3などの規格が開発されている。それぞれ得られるハッシュ値の長さや、ハッシュ値を計算するためのアルゴリズムが異なっており、その用途に応じて最適な規格が選択される。
ハッシュ値の用途
ハッシュ値はその特徴を活かし、主に改ざん検知をはじめ、さまざまな場面で用いられている。例えば、電子署名やメール、添付ファイル、無線LAN通信といった用途で、その内容をハッシュ値へと変換した上で、同一性を検証し、改ざんされていないことを担保している。近年注目が集まっているブロックチェーン技術においても、記録されたデータの整合性を検証するためにハッシュ値が用いられている。
ハッシュ値は大量のデータから特定の項目を検索する用途でも用いられる。元データから得られたハッシュ値を検索キーとしたハッシュテーブルを生成することで、高速な検索を実現する。
また、パスワードをデータベースに保存する際に、ハッシュ値に変換しているケースも多い。正しいパスワードが入力されれば同じハッシュ値が得られるだけでなく、仮に漏えいした場合でも、元のパスワードの文字列が割り出されるリスクを軽減できるメリットがあるためだ。
ただし、ハッシュ値に変換すれば完全にパスワードが保護されるわけではない。例えば、総当たり攻撃を用いることで、パスワードが解読されるリスクがあるだけでなく、元データとハッシュ値の対応表でハッシュ値を検索して対応する元データを導き出す「レインボーテーブル攻撃」も知られている。
こうした攻撃を防ぐために、元データに文字列を付加してハッシュ化する「ソルト」処理や、ハッシュ化を複数回施す「ストレッチング」処理を用いてデータを保護する対策も講じられている。