パスワードから KDF を使って暗号鍵を導出する
人間が覚えられるパスワードを、ソルト付きの PBKDF2、scrypt、または bcrypt で、AES や HMAC に使える固定長の鍵に変換します。
- 1
パスワードはエントロピーが低く長さも不定ですが、暗号鍵には高いエントロピーと固定長が必要です。鍵導出関数(KDF)がこのギャップを埋めます。多数の反復でパスワードを引き伸ばし、レインボーテーブルを防ぐソルトを組み合わせます。
- 2 PBKDF2 鍵導出 →
パスワード、ランダムなソルト、反復回数(PBKDF2-SHA256 では 10 万〜60 万)、出力長(AES-256 なら 32 バイト)を入力します。ツールは導出鍵を hex または Base64 で出力します。
- 3 scrypt 鍵導出 →
GPU/ASIC 攻撃へのより強い防御には、メモリハードな scrypt を使います。パラメータ:N=2^16〜2^20、r=8、p=1。メモリコストにより並列総当たり攻撃が高コストになります。
- 4
ソルトとパラメータ(反復回数、N/r/p)は暗号化データと共に保存してください。これらは秘密ではありません。秘密なのはパスワードだけです。同じパラメータ+ソルト+パスワードは常に同じ鍵を再現します。
よくある質問
- PBKDF2 と scrypt と bcrypt のどれを使うべきですか?
- ハードウェア攻撃への耐性が最も強いのは scrypt(メモリハード)です。bcrypt はパスワード保存で実績があります。PBKDF2 は FIPS 標準で広く利用可能です。鍵導出に限って言えば、scrypt または PBKDF2-SHA256 が標準的な選択です。bcrypt はパスワードハッシュ用の設計であり、鍵導出用ではありません。
- なぜソルトは秘密にしなくてよいのですか?
- ソルトの役割は、同じパスワードを持つ異なるユーザーが異なる鋭を得ることと、事前計算されたレインボーテーブルを無効化することです。一意でランダムであればよく、秘密である必要はありません。導出鍵または暗号文と共に保存してください。
関連ツール
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%クライアントサイド。 ツール
HMAC ジェネレーター
Generate HMAC (Keyed-Hash Message Authentication Code) with SHA-1/256/512。無料、プライベート、100%クライアントサイド。 ツール
AES 暗号化ツール
Encrypt text or binary data with AES (CBC/GCM/ECB) using Web Crypto API。無料、プライベート、100%クライアントサイド。 ツール