728x90

 

TLS 1.3 Handshake 전체 개요

 

TLS 1.3 Handshake는 클라이언트와 서버가 암호화 통신을 설정하기 위해 서로 협상하고, 인증하고, 비밀 키를 공유하는 과정입니다. 크게 보면 다음과 같은 단계로 구성됩니다:

1. ClientHello
2. ServerHello
3. (선택) 서버 인증 및 키 교환
4. Finished 및 암호화된 데이터 전송 시작

 

 

1단계: ClientHello

클라이언트가 서버에 연결을 시도하며 최초로 보내는 메시지입니다.

  • 포함 내용:
    • 지원하는 프로토콜 버전: supported_versions 확장을 통해 "TLS 1.3" 지원을 명시.
    • 지원하는 암호 스위트: 예: TLS_AES_128_GCM_SHA256, TLS_CHACHA20_POLY1305_SHA256 등.
    • 키 공유 정보: 클라이언트의 ephemeral (임시) public key (예: ECDHE, X25519 사용).
    • 랜덤 값: client_random라 불리는 32바이트 난수.
    • 확장 필드:
      • SNI (Server Name Indication): 어떤 도메인으로 접속하는지 알려줌.
      • ALPN (Application-Layer Protocol Negotiation): HTTP/2, HTTP/3 같은 상위 프로토콜 협상.
      • Supported Groups, Signature Algorithms 등.

 핵심 변화: TLS 1.3에서는 클라이언트가 첫 메시지에서 키 교환을 위해 필요한 정보를 미리 다 포함시켜 전송합니다.

 

 2단계: ServerHello

서버가 클라이언트의 요청에 응답합니다.

  • 포함 내용:
    • 선택된 프로토콜 버전: 예: TLS 1.3.
    • 선택된 암호 스위트: 클라이언트가 제안한 것 중 하나 선택.
    • 키 공유 정보: 서버의 ephemeral public key.
    • 랜덤 값: server_random (32바이트).

 핵심 변화: TLS 1.2와 달리, TLS 1.3에서는 이 시점에서 암호 스위트, 키 공유 방식이 결정되고 handshake 메시지들이 암호화되기 시작합니다.

 

3단계: (선택) 서버 인증 및 키 교환

  • 서버 인증 (필요한 경우):
    • Certificate: 서버의 인증서 (일반적으로 X.509).
    • CertificateVerify: 서버가 자신의 private key로 서명해 인증서의 진위를 증명.
  • 키 교환:
    • 클라이언트와 서버는 서로의 ephemeral public key로 shared secret (pre-master secret)을 계산.
    • 이 secret을 기반으로 handshake 및 application traffic용 암호화 키가 생성됨.

 핵심 변화:

  • TLS 1.3에서는 static RSA key exchange가 제거되고, 반드시 forward secrecy가 보장되는 ephemeral (임시) 키만 사용.
  • ServerKeyExchange 메시지가 없고, Certificate와 CertificateVerify로 통합됨.

 

4단계: Finished 및 암호화된 데이터 전송 시작

  • 클라이언트 Finished:
    • 클라이언트는 자신의 Finished 메시지를 보냄 (HMAC 기반의 검증 데이터 포함).
    • 이 메시지는 handshake traffic secret으로 암호화됨.
  • 서버 Finished:
    • 서버는 자신의 Finished 메시지를 보냄.
  • Application Data 전송:
    • 이 시점부터 양쪽 모두 application traffic secret을 사용해 데이터 암호화.
    • TLS record layer를 통해 실제 HTTP 요청/응답 같은 데이터가 전송됨.

 핵심 변화:

  • TLS 1.3에서는 handshake가 끝나기 전에 application data를 전송할 수 있는 0-RTT 모드가 존재 (선택적, 세션 재사용 시에만).

 

핸드셰이크 단계의 큰 차이점 요약

구분 TLS 1.2 TLS 1.3
Round Trip 수 최소 2 RTT 1 RTT (0-RTT 모드 지원)
키 교환 방식 RSA, ECDHE, DHE, PSK 등 다양 ECDHE, DHE, PSK (forward secrecy 필수)
서버 인증 방식 인증서 + (optional) ServerKeyExchange 인증서 + CertificateVerify (simple)
암호화 범위 Finished 이후에만 암호화 ServerHello 이후부터 handshake 암호화
메시지 구조 여러 개의 개별 메시지 (복잡) 단순화된 메시지 구조, 불필요한 단계 제거
0-RTT 지원 불가능 가능 (재연결 시 빠른 전송)
암호 스위트 설계 RSA, RC4, SHA1 등 legacy 포함 최신 알고리즘만 포함, legacy 제거

 

 핸드셰이크 단계별 비교

 

1. ClientHello

  • TLS 1.2:
    • 클라이언트가 지원하는 프로토콜, 암호 스위트, 압축 방식, random 값 전송.
    • (옵션) 세션 재개용 session ID 포함.
  • TLS 1.3:
    • 지원하는 프로토콜에 TLS 1.3 명시.
    • 암호 스위트에서 TLS 1.3 전용 스위트만 보냄.
    • 클라이언트 ephemeral key (예: X25519, ECDHE) 포함 (핸드셰이크 속도 향상).
    • 0-RTT 재연결 시 early data 전송.

 

 2. ServerHello

  • TLS 1.2:
    • 선택한 프로토콜, 암호 스위트, random 값 전송.
    • 세션 재개용 session ID.
    • ServerKeyExchange (ECDHE 키 제공), Certificate 메시지 등 추가 메시지 필요.
  • TLS 1.3:
    • 선택된 암호 스위트, ephemeral key 전송.
    • 이후부터 handshake 메시지 암호화.
    • ServerKeyExchange가 따로 존재하지 않고 Certificate 메시지와 함께 처리됨.

 

3. 키 교환 및 인증

  • TLS 1.2:
    • RSA key exchange: 서버 public key로 pre-master secret 암호화.
    • 또는 ECDHE/DHE: 서버의 ephemeral key 제공 + ServerKeyExchange.
    • 서버 인증: Certificate + ServerKeyExchange + CertificateRequest + ServerHelloDone.
  • TLS 1.3:
    • ECDHE/DHE (forward secrecy 필수).
    • 서버 인증: Certificate + CertificateVerify (private key로 서명).
    • ServerHello 이후 모두 암호화된 채로 전송.

 

4. Finished 메시지

  • TLS 1.2:
    • 서버와 클라이언트가 각자 Finished 메시지를 전송해 integrity 확인.
    • 이후 application data 암호화 시작.
  • TLS 1.3:
    • Finished 메시지는 ServerHello 이후로 암호화됨.
    • 키 유도 과정이 단순화 (HKDF 사용).
    • Finished 후 바로 application data 암호화.

 

5. 성능 및 보안 개선

항목 TLS 1.2 TLS 1.3
성능 2 RTT 이상 1 RTT (0-RTT 재연결 시 거의 0 RTT)
암호 강제 조건 RC4, SHA1 등 legacy 지원 최신 강력한 암호화 및 forward secrecy 강제
공격 대응 취약점 많음 (BEAST, CRIME, FREAK 등) 보안성 강화 (취약 알고리즘 제거, simpler design)

 

728x90

+ Recent posts