ハッシュ関数は任意の大きさのデータを固定長の「指紋」に変えます。ファイルのダウンロード、パスワード保存、電子署名、重複排除など、あらゆる場面で使われています。しかし、今日でも安全に使えるハッシュ関数ばかりではありません。MD5・SHA-256・SHA-512 を比較し、正しい使い方を説明します。
ハッシュとは(何でないか)
暗号学的ハッシュは一方向関数です。出力から入力を復元することはできません。同じ入力は常に同じ出力を生み、1 文字変えるだけで結果は完全に変わります。だからこそ完全性チェックやパスワード保存に使われます——比較するのは指紋であって、元データではありません。
ハッシュは暗号化ではなく(鍵も復号もありません)、エンコードでもありません(Base64 のように誰でも復元できるもの)。
なぜ MD5 は破られたとされるのか
MD5 は 128 ビットのハッシュを生成し、かつて広く使われていました。問題は衝突——異なる入力が同じハッシュを生むことです。研究者は何年も前から MD5 の衝突を安価に作れており、MD5 はもはや完全性を保証できません。攻撃者が正規ファイルと同じ MD5 を持つ悪意あるファイルを作れてしまうのです。
このため、MD5(および古い SHA-1)はセキュリティ用途に使うべきではありません。実際、ブラウザ標準の Web Crypto API は MD5 を提供すらしていません。当サイトのハッシュ生成ツールも同じ理由で SHA-2 系のみに対応しています。
SHA-256 vs SHA-512
どちらも SHA-2 ファミリーに属し、今日では安全とされています。違いは:
- SHA-256 は 256 ビット(16 進 64 文字)のハッシュを生成します。最も広く使われ、優れた既定値です。
- SHA-512 は 512 ビット(16 進 128 文字)のハッシュを生成します。出力が長く、64 ビットハードウェアではむしろ速いこともあります。
大半の用途——ファイルのチェックサム、完全性チェック、一般的な指紋——では SHA-256 が妥当な既定値です。規格やプロトコルがより長いダイジェストを要求する場合に SHA-512 を選びます。
パスワードを保存する正しい方法
重要な点です:パスワードは単純なハッシュで保存すべきではありません。SHA-256 でも同様です。高速なハッシュは現代のハードウェアで総当たり攻撃されやすいためです。代わりに、意図的に遅く、ソルト付きのパスワード専用ハッシュアルゴリズム、すなわち bcrypt、scrypt、Argon2 を使います。これらはパスワードごとに固有のランダムなソルトと、調整可能な作業係数を加えて解読に抵抗します。
覚え方:
- ファイル完全性 / 指紋 → SHA-256(または SHA-512)。
- パスワード保存 → ソルト付きの bcrypt / scrypt / Argon2——裸の SHA ハッシュは決して使わない。
ダウンロードの検証
ハッシュのよくある正当な用途は、ダウンロードしたファイルが破損・改ざんされていないかの確認です。配布者がファイルの SHA-256 を掲載し、あなたは自分のコピーのハッシュを計算して比較します。一致すればファイルは無傷です。
当サイトの無料ハッシュ生成ツールなら、ブラウザで SHA-256・SHA-384・SHA-512 を計算できます。標準の Web Crypto API を使うため、入力は送信されません。