완전 순방향 비밀성(PFS, Perfect Forward Secrecy)은 장기 비밀 키가 유출되더라도 과거에 녹화된 트래픽을 복호화할 수 없도록 보장하는 암호학적 속성이다.
PFS가 필요한 이유
PFS 없는 경우:
공격자: 암호화된 트래픽 수집 → 서버 개인키 탈취 → 모든 과거 세션 복호화
PFS 있는 경우:
각 세션마다 임시 키 사용 → 서버 개인키 탈취해도 과거 세션 복호화 불가
PFS 달성 방법
| 키 교환 방법 | PFS 제공 여부 |
|---|
| RSA 키 교환 (정적) | 아니요 |
| DH (정적 파라미터) | 아니요 |
| DHE (Ephemeral DH) | 예 |
| ECDHE (Ephemeral ECDH) | 예 |
TLS에서 PFS 활성화
bash
# Apache: ECDHE 암호 스위트 우선
SSLProtocol TLSv1.2 TLSv1.3
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder On
# Nginx: ECDHE 암호 스위트
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
# OpenSSL: PFS 제공 암호 스위트만 허용
openssl ciphers -v 'ECDHE+AESGCM:ECDHE+CHACHA20'
세션 키 생성 과정 (ECDHE)
세션마다:
1. 서버: 임시 ECDH 키 쌍 생성 (server_eph_priv, server_eph_pub)
2. 클라이언트: 임시 ECDH 키 쌍 생성 (client_eph_priv, client_eph_pub)
3. 공개키 교환 (server_eph_pub ↔ client_eph_pub)
4. 공유 비밀 = ECDH(client_eph_priv, server_eph_pub)
5. 세션 키 = KDF(공유 비밀 + nonce)
6. 세션 종료 후 임시 키 즉시 폐기
PFS와 NSA "PRISM" 사건
2013년 NSA 문서 유출로 대규모 트래픽 수집 사실이 드러나면서, PFS를 지원하지 않는 RSA 키 교환 방식의 HTTPS 트래픽이 대량 복호화 위험에 노출됐다. 이 사건이 업계 전반의 ECDHE 전환을 가속화했다.
관련 문서
- •[[diffie-hellman|디피-헬만 키 교환]]
- •[[tls-advanced|TLS 1.3 심화]]
- •[[crypto-protocols|암호 프로토콜]]