PBKDF2とは
PBKDF2(Password-Based Key Derivation Function 2)は、パスワードから暗号化鍵を導出するための標準的なアルゴリズムです。RSA Laboratoriesが発行したPKCS #5(RFC 8018)で定義されており、広く使用されています。
PBKDF2の基本的な動作は以下の通りです:
DK = PBKDF2(PRF, Password, Salt, c, dkLen)
PRF: 疑似乱数関数(通常はHMAC-SHA256)
Password: 入力パスワード
Salt: ランダムなソルト値
c: イテレーション回数
dkLen: 出力する鍵の長さ
PBKDF2の仕組み
PBKDF2は、ハッシュ関数(HMACベース)を指定回数繰り返し適用することで、計算コストを高めています。これにより、ブルートフォース攻撃に対する耐性を確保します。
import hashlib
import os
def pbkdf2_example():
password = b"my_secure_password"
salt = os.urandom(16) # 16バイトのランダムソルト
iterations = 600000 # OWASP推奨(SHA-256使用時)
# PBKDF2でAES-256鍵を導出
key = hashlib.pbkdf2_hmac(
'sha256',
password,
salt,
iterations,
dklen=32 # 256ビット
)
return key, salt
# cryptographyライブラリを使用した例
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.primitives import hashes
def derive_key_with_cryptography(password: bytes, salt: bytes) -> bytes:
kdf = PBKDF2HMAC(
algorithm=hashes.SHA256(),
length=32,
salt=salt,
iterations=600000
)
return kdf.derive(password)
AIエンジニアとしての実体験
機密データを扱うAIプロジェクトでは、PBKDF2を使用してデータ暗号化鍵を導出することがあります。例えば、患者データを扱う医療AIプロジェクトでは、データベースの暗号化にPBKDF2で導出した鍵を使用しました。
ただし、新規プロジェクトではArgon2idへの移行を推奨しています。PBKDF2はGPU攻撃に対する耐性が比較的低いためです。
自社サーバー運用への応用
WPA2-PSKでの使用
Wi-FiのWPA2-PSKでは、PBKDF2(4096イテレーション)を使用してパスフレーズからPMK(Pairwise Master Key)を導出します。
macOS FileVaultとiOS
AppleのFileVaultやiOSのデータ保護機能は、PBKDF2を使用してユーザーパスワードからデバイス鍵を導出しています。
関連ブログ記事
📝 関連記事
最新動向(2026年)
推奨イテレーション数の増加
ハードウェアの進歩に伴い、OWASP推奨のイテレーション数は年々増加しています:
- PBKDF2-HMAC-SHA256: 600,000回以上
- PBKDF2-HMAC-SHA512: 210,000回以上
- PBKDF2-HMAC-SHA1: 1,300,000回以上(非推奨)
Argon2への移行推奨
新規開発では、メモリハードなArgon2idが推奨されています。PBKDF2はレガシーシステムや互換性が求められる場面で使用します。
トラブル事例と対策
⚠️ イテレーション数の過小設定
問題:古いシステムで1000回程度の設定が残っている
対策:ログイン時にイテレーション数をアップグレードする仕組みを実装
⚠️ SHA-1の使用
問題:古い実装でPBKDF2-HMAC-SHA1が使用されている
対策:SHA-256またはSHA-512に移行。移行時はイテレーション数を調整
権威あるリソース
- RFC 8018 - PKCS #5: Password-Based Cryptography Specification
- OWASP Password Storage Cheat Sheet
- NIST SP 800-132 - Recommendation for Password-Based Key Derivation
