684. TLS 전방향 안전성 (PFS, Perfect Forward Secrecy) 보장 원리
핵심 인사이트: 해커가 네이버 서버와 내가 주고받는 암호화된 패킷을 10년 치를 몰래 녹음(저장)해 두었다. 암호를 못 풀어서 당장 읽지는 못한다. 그런데 10년 뒤 네이버 서버가 털려서 '마스터 개인키'가 유출되었다. 만약 과거의 암호화 방식(RSA 키 교환)을 썼다면, 해커는 그 마스터키 하나로 10년 치 녹음본을 다 풀어버리는 대재앙이 터진다. 이를 막기 위해 '매번 통신할 때마다 쓰고 버리는 일회용 열쇠'를 만드는 기법이 PFS(전방향 안전성)다.
Ⅰ. 과거 RSA 키 교환 방식의 치명적 약점 (마스터키의 붕괴)
TLS 핸드셰이크(682번) 시절, 클라이언트는 세션키(대칭키) 재료를 **'서버의 공개키(RSA)'**로 암호화해서 보냈습니다.
- 문제점: 암호화된 이 패킷은 오직 서버의 '마스터 개인키(RSA Private Key)' 하나로만 풀립니다. 즉, 오늘 만든 세션키든 3년 뒤에 만들 세션키든 모두 똑같은 '서버 개인키' 하나에 운명이 걸려 있습니다.
- 해킹 시나리오: 무서운 집념을 가진 해커는 10년 동안 지나다니는 모든 암호화 패킷을 복호화하지 못한 채 하드디스크에 저장만 해둡니다. 그러다 10년 뒤 늙은 서버가 해킹당해 '마스터 개인키' 하나가 털리는 순간, 해커는 10년 치 저장해 둔 과거의 모든 패킷을 소급해서 모조리 복호화(해독)해 버립니다.
Ⅱ. 전방향 안전성 (PFS, Perfect Forward Secrecy)의 개념
- 개념: **"서버의 마스터 개인키(장기 키)가 미래에 해커에게 털리더라도, 과거에 주고받았던 암호화된 통신 내용(세션)은 절대 해독할 수 없어야 한다"**는 완벽한 보안 특성을 말합니다.
- (※ 이름이 좀 헷갈릴 수 있는데, Forward(앞으로/미래에) 키가 털리더라도 과거의 비밀은 완벽(Perfect)하게 지킨다는 뜻입니다.)
Ⅲ. PFS를 보장하는 원리: 임시 키 교환 (Ephemeral Key Exchange) 🌟
이 완벽한 안전성을 달성하기 위한 유일한 방법은 **"세션키를 만들 때, 마스터 개인키를 쓰지 말고, 그때그때 쓰고 버리는 '일회용' 수학 공식을 쓰자!"**는 것입니다.
- DHE (Diffie-Hellman Ephemeral) 또는 ECDHE (타원 곡선 DHE) 알고리즘을 사용합니다.
- 클라이언트와 서버가 연결을 맺을 때마다, 즉흥적으로 무작위 난수를 섞어 서로 일회용 비밀키(세션키)를 만들어냅니다(666번 디피-헬만 방식). 마스터 개인키는 이 과정에서 키를 암호화하는 데 쓰이지 않고, 단지 "내가 진짜 네이버 서버가 맞다"는 도장(서명 인증)을 찍는 데만 딱 한 번 쓰이고 빠집니다.
- 통신이 끝나면 방금 썼던 일회용 세션키는 양쪽 컴퓨터 메모리에서 즉시 영구 삭제(파기)됩니다.
- 결과: 나중에 해커가 서버의 마스터 개인키를 훔쳐 와서 과거의 패킷을 풀어보려 해도, 마스터 개인키는 자물쇠를 푸는 열쇠가 아니라 도장에 불과했으므로 패킷은 절대 열리지 않습니다.
Ⅳ. 현대 인터넷의 필수 요건 (TLS 1.3의 강제)
- 애플, 구글 등 글로벌 기업들은 사용자 프라이버시를 지키기 위해 자사 앱이나 서버에서 이 PFS (ECDHE 등) 방식의 Cipher Suite만을 사용하도록 강제하고 있습니다.
- 최신 암호 표준인 TLS 1.3에서는 아예 낡고 위험한 RSA 기반의 키 교환 방식을 프로토콜에서 완전히 폐지(삭제)해 버리고, 오직 PFS가 보장되는 DHE/ECDHE 방식만 쓰도록 못 박았습니다.
📢 섹션 요약 비유: 과거의 RSA 방식은 아파트 마스터키(서버 개인키) 하나로 10년 동안 모든 택배함(세션키)을 여는 구조입니다. 나중에 경비실이 털려 마스터키를 뺏기면 도둑은 10년 치 쌓인 모든 택배함을 다 열어버립니다(재앙). PFS(전방향 안전성) 방식은 매일매일 새로운 택배를 시킬 때마다 오직 한 번만 쓰고 버리는 '일회용 랜덤 자물쇠와 열쇠'를 만들어 쓰는 구조입니다. 경비실 마스터키는 단지 "이 택배함 진짜 경비실 거 맞음"이라는 확인 도장 역할만 할 뿐이므로, 나중에 마스터키가 털려도 이미 버려진 옛날 자물쇠들은 절대 열리지 않습니다.