Perfect Forward Secrecy(PFS)を実装する
PFS は、長期鍵が漏洩しても過去のセッション鍵が明らかにならないことを保証します。これを可能にする一時鍵交換のパターンを学びましょう。
- 1
PFS(Perfect Forward Secrecy)では、セッションごとに一時的な(使い捨ての)鍵ペアが必要です。両者はこれらの一時鍵で Diffie-Hellman を実行してセッション鍵を導出し、その後、一時秘密鍵を破棄します。後に長期鍵が盗まれたとしても、一時鍵はもはや存在しないため、過去のセッションは安全なまま保たれます。
- 2 ランダムバイトジェネレーター →
このセッション用の一時秘密鍵を生成します。この鍵は鍵交換の直後に破棄されます。ディスクに保存してはいけません。
- 3 剰余べき乗計算ツール →
一時鍵で DH 計算を実行します。公開一時値を送信し、相手側の値を受信して、共有シークレットを計算します。この共有シークレットから HKDF を使ってセッション鍵を導出します。
- 4
TLS 1.3 では PFS が必須です。すべての鍵交換が一時 Diffie-Hellman(DHE または ECDHE)を使います。TLS 1.2 では、DHE/ECDHE 暗号スイートを明示的に有効にし、静的 RSA 鍵交換を無効にする必要があります。最高のパフォーマンスには、X25519 または P-256 の ECDHE を使ってください。
よくある質問
- PFS は将来の鍵漏洩から保護してくれますか?
- はい。それこそが PFS の目的です。攻撃者がすべてのトラフィックを記録し、後でサーバーの長期秘密鍵を盗んだとしても、一時セッション鍵は破棄済みのため、過去のセッションを復号できません。影響を受けるのは(鍵ローテーション前の)将来のセッションだけです。
- なぜ TLS 1.3 では PFS が必須なのですか?
- 静的 RSA 鍵交換(TLS 1.2 以前)は PFS を提供しません。RSA 秘密鍵が漏洩すると、過去のすべてのトラフィックを復号できます。TLS 1.3 は静的 RSA を廃止して一時 DH を必須とし、PFS を既定にしました。