PBKDF2プレイグラウンド
ソルト、反復回数、鍵長を指定して、PBKDF2-HMAC-SHA-1/256/512で鍵を導出。16進数、Base64、passlib形式で出力し、RFC 6070のベクターで検証済みです。
PBKDF2(RFC 8018)はブラウザーの Web Crypto API で計算します。OWASP は HMAC-SHA-256 で 600,000 回、HMAC-SHA-512 で 210,000 回を推奨しています。PBKDF2 はメモリハードではないため、新しいシステムでは Argon2id を優先してください。
パスワードをハッシュと照合
すべてブラウザ内で実行されます。データがアップロードされることはありません。
PBKDF2プレイグラウンドとは?
HMAC-SHA-1、SHA-256、SHA-512と、任意の反復回数、ソルト、出力長でPBKDF2(RFC 8018)を計算します。結果は16進数、Base64、passlibの $pbkdf2-sha256$ 形式で表示され、照合機能はDjangoの pbkdf2_sha256$ ハッシュも受け付けます。
PBKDF2プレイグラウンドの使い方
- パスワードを入力します。
- ハッシュ関数 (PRF)、反復回数、鍵長(バイト)を選びます。
- ソルトとそのエンコードを入力するか、空のままにしてランダムなソルトを使います。
- ハッシュ化をクリックして、16進数、Base64、またはエンコード済みの結果をコピーします。
例
Password password, salt salt, HMAC-SHA-1, 4096 iterations, 20 bytes
4b007901b765489abead49d926f721d065a429c1 $pbkdf2-sha1$4096$c2FsdA$SwB5AbdlSJq.rUnZJvch0GWkKcE
16進数の値はRFC 6070のテストベクター3です。
PBKDF2プレイグラウンドを使うべき場面
テスト用の鍵の導出、RFC 6070のベクターの再現、DjangoやpasslibのハッシュのIO確認に使います。新規のパスワード保存には、メモリハード関数であるArgon2idまたはscryptを推奨します。
PBKDF2プレイグラウンドの仕組み
PBKDF2は、ブロックT_i = U_1 ⊕ U_2 ⊕ … ⊕ U_c(U_1 = HMAC(password, salt ‖ INT(i))、U_j = HMAC(password, U_{j−1}))を計算し、要求された長さになるまで連結します。計算はブラウザのWeb Crypto API(deriveBits)が行います。passlib形式は、反復回数、ソルト、ハッシュを、調整したBase64(+を.に置換)で保存します。
一般的な使用例
- 移行時のDjangoのpbkdf2_sha256ハッシュの照合
- RFC 6070のテストベクターの再現
- テスト用のパスフレーズからのAES鍵の導出
- 反復回数と所要時間の比較
よくある質問
反復回数はどのくらいにすべきですか?
OWASPは、HMAC-SHA-256なら600,000回、HMAC-SHA-512なら210,000回、HMAC-SHA-1なら1,300,000回を推奨しています。
PBKDF2は今でも使えますか?
はい。特にFIPS検証が必要な場合は使えますが、メモリハードではないため、GPUによる解読はArgon2idやscryptより速くなります。
鍵長が重要なのはなぜですか?
ハッシュ出力より多くのバイト数(SHA-256なら32超)を要求すると、PBKDF2が余分なブロックを計算し、防御側のコストだけが増え、攻撃者は遅くなりません。