ファイルをダウンロードしたとき、配布元のページに「SHA-256: 9f86d0...」のような文字列が書かれていることがあります。これがハッシュ値です。本記事では、ハッシュ値の仕組みと用途、アルゴリズムの違い、注意点を解説します。
ハッシュ値は、データを入力すると計算される固定長の値です。どんなに大きなファイルでも、SHA-256ならハッシュ値は64桁の16進数になります。同じデータからは必ず同じ値が出るため、データが変わっていないかを確認する「指紋」として使えます。
特徴は次の2つです。
ハッシュ値を作る計算方法には、いくつかの種類があります。代表的なものは次のとおりです。
| 方式 | 出力の長さ | 現在の扱い |
|---|---|---|
| SHA-1 | 40桁 | 安全性に問題があり、新しい用途では非推奨 |
| SHA-256 | 64桁 | 現在の標準的な選択。広く推奨されている |
| SHA-512 | 128桁 | SHA-256より長い値が必要な場合に使う |
SHA-1は、2つの異なるファイルが同じハッシュ値になる「衝突」が、2017年に実際に作られたことで安全性の問題が明らかになりました。新しいシステムでは使わず、既存の互換性のためにだけ残すのが一般的です。
ハッシュ値は、元のデータに戻すことができません。これは暗号化との大きな違いです。暗号化は鍵を使って元に戻せる処理ですが、ハッシュは一方向の計算です。
このため、ハッシュは「データを隠す」目的には使えません。データが変わっていないことを確かめる目的で使うのが正しい使い方です。
「パスワードはハッシュにして保存する」という話は有名ですが、SHA-256などを単独で使うのは不十分です。ハッシュの計算は高速なため、攻撃者が候補のパスワードを大量に試して、ハッシュ値と照合できてしまいます。
実務では、パスワードごとに異なる「ソルト」を加え、計算に時間のかかる専用の方式(bcrypt、Argon2など)を使います。ハッシュ値の仕組みを理解したうえで、用途に応じて方式を選ぶことが大切です。
「hello」という文字列のSHA-256は、2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824になります。同じ文字列でも、末尾に改行を含めると値が変わります。計算結果が想定と違う場合は、入力に目に見えない改行や空白が入っていないか確認してください。
ハッシュ値は、データの指紋として、改ざんや破損を確認するために使われます。現在の標準的な選択はSHA-256で、SHA-1は非推奨です。ハッシュは暗号化ではなく、パスワードの保存には専用の方式を使う必要があります。
ハッシュ値の計算は、ハッシュ生成ツールから、テキストやファイルに対して行えます。ダウンロードファイルの確認方法はダウンロードファイルの改ざんを確認する方法で解説しています。