この記事では『ハッシュ関数』について、
- ハッシュ関数とは
- ハッシュ関数の特徴
- ハッシュ関数の用途
などを図を用いて分かりやすく説明するように心掛けています。ご参考になれば幸いです。
ハッシュ関数とは
ハッシュ関数(Hash Function)は、任意の長さの入力データ(文字列やファイルなど)を受け取り、固定長の出力値(ハッシュ値)を生成する関数です。例えば、ハッシュ関数のSHA-256は任意の長さの入力データを受け取り、256ビット(16進数では64桁)のハッシュ値を生成します。
ハッシュ関数の関連用語
- ハッシュ値
- ハッシュ値は、ハッシュ関数を通じて生成される固定長の出力値です。
- ハッシュ化
- ハッシュ化とは、データをハッシュ関数に入力してハッシュ値を得るプロセスです。
ではこれから、ハッシュ関数の「特徴」と「用途」について順番に説明します。
あわせて読みたい
ハッシュ関数の「SHA-256」については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。 続きを見るSHA-256とは?「特徴」や「読み方」などを解説【ハッシュ関数】
ハッシュ関数の特徴
ハッシュ関数には以下の特徴があります。
ハッシュ関数の特徴
- 同じ入力に対しては常に同じ値を出力し、入力がわずかに異なると、全く異なる値を出力する
- 衝突の可能性が極めて低い
- ハッシュ値から元の入力値を推測することが困難
ではこれらの特徴について順番に説明します。
同じ入力に対しては常に同じ値を出力し、入力がわずかに異なると、全く異なる値を出力する
ハッシュ関数は、同じ入力データに対しては常に同じハッシュ値を出力しますが、入力データがわずかに異なると、全く異なるハッシュ値が出力される特徴を持っています。
例えば、「SHA-256」と呼ばれるハッシュ関数で「ABCD」という文字列と「ABCE」という文字列のハッシュ値を計算した結果を上図に示します。元の文字列は1カ所しか違いませんが、ハッシュ値は大きく異なっていることが分かります。この性質により、ハッシュ関数は、データの整合性確認やパスワードの保存など、様々なセキュリティ上の用途に使用されます。
衝突の可能性が極めて低い
異なる入力データに対して、同じハッシュ値が出力される現象を「衝突」といいます。
ハッシュ関数はこの衝突が起こる可能性が極めて低いことが特徴です。
ここで注意していただきたいのが、衝突する可能性が「ゼロ」ではなく、「極めて低い」ということです。ハッシュ関数は無限ともいえる入力データを有限のハッシュ値に変換しているので、理論的には、ハッシュ値が衝突する可能性はゼロではありません。例えば、SHA-256は256ビットのハッシュ値を出力するため、2^256通りのハッシュ値しか生成できません。しかし、入力データの組み合わせはこれをはるかに超える可能性があるため、ハッシュ値が衝突することは理論的には起こり得ます。
しかし、良好なハッシュ関数を使用することでハッシュ値が衝突する可能性は非常に低くなります。
ハッシュ値から元の入力値を推測することが困難
ハッシュ値から元の入力データを逆算することが困難です。これをハッシュ関数の「一方向性」といいます。
ハッシュ関数の一方向性とは
ハッシュ関数に入力を与えてハッシュ値を計算するのは容易であるが、そのハッシュ値から元の入力データを復元するのが計算上極めて困難であるという性質のこと。
ハッシュ関数の用途
ハッシュ関数は様々な用途に使用されています。以下にハッシュ関数を利用している用途の一部を紹介します。
パスワードの保存
ハッシュ関数はアカウント情報(ユーザーIDとパスワード)を安全に保存するのに応用できます。
ユーザーIDに対するパスワードをそのままデータベースに保存している場合、SQLインジェクションなどでデータベースの内容が盗まれると、非常に危険です。そこで、例えば、ユーザーIDとパスワードを結合した文字列のハッシュ値を保存するようにします。
このようにすれば、万が一データベースの内容が盗まれたとしても、ハッシュ値からパスワードを推測することが非常に困難になります。
例えば、ログイン時には、ログイン画面で入力されたユーザーIDとパスワードを結合した文字列のハッシュ値を計算し、それをデータベースに記録されたものと比較します。ハッシュ関数の特徴により、入力されたパスワードが異なれば、ハッシュ値も異なるので、ハッシュ値同士を比較すれば、入力されたパスワードが正しいかどうかを判定することができます。
情報改ざんの発見
あるファイルをインターネット経由で送受信する場合、送信者がファイル全体のハッシュ値を生成し、そのハッシュ値をファイルとは別に受信者に伝えておきます。受信者はファイルを受け取ったときにハッシュ値を計算し、あらかじめ受け取っていたハッシュ値と同じであるかを比較します。
もしも、第三者が途中でファイルを改ざんした場合、ハッシュ値が異なるのですぐに改ざんされたことが分かります。
どんなに大きなファイルでもハッシュ値は数十桁の数字なので、ファイルを比較するのが簡単です。
なお、ファイルの改ざんだけでなく、転送中のエラーやデータの損失も、ハッシュ値の不一致を通じて検出することができます。
本記事のまとめ
この記事では『ハッシュ関数』について、以下の内容を説明しました。
- ハッシュ関数とは
- ハッシュ関数の特徴
- ハッシュ関数の用途
お読み頂きありがとうございました。