Key Derivation
鍵導出(Key Derivation)は、低エントロピーのパスワードや高エントロピーのマスター鍵から暗号鍵を生成するプロセスである。KDF(PBKDF2、scrypt、Argon2 など)を使い、総当たり攻撃のコストを引き上げる。
目的
人間のパスワード(低エントロピー)を十分に長い暗号鍵に変え、辞書攻撃やレインボーテーブル攻撃に耐える。
メカニズム
KDF はパスワード、ソルト、反復/コストパラメータ、出力長を取り、擬似乱数の鍵を生成する。反復は試行ごとのコストを倍加し、ソルトは事前計算テーブルを防ぎ、メモリ困難 KDF(scrypt/Argon2)はさらに GPU/ASIC の並列化に耐える。
ユースケース
- ユーザーパスワードの暗号化保存
- ディスク暗号化のマスター鍵導出
- TLS セッション鍵導出(HKDF)
- API トークン生成
例
- 入力
password + salt + 100000 itersOutput256-bit keyIterations multiply the cost
よくあるエラー
- Hashing passwords with a raw SHA (no salt, no iterations)
- Use PBKDF2, scrypt, or Argon2
関連用語
PBKDF2
PBKDF2(Password-Based Key Derivation Function 2)はPKCS#5で標準化されたKDFであり、HMACの反復によりパスワードから鍵を導出する。パスワードハッシュと鍵導出で広く使われる。 用語集
scrypt
scrypt は Colin Percival が設計したメモリーハードな鍵導出関数(KDF)である。大きなメモリ要求によって GPU/ASIC による並列総当たり攻撃を妨げ、パスワードハッシュや鍵導出に利用される。 用語集
Salt
ソルトとは、パスワードのハッシュ化時に加えるランダムな値のことで、同一パスワードでも異なるハッシュを生成させ、レインボーテーブルやパスワードの一致検出を無効化する。 用語集
Hash Salting
ハッシュソルティング(Hash Salting)は、ハッシュ入力にランダムなソルトを追加して、同じ入力でも異なるハッシュを生成させる手法である。レインボーテーブルと衝突検出を無効化する。 用語集
関連ツール
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%クライアントサイド。 ツール