KDF(鍵導出関数) - 暗号化全般

暗号化全般 | IT用語集

KDF(鍵導出関数)とは

KDF(Key Derivation Function / 鍵導出関数)は、パスワードや共有秘密、マスターキーなどの入力値から、暗号化に使用する安全な鍵を生成するためのアルゴリズムです。

KDFが必要とされる主な理由は以下の通りです:

  • エントロピーの増大:弱いパスワードから強力な鍵を生成
  • 鍵の長さ調整:任意の長さの鍵を生成
  • ブルートフォース攻撃への耐性:計算コストを意図的に高める
  • 複数鍵の生成:一つのマスターキーから複数の用途別鍵を導出

KDFの種類と特徴

パスワードベースKDF(PBKDF)

パスワードから鍵を導出するために設計されたKDFです。ブルートフォース攻撃への耐性を高めるため、意図的に計算を遅くします。

アルゴリズム 特徴 推奨用途
PBKDF2 広く実装されている。イテレーション数で調整 レガシーシステム、互換性重視
scrypt メモリハード。GPU攻撃に強い 暗号通貨、ディスク暗号化
Argon2 最新の標準。メモリ・CPU両方調整可能 新規開発、パスワードハッシュ
bcrypt パスワードハッシュに特化 ユーザーパスワード保存

非パスワードベースKDF

すでに十分なエントロピーを持つ秘密情報から鍵を導出する場合に使用します:

  • HKDF(HMAC-based KDF):Diffie-Hellman鍵交換後の鍵導出に最適
  • KDF1/KDF2:古典的なKDF。現在はHKDFを推奨

AIエンジニアとしての実体験

機械学習モデルを配布する際、モデルファイルを暗号化することがあります。このとき、ユーザーが入力するライセンスキーから実際の暗号化鍵を導出するためにKDFを使用します。

from cryptography.hazmat.primitives.kdf.hkdf import HKDF
from cryptography.hazmat.primitives import hashes
import os

# ライセンスキーからAES鍵を導出
def derive_key_from_license(license_key: str, salt: bytes = None) -> bytes:
    if salt is None:
        salt = os.urandom(16)
    
    hkdf = HKDF(
        algorithm=hashes.SHA256(),
        length=32,  # AES-256用
        salt=salt,
        info=b"model-encryption-key"
    )
    return hkdf.derive(license_key.encode()), salt

# パスワードベースの場合(scrypt使用)
from cryptography.hazmat.primitives.kdf.scrypt import Scrypt

def derive_key_with_scrypt(password: str, salt: bytes) -> bytes:
    kdf = Scrypt(
        salt=salt,
        length=32,
        n=2**14,  # CPUコスト
        r=8,       # ブロックサイズ
        p=1        # 並列度
    )
    return kdf.derive(password.encode())

自社サーバー運用への応用

ディスク暗号化

LUKS(Linux Unified Key Setup)は、PBKDF2またはArgon2を使用してパスフレーズから暗号化鍵を導出します。

# LUKSボリュームの作成(Argon2使用)
cryptsetup luksFormat --pbkdf argon2id /dev/sdb1

# 既存LUKSのKDFパラメータ確認
cryptsetup luksDump /dev/sdb1 | grep -A5 "PBKDF"

TLSセッション鍵の導出

TLS 1.3では、HKDFを使用してハンドシェイク時に複数のセッション鍵を導出します。

関連ブログ記事

📝 関連記事

【2026年最新】OpenSSLの深刻な問題とは? - KDFの実装についても触れています。

最新動向(2026年)

Argon2の普及

2015年のPassword Hashing Competitionで優勝したArgon2が、徐々に標準として採用されています。OWASP(Open Web Application Security Project)もArgon2idを第一推奨としています。

ポスト量子暗号への対応

量子コンピュータに対しても、適切なパラメータを選択したKDFは安全であると考えられています。ただし、出力鍵長を2倍にすることが推奨されています。

トラブル事例と対策

⚠️ イテレーション数の不足

問題:PBKDF2のイテレーション数が少なすぎるとブルートフォース攻撃に脆弱

対策:OWASP推奨では最低でも310,000イテレーション(SHA-256使用時)

⚠️ ソルトの再利用

問題:同じソルトを使うとレインボーテーブル攻撃が可能に

対策:各導出ごとに一意のランダムソルト(最低16バイト)を使用

権威あるリソース

関連用語

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

KDFに関するご質問や暗号化システム導入のご相談など、お気軽にお問い合わせください。