ハッシュ値
任意の長さのデータを固定長の値に変換したもの。データの一意性検証や改ざん検知に使われる。
ハッシュ値とは、ハッシュ関数を用いて任意の長さのデータから生成される固定長の値です。同じ入力からは常に同じハッシュ値が得られる一方、ハッシュ値から元のデータを復元することは計算上極めて困難です。この一方向性がハッシュ関数の最大の特徴であり、セキュリティやデータ検証の基盤技術として広く利用されています。
代表的なハッシュアルゴリズムには MD5 (128 ビット出力)、SHA-1 (160 ビット)、SHA-256 (256 ビット)、SHA-3 などがあります。MD5 は 1991 年に設計され長年使われてきましたが、2004 年に衝突攻撃が実証されて以降、セキュリティ用途では非推奨となりました。SHA-1 も 2017 年に Google が実際の衝突を示し、現在では SHA-256 以上の使用が推奨されています。暗号技術入門の書籍でハッシュ関数の仕組みを体系的に学べます。
ハッシュ値の活用場面は多岐にわたります。パスワードの保存では、平文ではなくハッシュ値を保存することで、データベースが漏洩しても元のパスワードが直接露出するリスクを軽減できます。実務ではソルト (ランダムな文字列) を付加してからハッシュ化する手法が標準的で、bcrypt や Argon2 といった専用アルゴリズムが推奨されます。ファイルの整合性検証では、ダウンロードしたファイルのハッシュ値を公式サイトの値と比較することで、改ざんや破損を検出できます。
ブロックチェーン技術ではハッシュ値が中核的な役割を果たしています。各ブロックが前のブロックのハッシュ値を含むことでチェーン構造を形成し、過去のデータを改ざんすると後続のすべてのハッシュ値が変わるため、不正を検知できる仕組みになっています。Git のバージョン管理でも、コミットやファイルの識別に SHA-1 ハッシュが使われています。
ハッシュ値に関するよくある誤解として、「ハッシュ化は暗号化と同じ」というものがあります。暗号化は鍵を使って元のデータを復元できる可逆的な処理ですが、ハッシュ化は不可逆です。また、「ハッシュ値が同じなら元のデータも同じ」とは限りません。異なる入力から同じハッシュ値が生成される現象を衝突 (collision) と呼び、衝突耐性はハッシュアルゴリズムの安全性を評価する重要な指標です。セキュリティ実践の書籍も参考になります。
文字数カウントの観点では、ハッシュ値は常に固定長の 16 進数文字列として表現されます。MD5 なら 32 文字、SHA-256 なら 64 文字と、アルゴリズムによって出力の文字数が一意に決まります。入力データが 1 文字でも 1 GB のファイルでも、出力される文字数は変わりません。この固定長という性質は、データベースのカラム設計やログフォーマットの設計において、格納領域を事前に確定できるという実務上の利点をもたらします。