データを別の値に変換

ハッシュ関数とは、入力されたデータを別の値、固定長のビット列に変換する関数のことです。ハッシュ関数により出力された値をハッシュ値といいます。

ハッシュ関数

ハッシュ関数は主に データの管理・探索などでの用途とセキュリティでの用途があります。セキュリティで使われるハッシュ関数は 暗号学的ハッシュ関数ともいわれます。

ハッシュ法

プログラムなどでデータを効率的に格納し管理する方法に、ハッシュテーブルを用いたハッシュ法があります。

データの挿入・削除・探索が高速であることから、プログラミングで使われることがあります。

ハッシュ法

データはハッシュ関数によりハッシュ値を出力します。ハッシュ値はハッシュテーブルの索引のような番号である添字にあたり、そこにデータは格納されます。

データによっては、ハッシュ関数で同じハッシュ値を出力し格納場所が重なることがあります。これを衝突といいます。このような衝突を防ぐために、ハッシュ関数に工夫が施されるのが一般的です。

プログラムに実装されるハッシュ関数というのは、データの管理が主要な目的であるため、それほど複雑な関数になることはありません。

暗号学的ハッシュ関数

セキュリティで使われるハッシュ関数は、暗号学的ハッシュ関数とよばれます。データを異なる別の数値、ビット列に変換します。

コンピューターでのパスワードの保存、改ざんを検知する電子著名などで使われています。電子著名でのハッシュ値は 要約という意味でメッセージダイジェストといいます。

セキュリティにおける機密性や完全性を保証するのが主要な目的であるため、複雑で難解な関数になります。代表的なハッシュ関数に、MD5SHAがあります。SHAは、SHA-1、SHA-2があり、SHA-2にSHA-256、SHA-512などがあります。

SHAのハッシュ値

コンピューター上では0~Fの16進数で表示されますが、コンピューター内部では16進数の桁数×4のビット数となります。MD5は128ビット、SHA-1は160ビット、SHA-256は256ビットなど固定長のビット列を出力します。

暗号学的ハッシュ関数は、データの一部が変更になると ハッシュ値も大きく変化します。この性質が特に改ざんの検知に使われています。

また、ハッシュ値からもとデータを復元することができない 一方向性、ハッシュ値が同じであっても2つのデータの組を推測できない 衝突困難性などの特徴があります。