PBKDF2 - Password-Based Key Derivation
About 2 min read
PBKDF2 (Password-Based Key Derivation Function 2) は、パスワードから暗号鍵を 安全に導出するための関数です。ハッシュ関数を 数万〜数十万回繰り返し適用することで計算コストを引き上げ、ブルートフォース攻撃に 対抗します。 2000 年に RSA Laboratories が PKCS #5 v2.0 として公開し、 NIST SP 800-132 で標準化されました。 Wi-Fi の WPA2 や macOS のディスク暗号化など、 広範なシステムに組み込まれている歴史の長いアルゴリズムです。
歴史的背景
PBKDF2 の前身である PBKDF1 は 1993 年に PKCS #5 v1.5 で定義されましたが、 導出できる鍵長がハッシュ関数の出力長に制限されるという問題がありました。 2000 年に公開された PBKDF2 はこの制限を撤廃し、任意の長さの鍵を導出可能に しました。 2010 年に NIST SP 800-132 として正式に標準化され、 米国政府のシステムでも利用が推奨されるようになりました。 長い歴史と広い採用実績を持つ一方、 GPU の進化に伴い安全性の限界が 指摘されるようになっています。
HMAC ベースの反復計算
PBKDF2 の内部構造はシンプルです。パスワードとソルトを入力として HMAC (Hash-based Message Authentication Code) を繰り返し適用します。
各反復の出力を XOR で累積し、最終的な鍵を生成します。 OWASP の 2025 年時点の推奨は HMAC-SHA256 で 600,000 回以上の反復です。 HMAC-SHA512 を使用する場合は 210,000 回以上が推奨されています。
Wi-Fi WPA2 での採用
PBKDF2 が最も身近に使われている例が Wi-Fi の WPA2-Personal (WPA2-PSK) です。 Wi-Fi パスワード (PSK: Pre-Shared Key) から実際の暗号鍵を導出する際に、 PBKDF2-HMAC-SHA1 を 4,096 回反復して使用しています。 この反復回数は 2004 年の策定時には妥当でしたが、現在の GPU 性能では 毎秒数十万回の試行が可能であり、短いパスワードは現実的な時間で解読されます。 WPA3 では SAE (Simultaneous Authentication of Equals) に移行し、 この問題を解消しています。
現代での限界
PBKDF2 の最大の弱点は、計算が CPU バウンドでありメモリをほとんど消費しない点です。 GPU は数千の演算コアを持ち、 HMAC-SHA256 のような単純な計算を大量に並列実行できます。 2025 年時点の高性能 GPU (NVIDIA RTX 4090 等) では、 PBKDF2-HMAC-SHA256 の 600,000 回反復でも毎秒数万のパスワード候補を試行可能です。
| 特性 | PBKDF2 | bcrypt | scrypt | Argon2id |
|---|---|---|---|---|
| 登場年 | 2000 | 1999 | 2009 | 2015 |
| メモリハード | ✗ | ✗ | ✓ | ✓ |
| GPU 耐性 | 低い | 中程度 | 高い | 高い |
| NIST 標準化 | SP 800-132 | なし | RFC 7914 | RFC 9106 |
| OWASP 推奨順位 | 4 位 (レガシー) | 2 位 | 3 位 | 1 位 |
移行の実務
PBKDF2 を使用している既存システムでは、ユーザーの次回ログイン時に Argon2id や bcrypt で再ハッシュする段階的移行が一般的です。パスワードハッシュの 移行では、旧ハッシュと新ハッシュを並行して保持し、全ユーザーの移行が完了するまで 両方を検証する設計が必要です。鍵管理の 観点からも、導出鍵の用途と保存方法を見直す良い機会です。
「PBKDF2 から Argon2id への移行を 6 ヶ月かけて実施しました。ログイン時の 再ハッシュ方式を採用し、移行期間中は両方のハッシュを検証する仕組みにしたことで、 ユーザーへの影響ゼロで完了できました。」
暗号の基礎は暗号化の基礎で、 パスワード管理の全体像は安全なパスワード管理ガイドで 解説しています。ポスト量子時代のパスワードセキュリティについてはポスト量子パスワードセキュリティも 参考にしてください。cryptography and security books on Amazonでさらに深く学べます。
よくある誤解
「NIST が標準化しているから PBKDF2 は最も安全」という誤解がありますが、 標準化は安全性の保証ではなく互換性の保証です。 NIST 自身も SP 800-63B で メモリハード関数の使用を推奨しており、 PBKDF2 は「許容される最低ライン」に 近い位置づけです。また「反復回数を増やせば GPU にも対抗できる」という考えも 誤りで、 GPU は CPU と同じ HMAC 計算を並列実行できるため、反復回数の増加は 正規ユーザーと攻撃者の双方に等しく影響します。
Was this article helpful?