Pepper
ペッパー(pepper)はパスワードハッシュ時に追加するサーバ側の秘密である。ソルトと異なり全体で共有され秘密に保たれ、オフライン攻撃の難度を高める。
目的
ソルトに加えてサーバの秘密を上乗せし、データベース漏洩だけではパスワードをオフラインで解読できないようにする。
メカニズム
H(password || salt || pepper)。ペッパーは全体で共有されるが秘密であり(設定ファイルやHSMに保存、データベースには置かない)、データベース漏洩時、ペッパーを持たない攻撃者はオフラインでハッシュ化できない。ソルトはユーザごとに一意のまま。ペッパーが漏洩すると保護はソルトのみの水準に低下する。
ユースケース
- 強化されたパスワードハッシュ
- データベース漏洩後の追加保護
- HSMでのペッパー保管
- コンプライアンス要件
例
- 入力
H(pass + salt + pepper)OutputThe pepper is required for verificationPepper kept secret
よくあるエラー
- Storing the pepper in the database (the same one as the hashes)
- Keep the pepper in config/HSM, separate from the database
関連用語
Salt
ソルトとは、パスワードのハッシュ化時に加えるランダムな値のことで、同一パスワードでも異なるハッシュを生成させ、レインボーテーブルやパスワードの一致検出を無効化する。 用語集
Hash Salting
ハッシュソルティング(Hash Salting)は、ハッシュ入力にランダムなソルトを追加して、同じ入力でも異なるハッシュを生成させる手法である。レインボーテーブルと衝突検出を無効化する。 用語集
PBKDF2
PBKDF2(Password-Based Key Derivation Function 2)はPKCS#5で標準化されたKDFであり、HMACの反復によりパスワードから鍵を導出する。パスワードハッシュと鍵導出で広く使われる。 用語集