✨ パスワードをそのまま保存するとなぜ危険か
もし「パスワード = 123456」と登録したら、サービスのデータベースに「123456」と保存されるとします。このとき何が起きるでしょうか。
😱 データベース流出が起きた場合…
- 攻撃者が全ユーザーのパスワードを平文でそのまま入手できる
- そのパスワードを別のサービス(メール・銀行・SNS等)で試される(パスワードの使い回し被害)
- 2024年のあるサービス流出では数億件のパスワードが漏洩したケースもあった
だからこそ、信頼できるサービスはパスワードそのものではなく、ハッシュ値を保存しています。
🔸 ハッシュ関数とは?「一方向の変換機」
ハッシュ関数は、任意の長さのデータを固定長の文字列(ハッシュ値・ダイジェスト)に変換する関数です。重要な性質は「一方向性」——ハッシュ値から元のデータを復元するのは事実上不可能です。
SHA-256によるハッシュ例:
"password" → 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
"Password" → 8be3c943b1609fffbfc51aad666d0a04adf83c9d29d5f88ab5c33e3e9c2b7c6d
※大文字小文字1文字違うだけで全く異なるハッシュ値になる(雪崩効果)
ハッシュ関数の3つの重要な性質
- 一方向性:ハッシュ値から元データを計算で復元できない
- 衝突困難性:同じハッシュ値になる別のデータを見つけるのが非常に困難
- 雪崩効果:入力が1ビットでも変わると、出力が大幅に変わる
🔸 パスワードハッシュ化の流れ
📝 登録時
- ユーザーが「mypassword123」を入力
- サーバーがハッシュ化:SHA-256等でハッシュ値を計算
- データベースにハッシュ値だけを保存(元のパスワードは保存しない)
🔓 ログイン時
- ユーザーが「mypassword123」を入力
- サーバーが同じ方法でハッシュ値を計算
- 保存済みのハッシュ値と比較。一致すれば認証成功

「パスワードを忘れた」でメールに元のパスワードが届いたら危ないってこと?

大正解!元のパスワードがメールで届くサービスは、パスワードを平文(またはそれに近い形)で保存している証拠ね。信頼できるサービスは「パスワードリセットのURL」を送るだけで、元のパスワードは絶対に送ってこないよ🐾
🔸 単純なハッシュではまだ危ない:レインボーテーブル攻撃
「パスワード → ハッシュ」だけでは、まだ攻撃手段があります。それがレインボーテーブル攻撃です。
多くの人が使うパスワード(「password」「123456」など)のハッシュ値は事前に計算しておける。データベースが流出したとき、ハッシュ値を逆引きして元のパスワードを知ることができてしまいます。
解決策:「ソルト」の追加
ソルト(Salt)とは、各ユーザーのパスワードにランダムな文字列を付け加えてからハッシュ化する仕組みです:
【ソルトなし】 Hash("password") → 同じハッシュ値 → レインボーテーブルで逆引き可能
【ソルトあり】 Hash("password" + "ランダム文字列abc") → ユーザーごとに異なるハッシュ値 → レインボーテーブルが無効化
現在推奨されるパスワードハッシュ方式
| 方式 | 推奨度 | 特徴 |
|---|---|---|
| Argon2id | ✅ 最推奨 | 2015年のPassword Hashing Competition優勝。メモリ・CPU・並列度を調整可能。現在の最高標準 |
| bcrypt | ✅ 推奨 | 1999年から使われる実績ある方式。コスト係数で難易度調整可。多くのフレームワークで標準採用 |
| scrypt | ✅ 推奨 | メモリ大量消費でGPUによる攻撃を困難に。ビットコインの採掘プルーフにも採用 |
| SHA-256(単純) | ⚠ 不十分 | パスワード保存には不向き(高速すぎるため総当たり攻撃に弱い)。データ整合性検証用 |
| MD5・SHA-1 | ❌ 廃止 | 衝突が発見済み。パスワード保存に絶対使用不可 |
🔸 あなたのパスワード、今すぐ確認を!
理論を学んだあとは、自分のパスワードも見直してみましょう:
✅ 安全なパスワードの作り方
- 長さ12文字以上(16文字以上が理想)
- 大文字・小文字・数字・記号を混在
- サービスごとに異なるパスワード(使い回し絶対NG)
- パスワードマネージャー(Bitwarden・1Password等)の利用を推奨
- 2段階認証(2FA)を必ず有効にする
📌 まとめ
- 安全なサービスはパスワードをそのまま保存せず、ハッシュ値を保存する
- ハッシュ関数は「一方向」——ハッシュ値から元のパスワードは計算で取り出せない
- 単純なハッシュ化だけではレインボーテーブル攻撃が有効。ソルトが必須
- 現在推奨のパスワードハッシュ方式はArgon2id・bcrypt・scrypt
- 「パスワード忘れたら元のパスワードが届く」サービスは危険なサイン
- ユーザーとしてはパスワードマネージャー+2FAで自衛を