暗号
ペッパー
別称: サーバーサイド鍵, ペッパーシークレット
定義
ハッシュ計算前に各パスワードへ加算するサーバー側秘密で、データベースとは別の場所に保管し、ハッシュ流出後のオフライン解析を抑制する。
ペッパー(pepper)は、ハッシュ関数や KDF にパスワードを渡す前に、ユーザーごとのソルトに加えて適用されるアプリケーション共通の長い秘密(通常 32 バイト以上)です。ソルトと異なり、ペッパーは認証情報データベースの外側(設定ファイル、環境変数、HSM など)に保管されるため、ハッシュテーブルだけを入手した攻撃者がオフラインで容易に解析できないようにします。一般的な実装では、まずアプリ側で HMAC(pepper, password) を計算し、その結果を Argon2id に渡す方式や、KDF の入力に秘密素材としてペッパーを混ぜる方式が採られます。あくまで多層防御であり、強力な KDF、ソルト、レート制限の代替にはなりませんが、データベースのみが漏えいした際の解析コストを大きく引き上げます。
例
- アプリ側で HMAC-SHA-256(pepper, password) を計算し、その値を Argon2id でハッシュする。
- ペッパーを HSM に保管し、アプリが直接持ち出せないようにする。
関連用語
ソルト
ハッシュ計算前にパスワードへ付加する一意のランダム値で、レインボーテーブルを無効化し各ユーザーのハッシュを別物にする仕組み。
Argon2
2015 年の Password Hashing Competition で優勝し、RFC 9106 に標準化された、メモリ消費型の最新パスワードハッシュ関数兼 KDF。
鍵導出関数(KDF)
パスワードや共有秘密、マスター鍵などの秘密入力から、1 つまたは複数の強力な暗号鍵を導出する暗号関数。
HMAC
RFC 2104 と FIPS 198-1 で定義された、暗号学的ハッシュ関数を土台とする鍵付きメッセージ認証コード(MAC)構造。
bcrypt
Blowfish 暗号の鍵スケジューリングを基にした適応的パスワードハッシュ関数で、1999 年に Provos と Mazières が設計した。
暗号鍵
暗号アルゴリズムをパラメータ化し、データの暗号化・復号・署名・認証に用いる高エントロピーな秘密または公開値。