Perfect Forward Secrecy(PFS) - 暗号化全般

暗号化全般 | IT用語集

Perfect Forward Secrecy(PFS)とは

Perfect Forward Secrecy(PFS / 前方秘匿性)は、暗号通信において、長期的な秘密鍵が漏洩した場合でも、過去のセッション鍵を復元できないことを保証する特性です。

PFSを実現するには、各セッションごとに一時的な鍵(エフェメラル鍵)を生成し、セッション終了後に破棄します。これにより、仮にサーバーの秘密鍵が将来漏洩しても、過去に記録された暗号化通信を復号することができなくなります。

なぜPFSが重要なのか

従来の問題(PFSなし)

RSA鍵交換を使用した従来のTLS接続では、サーバーの秘密鍵でセッション鍵を暗号化していました。このため:

  1. 攻撃者が暗号化された通信を長期間記録
  2. 将来、サーバーの秘密鍵を入手(漏洩、法的要求など)
  3. 過去のすべての通信を復号可能に

PFSによる解決

DHE(Diffie-Hellman Ephemeral)やECDHE(Elliptic Curve DHE)を使用すると:

  1. 各セッションで一時的な鍵ペアを生成
  2. セッション終了後、一時鍵を破棄
  3. サーバー秘密鍵が漏洩しても、過去のセッション鍵は復元不可能

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

金融機関のAIシステム構築プロジェクトで、APIサーバーのTLS設定を見直す機会がありました。監査要件でPFSが必須とされており、すべての暗号スイートをECDHEベースに変更しました。

# Nginx でのPFS対応設定
server {
    listen 443 ssl http2;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    
    # ECDHE(PFS対応)暗号スイートを優先
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    
    ssl_prefer_server_ciphers on;
    
    # DHEを使用する場合はDHパラメータを設定
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;
    
    ssl_ecdh_curve X25519:secp384r1;
}

DHパラメータの生成

# 2048ビットDHパラメータの生成(時間がかかる)
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

# 4096ビット(より安全だが生成に時間がかかる)
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 4096

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

TLS 1.3ではPFSが必須

TLS 1.3では、すべての鍵交換がECDHEベースとなり、PFSがプロトコルレベルで保証されています。これは大きな進歩であり、TLS 1.3への移行を強く推奨します。

PFS対応の確認方法

# OpenSSLでPFS対応を確認
openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | grep -E "Cipher|Server Temp Key"

# nmap でのチェック
nmap --script ssl-enum-ciphers -p 443 example.com

# SSL Labs(オンラインツール)
# https://www.ssllabs.com/ssltest/

関連ブログ記事

📝 関連記事

【2026年最新】OpenSSLの深刻な問題とは? - TLS設定のベストプラクティスも解説

最新動向(2026年)

ポスト量子PFS

量子コンピュータの脅威に備え、ポスト量子暗号を用いたPFS(ハイブリッド鍵交換)の研究が進んでいます。GoogleやCloudflareは、KyberとECDHEを組み合わせたハイブリッド鍵交換の実験を行っています。

0-RTT問題

TLS 1.3の0-RTT(Zero Round Trip Time)機能は、初回接続を高速化しますが、リプレイ攻撃のリスクがあり、厳密なPFSを満たしません。機密性の高い操作には0-RTTを無効化することが推奨されます。

トラブル事例と対策

⚠️ レガシークライアントとの互換性

問題:古いブラウザやクライアントがECDHE暗号スイートをサポートしていない

対策:TLS 1.2以上を要求し、DHE暗号スイートをフォールバックとして残す

⚠️ DHパラメータの脆弱性

問題:1024ビット以下のDHパラメータは攻撃可能(Logjam攻撃)

対策:最低2048ビット、推奨4096ビットのDHパラメータを使用。可能ならECDHEを優先

権威あるリソース

関連用語

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

PFSに関するご質問やTLS設定のご相談など、お気軽にお問い合わせください。