Proven by Intelligence
보이지 않는 안전을 인텔리전스로 증명하다.
기술 인사이트를 만나보세요.
지난 기술노트에서 TLS 1.2의 근본적인 약점을 살펴봤습니다. RSA 개인키라는 단 하나의 장기 키가 모든 과거 세션의 키를 여는 만능열쇠 역할을 하고 있었고, 이 키가 언젠가 유출되면 과거 통신까지 통째로 위험해지는 구조였습니다.
TLS 1.3의 개발자들은 이 문제를 해결하기 위해 알고리즘을 조금 손보는 수준이 아니라, 설계의 출발점 자체를 바꿨습니다.
근본적인 질문 하나
│ 애초에 키를 네트워크로 전달하지 않으면 어떨까?
TLS 1.2는 “비밀값을 안전하게 전달하는” 기술이었습니다. 클라이언트가 Premaster Secret을 만들고, 이를 RSA로 암호화해서 서버에게 보내는 방식이었습니다. 전달할 값이 있고, 그 값을 잘 포장해서 상대에게 넘기는 구조입니다.
TLS 1.3은 이 전제 자체를 버렸습니다.
- Premaster Secret을 만들지 않습니다.
- 그것을 RSA로 암호화해서 보내지도 않습니다.
- AES 키가 될 재료를 네트워크로 아예 전달하지 않습니다.
대신 클라이언트와 서버가 각자 독립적으로 계산해서, 결과적으로 똑같은 값에 도달하는 방식을 택했습니다. 이를 가능하게 하는 기술이 ECDHE(타원곡선 Diffie-Hellman Ephemeral)다. 구체적인 계산 원리는 3편에서 자세히 다루겠습니다.
'전달'에서 '생성'으로
두 방식의 차이를 비유하면 이렇습니다.

TLS 1.2 방식 — 편지에 비밀 열쇠를 넣고, 자물쇠(RSA 공개키)로 잠가서 상대에게 보냅니다. 상대는 자신의 열쇠(RSA 개인키)로 자물쇠를 열어 비밀 열쇠를 꺼냅니다. 이 비밀 열쇠 자체가 실제로 네트워크를 오간다는 점이 핵심입니다.
TLS 1.3 방식 — 양쪽이 각자 자기만 아는 숫자를 하나씩 정합니다. 그리고 이 숫자로부터 파생된, 공개해도 무방한 값만 서로 교환합니다. 각자는 “자신의 비밀 숫자”와 “상대가 보낸 공개 값”을 조합해서 계산을 수행하는데, 신기하게도 양쪽의 계산 결과가 완전히 같은 값이 됩니다. 하지만 그 결과값 자체는 단 한 번도 네트워크로 전송되지 않습니다.

[그림 2] '전달' 방식(TLS 1.2)과 '생성' 방식(TLS 1.3)의 차이
이 차이가 왜 그렇게 중요한지는 1편의 문제로 돌아가 보면 분명해집니다. TLS 1.2에서는 RSA 개인키만 있으면 과거에 전달됐던 암호화된 비밀값을 복호화할 수 있었습니다. 그런데 TLS 1.3에서는 애초에 네트워크로 전달된 “비밀값”이 없습니다. 훔쳐서 나중에 풀어볼 암호문 자체가 존재하지 않는 것입니다.
게다가 TLS 1.3에서는 이 계산에 쓰이는 비밀 숫자를 세션마다 새로 만들고, 세션이 끝나면 즉시 폐기합니다. 그러니 설령 서버의 장기 인증서 개인키가 미래에 유출되더라도, 이미 폐기되고 사라진 세션별 비밀 숫자를 복원할 방법이 없습니다. 이것이 TLS 1.3이 Forward Secrecy(전방향 기밀성)를 기본으로 제공한다고 말하는 이유입니다.
그렇다면 인증서는 이제 필요 없을까?
여기서 흔히 하는 오해가 있습니다. "키를 서로 계산해서 만든다면, 인증서는 이제 필요 없는 거 아닌가?"
결론부터 말하면, 인증서는 여전히 필수입니다. 다만 역할이 완전히 달라졌습니다.

TLS 1.2에서 인증서는 두 가지 일을 했다: ① 서버 인증 — “나는 진짜 서버다”를 증명, ② 키 전달의 도구 — 인증서 속 RSA 공개키로 Premaster Secret을 암호화하지만,
TLS 1.3에서는 세션 키가 ECDHE 계산으로 만들어지기 때문에, 인증서는 두 번째 역할에서 완전히 손을 뗍니다. 오직 첫 번째 역할, 자기 신원을 증명하는 일에만 집중합니다.

[그림 4] TLS 1.2와 TLS 1.3에서 인증서가 맡는 역할 비교
구체적으로는 이렇게 동작합니다. 서버는 지금까지 오간 handshake 내용 전체를 자신의 인증서 개인키로 전자서명합니다. (Certificate Verify 단계)
클라이언트는 인증서 속 공개키로 이 서명을 검증합니다.

[그림 5] Certificate Verify 검증 흐름
이 서명 검증이 성공하면 "이 서버는 인증서 주인이 맞다"는 것과 "지금까지의 대화가 위변조되지 않았다"는 것이 동시에 증명됩니다. 즉 TLS 1.3에서 인증서는 더 이상 '비밀을 감싸는 자물쇠'가 아니라, 순수한 디지털 신분증이자 무결성 증명 도구로 재정의되었습니다.
하나의 재료에서 여러 개의 키로
ECDHE 계산으로 나온 값(Shared Secret)이 곧바로 AES 키가 되는 것도 아닙니다. TLS 1.3은 이 값을 HKDF(HMAC 기반 키 유도 함수)에 통과시켜, 용도별로 서로 다른 여러 개의 키를 파생시킵니다.

[그림 6] Shared Secret에서 AES 세션키까지의 HKDF 파생 과정
Handshake용 키, Finished 검증용 키, 클라이언트/서버 각각의 Application 키, 세션 재개용 키 등을 독립적으로 만들어내는데, 이를 Key Separation이라 부른다. 하나의 키가 어떤 이유로 노출되더라도 다른 목적의 키에는 영향이 미치지 않도록 설계된 것입니다.
요약하면
TLS 1.3의 철학은 한 문장으로 압축할 수 있습니다.
"키를 안전하게 '전달'하는 기술에서, 키를 전달하지 않고도 함께 '생성'하는 기술로."
그리고 이 전환에 따라 인증서의 역할도 “키 운반 도구”에서 “신원 증명 전용 도구”로 재정의되었습니다.
다음 편에서는 이 모든 것을 가능하게 하는 핵심 수학, ECDHE가 실제로 어떻게 양쪽에서 동일한 키를 만들어내는지 구체적인 계산 원리를 하나씩 뜯어보겠습니다.
