ペッパー(pepper)は、パスワードの保存処理へ追加する秘密の値です。ソルトと併用し、ハッシュ値を保存するデータベースだけが漏洩した場合への防御を重ねます。値は安全な乱数で生成し、秘密として管理します。
ソルトとの違いを整理
| 項目 | ソルト | ペッパー |
|---|---|---|
| 主な使い方 | パスワードごとに個別の値 | 複数のパスワードに共通する秘密値 |
| 秘密性 | 秘密でなくてよい | 秘密であることが重要 |
| 保管場所 | 通常はハッシュ値と一緒 | ハッシュ値のDBとは別に管理 |
個別の値で事前計算表の使い回しを難しくする仕組みは、ソルトの記事で確認できます。
DBと分離する理由
ハッシュ値・ソルトだけが漏洩し、ペッパーが漏洩していない状況を想定します。攻撃者は保存値の照合に必要な秘密を持たないため、推測が難しくなります。DBとペッパーの両方が侵害されれば、この追加の防御効果は失われます。
保管と計算方法
ペッパーは秘密管理サービスやHSMなどで管理し、ソースコードやハッシュ値と同じDBへ埋め込みません。単に「アプリの中に置けば安全」とは限らず、読み取り権限や漏洩経路を考えます。
計算前の入力へ秘密値を組み込む方式や、ハッシュ計算後に秘密鍵を使うHMACなどの方式があります。「必ず文字列の末尾に付ける」と限定せず、採用する方式・ライブラリに従います。
変更・漏洩時の運用も必要
ペッパーを変えると、以前の値で作った保存情報の扱いも変わります。元のパスワードを復元できないため、方式に応じて再ログイン時の移行やパスワード再設定などを計画します。ペッパーは、適切なパスワード保存方式やソルトの代わりにはなりません。
確認問題
ペッパーをパスワードハッシュと同じDBに保存した場合、DBだけの漏洩に対する追加防御は保てるでしょうか?
解答・解説を見る
保てません。ハッシュ値と秘密値が一緒に漏洩するためです。ペッパーはDBと分離して秘密管理し、ソルトや適切な保存方式と組み合わせます。
パスワード攻撃と対策をnoteで復習
関連noteではソルト・ハッシュ関数・パスワード攻撃を解説しています。ペッパーとの違いを理解した後に、土台となる用語と攻撃への対策を復習できます。
ほかの分野は資格・目的別のnote教材ナビから選べます。

コメント