【そると】

ソルト とは?

💡 パスワードにひと振りの塩で、セキュリティがぐっと強くなる
📌 このページのポイント
ソルト — パスワードハッシュの安全性向上 ソルトなし(危険) password123 ハッシュ ef92b778...(同じパスワード → 同じハッシュ) ソルトあり(安全) password123 + x8kQ2m ハッシュ a3f1c9d7...(ユニーク) password123 + pR7nW3 ハッシュ 7b2e4f0a...(ユニーク) 同じパスワードでもソルト(ランダム文字列)を加えると異なるハッシュになる レインボーテーブル攻撃への有効な対策
ソルトによるパスワードハッシュのイメージ
ひよこ ひよこ

パスワードに塩を振るってどういうこと?

ペンギン先生 ペンギン先生

パスワードをそのままハッシュ化すると、同じパスワードの人は同じハッシュ値になるよね。そこでハッシュ化する前にランダムな文字列、つまりソルトを付け加えるんだ。すると全員違うハッシュ値になる。

ひよこ ひよこ

同じパスワードでも違う値になるの?それはすごい!

ペンギン先生 ペンギン先生

たとえば『password123』にソルト『x8kQ』を付けて『password123x8kQ』をハッシュ化する。別のユーザーには『m2Rj』を付けるから、同じパスワードでもハッシュ値はまったく別物になるよ。

ひよこ ひよこ

でもソルトがバレたら意味ないんじゃ?

ペンギン先生 ペンギン先生

実はソルト自体は秘密じゃなくていいんだ。ソルトの目的は、あらかじめ計算しておいたハッシュ値の一覧表、いわゆるレインボーテーブルを使えなくすること。ユーザーごとにソルトが違えば、攻撃者は一人ずつ総当たりするしかなくなるからね。

ひよこ ひよこ

ソルトとペッパーって何が違うの?

ペンギン先生 ペンギン先生

ソルトはユーザーごとに違う公開値だけど、ペッパーはアプリケーション全体で共通の秘密値なんだ。ペッパーはデータベースには保存せずに環境変数や設定ファイルに置く。データベースが漏洩してもペッパーがないとハッシュを再計算できないから、追加の防御層になるよ。

ひよこ ひよこ

bcryptとかargon2を使えばソルトは自動で付くの?

ペンギン先生 ペンギン先生

そうなんだ。bcryptやargon2はソルトの生成と保存を自動でやってくれるから、開発者が自分でソルトを管理する必要がない。しかもこれらは意図的に計算を遅くしているから、総当たり攻撃にも強い。パスワードの保存にはbcryptかargon2を使うのが現代のベストプラクティスだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
ソルトは、パスワードをハッシュ化する前に追加するランダムなデータ。同じパスワードでも異なるハッシュ値になるため、事前計算型の攻撃に対する防御として非常に有効。
📖 おまけ:英語の意味
「Salt」 = 塩
💬 料理に塩をひと振り加えるように、パスワードにランダムデータを加えることからこの名前がついた
← 用語集にもどる