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プレイグラウンドの使い方

  1. パスワードを入力します。
  2. ハッシュ関数 (PRF)、反復回数、鍵長(バイト)を選びます。
  3. ソルトとそのエンコードを入力するか、空のままにしてランダムなソルトを使います。
  4. ハッシュ化をクリックして、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が余分なブロックを計算し、防御側のコストだけが増え、攻撃者は遅くなりません。

他のカテゴリを見る