ハッシュ化と暗号化の違い(不可逆性・鍵の有無・用途比較)
セキュリティ 暗号化 ハッシュ 開発 基礎知識
セキュリティ基礎概念である「ハッシュ化(Hashing)」と「暗号化(Encryption)」の違い、および用途に応じた適切なアルゴリズムの選定ガイドです。
1. オンライン SHA ハッシュ計算ツール
入力されたテキストから SHA-256 / SHA-384 / SHA-512 のハッシュ値をブラウザ内で直接計算できます。
🛡️ この場でハッシュ値を生成する
※ 入力時に自動で計算されます
SHA-256
SHA-384
SHA-512
2. ハッシュ化 vs 暗号化 概念比較表
| 比較項目 | ハッシュ化 (Hashing) | 暗号化 (Encryption) |
|---|---|---|
| 可逆性 | 不可逆 (Irreversible) ハッシュ値から元のデータへ復元は原理的に不可 | 可逆 (Reversible) 正しい鍵(Key)があれば元のデータに復元可能 |
| 鍵 (Key) の有無 | 基本的に鍵なし(ソルトやHMACを除く) | 必須(共通鍵 AES、公開鍵 RSA/ECC) |
| 出力長 | 入力長に関わらず固定長(SHA-256なら256bit) | 元のデータ量に依存して可変 |
| 主な用途 | パスワードの保存、ファイルの改ざん検出、API署名 | 通信の暗号化 (HTTPS / TLS)、個人情報のデータベース保護 |
| 代表的アルゴリズム | SHA-256, SHA-512, bcrypt, Argon2id | AES-256-GCM, RSA, ChaCha20 |
3. なぜパスワード保存には「暗号化」ではなく「ハッシュ化」なのか?
もしデータベースにユーザーのパスワードを「暗号化」して保存した場合、万が一サーバーや暗号鍵(Secret Key)が流出すると、攻撃者によって登録ユーザー全員のパスワードが平文に復元されてしまいます。
一方、「ハッシュ化」して保存した場合、システム管理者を含め誰一人として元のパスワード文字列を計算で求めることはできません。ログイン時には、ユーザーが入力したパスワードを同じ関数でハッシュ化し、保存されているハッシュ値と一致するかどうかだけを照合するため安全です。
4. パスワード保存に「単純な SHA-256」を使ってはいけない理由
SHA-256 や MD5 などのハッシュ関数は高速に計算処理できるように設計されています。そのため、現代の GPU や ASIC を使用すると 1 秒間に数百億回の総当たり試行(ブルートフォース攻撃)やレインボーテーブル攻撃が可能となり、短期間で解読されてしまいます。
現代のパスワード保存における標準アルゴリズム
- Argon2id (PHC優勝・推奨標準): メモリ使用量と計算時間を柔軟に増やし、GPU/ASICによる並行解析を強力に阻止します。
- bcrypt: 内部にソルトとストレッチング(反復計算)を組み込んだ伝統的かつ堅牢な標準。