PFS(完全前方秘匿性)は「使い捨て鍵システム」です。
これを高級ホテルの貴重品金庫で例えてみましょう。
1本のマスターキー
全ての金庫を開ける
不変のマスターキー
シナリオ: 泥棒が過去1年間、宿泊客が金庫に何を入れたか監視カメラで録画していた。ある日マスターキーを盗むことに成功。
毎回新しい使い捨て鍵
チェックインごとに
新しい鍵を発行・破棄
シナリオ: 同じく泥棒が1年間録画。今日使われる鍵を盗むことに成功。しかし…
楕円曲線暗号を使用した高速なPFS。
現在最も推奨される暗号鍵交換方式です。
従来型のDiffie-Hellman鍵交換のPFS版。
ECDHEより計算負荷が高いですが互換性があります。
| 暗号スイート名 | PFS | TLS | 強度 | 用途 |
|---|---|---|---|---|
| TLS_AES_128_GCM_SHA256 | ✓ PFS | 1.3 |
|
最新・推奨 |
| TLS_AES_256_GCM_SHA384 | ✓ PFS | 1.3 |
|
最高セキュリティ |
| TLS_CHACHA20_POLY1305_SHA256 | ✓ PFS | 1.3 |
|
モバイル向け |
| ECDHE-RSA-AES256-GCM-SHA384 | ✓ PFS | 1.2 |
|
TLS1.2 推奨 |
| ECDHE-RSA-AES128-GCM-SHA256 | ✓ PFS | 1.2 |
|
バランス型 |
| ECDHE-ECDSA-AES256-GCM-SHA384 | ✓ PFS | 1.2 |
|
ECDSA証明書用 |
💡
ポイント:
TLS 1.3 では全ての暗号スイートがデフォルトでPFSをサポート。TLS 1.2 では
ECDHE_*
または
DHE_*
で始まる暗号スイートがPFS対応です。
AWS はPFS(Forward Secrecy)に対応した事前定義セキュリティポリシーを提供しています。
ポリシー名に
FS
が含まれるものは明示的にPFSをサポートし、
TLS13
系のポリシーは標準でPFSに対応しています。
最新のセキュリティ要件を満たす推奨ポリシー。TLS 1.3をサポートしつつ、TLS 1.2クライアントとの互換性を維持。
最も厳格なPFSポリシー。ECDHE暗号スイートのみを許可し、非PFS暗号を完全に排除。
TLS 1.2のみでPFSを強制。SHA256以上のハッシュアルゴリズムを使用。
TLS 1.1/1.2クライアント向けのPFSポリシー。レガシーシステムとの互換性を維持しつつPFSを確保。
🆕 最新のポスト量子暗号(PQ)対応ポリシー。将来の量子コンピュータ攻撃にも耐性を持つ次世代暗号。
CLIやCloudFormationのデフォルトポリシー。互換性重視だが、非PFS暗号も含まれるため注意が必要。
# 新規リスナー作成時にPFS対応ポリシーを指定 aws elbv2 create-listener \ --load-balancer-arn "arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:loadbalancer/app/my-alb/abc123" \ --protocol HTTPS \ --port 443 \ --certificates CertificateArn="arn:aws:acm:ap-northeast-1:123456789012:certificate/xyz789" \ --ssl-policy "ELBSecurityPolicy-TLS13-1-2-Res-2021-06" \ --default-actions Type=forward,TargetGroupArn="arn:aws:..." # 既存リスナーのポリシーを変更 aws elbv2 modify-listener \ --listener-arn "arn:aws:elasticloadbalancing:..." \ --ssl-policy "ELBSecurityPolicy-FS-1-2-Res-2020-10"
HTTPSListener: Type: AWS::ElasticLoadBalancingV2::Listener Properties: LoadBalancerArn: !Ref ApplicationLoadBalancer Protocol: HTTPS Port: 443 Certificates: - CertificateArn: !Ref SSLCertificateArn # ✅ PFS対応ポリシーを指定 SslPolicy: "ELBSecurityPolicy-TLS13-1-2-Res-2021-06" DefaultActions: - Type: forward TargetGroupArn: !Ref TargetGroup
# 現在のセキュリティポリシーを確認 aws elbv2 describe-listeners \ --load-balancer-arn "arn:aws:elasticloadbalancing:..." \ --query 'Listeners[*].[ListenerArn,SslPolicy]' \ --output table # ポリシーで使用可能な暗号スイートを確認 aws elbv2 describe-ssl-policies \ --names "ELBSecurityPolicy-TLS13-1-2-Res-2021-06" \ --query 'SslPolicies[0].Ciphers[*].Name' # OpenSSL でPFSを確認(外部から) openssl s_client -connect your-alb.elb.amazonaws.com:443 2>/dev/null | grep -E "Cipher|TLS"
ECDHE暗号スイートは非常に効率的で、実際のパフォーマンス影響はほとんどありません。TLS 1.3 ではハンドシェイクが最適化され、むしろ接続が高速になるケースもあります。セキュリティとパフォーマンスのトレードオフを心配する必要はほぼありません。
主要なモダンブラウザ(Chrome、Firefox、Safari、Edge)はすべてECDHE/TLS 1.3 に対応しています。Java 7以降、iOS 9以降、Android 4.4以降もサポートしています。レガシーシステムが必要な場合は
ELBSecurityPolicy-FS-1-1-2019-08
を使用することでTLS 1.1クライアントにも対応できます。
いいえ、Application Load Balancer ではカスタムセキュリティポリシーの作成はサポートされていません。AWS が提供する事前定義ポリシーの中から選択する必要があります。Classic Load Balancer のみカスタムポリシーの作成が可能です。
将来の量子コンピュータによる攻撃に備えたい場合は、
ELBSecurityPolicy-TLS13-1-2-Res-PQ-2025-09
の採用を検討してください。このポリシーは従来のTLS 1.2/1.3 クライアントとも互換性があり、PQ-TLS対応クライアントではハイブリッド鍵交換を使用します。「今から暗号化しておいて、後で量子コンピュータで解読する」攻撃への対策として有効です。
Created by SSuzuki1063
AWS SAP Learning Resources