Hash Salting
ハッシュソルティング(Hash Salting)は、ハッシュ入力にランダムなソルトを追加して、同じ入力でも異なるハッシュを生成させる手法である。レインボーテーブルと衝突検出を無効化する。
目的
ハッシュ出力を一意にして、事前計算攻撃と同一入力の比較を防ぐ。
メカニズム
ランダムなソルトを生成して H(input || salt) を計算し、(salt, hash) を保存する。検証時は保存されたソルトで再ハッシュして比較する。ソルトは秘密である必要はないが一意でなければならない。パスワードハッシュや HMAC(HMAC は既に鍵を内包するが)などのシナリオで使用される。
ユースケース
- 安全なパスワード保存
- トークン生成の重複排除
- データ指紋の重複排除
- レインボーテーブル攻撃の防止
例
- 入力
pass1 + saltA → hashA; pass1 + saltB → hashBOutputSame password, different hashesUnique salt
よくあるエラー
- Salt too short (<16 bytes)
- Use at least 16 random bytes
関連用語
Salt
ソルトとは、パスワードのハッシュ化時に加えるランダムな値のことで、同一パスワードでも異なるハッシュを生成させ、レインボーテーブルやパスワードの一致検出を無効化する。 用語集
Pepper
ペッパー(pepper)はパスワードハッシュ時に追加するサーバ側の秘密である。ソルトと異なり全体で共有され秘密に保たれ、オフライン攻撃の難度を高める。 用語集
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%クライアントサイド。 ツール