PBKDF2 - 暗号化全般

暗号化全般 | IT用語集

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に移行。移行時はイテレーション数を調整

権威あるリソース

関連用語

この用語についてもっと詳しく

PBKDF2に関するご質問やセキュリティ設計のご相談など、お気軽にお問い合わせください。