哈希とは

本文约需 2 分钟阅读

ハッシュ (Hash) とは、任意の長さのデータを固定長の値に変換する一方向関数です。 パスワードの保存において重要な役割を果たし、元のパスワードを復元できない形で 安全に保管するために使用されます。同じ入力からは常に同じハッシュ値が生成されますが、 ハッシュ値から元のデータを逆算することは計算上困難です。

ハッシュと暗号化の違い

ハッシュと暗号化は混同されやすい概念ですが、決定的な違いがあります。 暗号化は正しい鍵を使えば元のデータに復号できる双方向の変換です。 一方、ハッシュは元のデータに戻せない一方向の変換であり、復号という概念が 存在しません。パスワードの保存にはハッシュが適しています。サービス側が パスワードの平文を保持する必要がなく、データベースが漏洩しても 元のパスワードが直接露出しないためです。逆に、通信中のデータ保護には 暗号化が適しています。受信者がデータを読めなければ意味がないからです。

パスワード保存での活用

安全なシステムでは、パスワードを平文で保存せず、ハッシュ化した値を保存します。 ログイン時には入力されたパスワードをハッシュ化し、保存されたハッシュ値と比較します。 代表的なハッシュアルゴリズムには SHA-256 や bcrypt、Argon2 があります。 SHA-256 は高速ですがパスワード用途には速すぎるため、意図的に計算コストを 高くした bcrypt や Argon2 が推奨されます。2025 年時点では OWASP が Argon2id を最も推奨するパスワードハッシュアルゴリズムとして位置づけています。計算コストが高いほど、ブルートフォース攻撃に 対する耐性が向上します。暗号学とハッシュ関数の入門書 (Amazon)で基礎から学べます。

現場での使用例

「パスワード保存方式を MD5 から Argon2id に移行するプロジェクトを完了しました。 次回ログイン時に自動的に再ハッシュする仕組みを実装し、全ユーザーの移行を段階的に進めています。」

ハッシュ処理フロー

パスワード入力
ソルト付加
ハッシュ関数で変換
固定長ハッシュ値
DB に保存

実務での落とし穴と対策

単純なハッシュ化だけではレインボーテーブル攻撃に脆弱です。この対策としてソルト (ランダムデータ) を付加してから ハッシュ化する手法が標準的です。実務でよくある誤りは、MD5 や SHA-1 など 古いアルゴリズムをパスワードのハッシュ化に使用することです。これらは 高速すぎるため、GPU を使った攻撃で短時間に大量のハッシュを計算されてしまいます。 パスつく.com で生成した長くランダムなパスワードは、ハッシュ化された状態でも ブルートフォース攻撃に対して高い耐性を持ちます。セキュリティエンジニアリングの書籍 (Amazon)も参考になります。

相关术语