682. TLS Handshake 프로토콜 (초기화 및 세션키 협상)
핵심 인사이트: 전 세계 아무도 믿을 수 없는 인터넷 공간에서, 처음 만난 내 브라우저와 네이버 서버가 어떻게 '둘만 아는 비밀번호'를 해커 몰래 정할 수 있을까? TLS 핸드셰이크는 암호학의 모든 정수(비대칭키, 대칭키, 해시, 인증서)를 총동원하여, 0.1초 만에 서로의 신분을 검증하고 암호화된 터널의 '마스터 열쇠'를 만들어내는 예술적인 협상 과정이다.
Ⅰ. TLS Handshake (핸드셰이크)의 목적
안전한 데이터 암호화 통신(Record Protocol)을 시작하기 직전에, 클라이언트와 서버가 만나 다음 3가지를 결정하는 준비 단계입니다.
- 서로 어떤 암호화 알고리즘(Cipher Suite)을 사용할지 합의.
- 서버가 진짜 맞는지 인증서(X.509) 검증.
- 가장 중요: 앞으로 데이터를 주고받을 때 쓸 대칭키(Session Key)를 안전하게 생성하고 교환.
Ⅱ. TLS 1.2 핸드셰이크의 4단계 동작 과정 🌟
(TCP 3-Way Handshake가 끝난 직후 시작됩니다.)
Step 1. Client Hello & Server Hello (인사 및 협상)
- Client Hello: 내 브라우저가 네이버 서버에 "안녕! 내가 쓸 수 있는 암호화 방식(Cipher Suite) 목록들이랑, 내가 만든 난수(Random A) 하나 던져줄게."라고 인사를 건넵니다.
- Server Hello: 서버가 그걸 보고 "안녕! 네가 준 목록 중에 이걸로(예: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) 암호화하자! 그리고 나도 난수(Random B) 하나 던져줄게."라고 답합니다.
Step 2. Certificate & Server Key Exchange (신분증 제시와 열쇠 재료 전달)
- Certificate: 서버가 자신의 공인 인증서(내부엔 공개키가 들어있음)를 클라이언트에 보냅니다. 클라이언트는 이 인증서가 조작되지 않은 진짜인지(PKI 검증, OCSP 등) 꼼꼼히 확인합니다.
- Server Key Exchange: (디피-헬만 방식 사용 시) 서버가 비밀번호(세션키)를 만들기 위한 추가적인 수학적 재료를 클라이언트에게 던져주고 "내 할 말은 끝났어(Server Hello Done)"라고 마무리합니다.
Step 3. Client Key Exchange (비밀 열쇠 생성) 🌟
- Pre-Master Secret 생성: 클라이언트는 방금 주고받은 난수 A와 난수 B를 섞어서 'Pre-Master Secret'이라는 임시 열쇠 재료를 만듭니다.
- 암호화 전송: 클라이언트는 이 임시 열쇠 재료를 서버의 '공개키'로 찰칵 암호화해서 서버로 날립니다. (이때 비대칭키의 기밀성 마법이 발동하여, 해커가 훔쳐도 서버의 '개인키'가 없으면 절대 열어보지 못합니다.)
- 세션 키(Session Key) 완성: 서버가 자기 개인키로 풀어서 임시 열쇠를 얻어냅니다. 이제 클라이언트와 서버는 이 임시 열쇠를 지지고 볶아서 **완벽하게 똑같은 '최종 대칭키(Session Key)'**를 나눠 갖게 되었습니다.
Step 4. Change Cipher Spec & Finished (협상 완료 선언)
- 클라이언트와 서버가 서로에게 **"이제부터 우리가 방금 만든 '대칭키(Session Key)'로 몽땅 암호화해서 말한다!"**라고 선언(Change Cipher Spec)합니다.
- 마지막으로 지금까지 주고받은 모든 대화 내역을 암호화해서 진짜 잘 풀리는지 테스트(Finished)해 본 뒤, 본격적인 HTTP 데이터 통신을 시작합니다.
Ⅲ. 핸드셰이크의 한계 (왕복 지연 시간, RTT)
이 완벽해 보이는 TLS 1.2 핸드셰이크의 유일한 단점은, 인사를 하고 열쇠를 나누는 데 **무려 2번의 왕복 통신(2-RTT)**이 필요하다는 점입니다. 인터넷이 느린 모바일 환경에서는 이 초기 접속 과정 때문에 화면이 늦게 뜨는 딜레이가 심했습니다. (이 단점을 1-RTT로 뜯어고친 것이 TLS 1.3입니다. 685번 문서 참조)
📢 섹션 요약 비유: 핸드셰이크는 스파이 영화의 비밀 접선입니다. 앨리스(클라이언트)가 밥(서버)에게 암호 목록과 난수A(인사말)를 보냅니다. 밥은 자신의 신분증(인증서)과 난수B를 보여주며 화답합니다. 앨리스는 두 난수를 섞어 '금고 비밀번호(세션키)'를 만든 뒤, 오직 밥만 열 수 있는 특수 상자(공개키 암호화)에 넣어 밥에게 던집니다. 밥이 상자를 열어 비밀번호를 확인하는 순간, 둘은 세상에서 완벽히 격리된 안전한 비밀 통신망(대칭키 암호화)을 완성하게 됩니다.