Salt
ソルトとは、パスワードのハッシュ化時に加えるランダムな値のことで、同一パスワードでも異なるハッシュを生成させ、レインボーテーブルやパスワードの一致検出を無効化する。
目的
同一パスワードでもユーザーごとにハッシュを一意にし、事前計算や一括比較を防ぐことを目的とする。
メカニズム
パスワードごとに一意なランダムソルト(16 バイト以上)を生成し、連結値 H(password || salt) をハッシュ化する。ソルトはハッシュと一緒に保存され(秘密にする必要はない)、検証時には保存済みソルトで再ハッシュ化して比較する。ソルトにより、レインボーテーブルはユーザー単位で作り直す必要が生じ、事実上不可能になる。
ユースケース
- パスワードハッシュの保存
- KDF(PBKDF2/scrypt)への入力
- 暗号化における IV の類推
- トークン生成
例
- 入力
password + random saltOutputUnique hashDifferent per user
よくあるエラー
- A global fixed salt (equivalent to no salt)
- Generate a unique random salt per password
関連用語
Pepper
ペッパー(pepper)はパスワードハッシュ時に追加するサーバ側の秘密である。ソルトと異なり全体で共有され秘密に保たれ、オフライン攻撃の難度を高める。 用語集
Hash Salting
ハッシュソルティング(Hash Salting)は、ハッシュ入力にランダムなソルトを追加して、同じ入力でも異なるハッシュを生成させる手法である。レインボーテーブルと衝突検出を無効化する。 用語集
Rainbow Table
レインボーテーブルは、ハッシュ関数の逆写像のためにMartin Hellmanの方式を改良した事前計算テーブルである。時間と空間のトレードオフでパスワードハッシュを解析する。 用語集
PBKDF2
PBKDF2(Password-Based Key Derivation Function 2)はPKCS#5で標準化されたKDFであり、HMACの反復によりパスワードから鍵を導出する。パスワードハッシュと鍵導出で広く使われる。 用語集
関連ツール
PBKDF2 鍵導出
Derive a key from a password using PBKDF2 (RFC 2898) with Web Crypto API。無料、プライベート、100%クライアントサイド。 ツール
scrypt 鍵導出
Derive a key from a password using scrypt (memory-hard KDF)。無料、プライベート、100%クライアントサイド。 ツール
bcrypt ハッシュ生成
Hash passwords with bcrypt or verify bcrypt hashes。無料、プライベート、100%クライアントサイド。 ツール