ハッシュ関数とは
ハッシュ関数とは、入力されたどのような長さのデータ(文字列やファイルなど)からでも、常に固定された長さの不規則な値(ハッシュ値)を計算して出力する数式や関数のことです。ハッシュ関数には、出力されたハッシュ値から元のデータを逆算することが極めて困難である「一方向性」や、少しでも元のデータが変わると全く異なるハッシュ値が出力される「衝突困難性」という特徴があります。これらを利用して、データの改ざん検知や、データベースにおけるパスワードの安全な保存などに利用されます。
具体例
Webサービスでユーザーが登録したパスワード「password123」をそのまま保存せず、ハッシュ関数に通して「e2fc5134…」のような意味不明な値に変換して保存します。ログイン時は、入力された文字のハッシュ値が一致するかどうかだけで判定します。
入力: "hello" --> [ハッシュ関数(SHA-256)] --> 2cf24dba5fb0a30e26e83b2ac5b9e29e...
入力: "hello!" --> [ハッシュ関数(SHA-256)] --> 4a2b16027170a498f3b0ac08a5482329...
(1文字「!」が増えるだけで、出力値は全く異なる値に変わる)
もう少し詳しく
ハッシュ関数には主に3つの重要な性質があります。1つ目は「一方向性」で、ハッシュ値から元の入力データを逆算することは事実上不可能です。2つ目は「衝突困難性」で、異なる2つの入力データから同じハッシュ値が生成されることは極めて起こりにくいという性質です。3つ目は「固定長出力」で、入力データがどれだけ長くても短くても、出力されるハッシュ値の長さは常に一定です。現在広く使われている代表的なアルゴリズムにSHA-256があり、以前主流だったMD5やSHA-1は衝突を発生させる攻撃手法が発見されたため、現在はセキュリティ用途では推奨されていません。
試験でのポイント
ハッシュ関数は「暗号化」ではなく、元に戻すこと(復号)を前提としない技術である点が重要な出題ポイントです。パスワードの安全な保存では、平文のまま保存せずハッシュ値に変換して保存し、さらに「ソルト」と呼ばれるランダムな文字列を加えることで、同じパスワードでも異なるハッシュ値になるようにする対策とあわせて出題されます。また、デジタル署名や改ざん検知の仕組みの前提知識としても頻出です。
関連する用語
ハッシュ関数を応用した「デジタル署名」、パスワードのハッシュ化に加える「ソルト」、代表的なアルゴリズムの「SHA-256」などがあります。