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
'정보보호' 카테고리의 다른 글
| SSRF(Server-Side Request Forgery)의 개념, 그리고 CSRF와의 차이 (0) | 2025.05.06 |
|---|---|
| Buffer Overflow의 개념과 예방방법 (0) | 2025.05.05 |
| 세션 하이재킹(Session Hijacking) 개념 (0) | 2025.05.04 |
| DRM(Digital Rights Management 디지털저작권 관리)의 개념 (0) | 2025.05.03 |
| Replay 공격에 대한 개념 (0) | 2025.05.02 |