[ODOP:17]Handshake TLS 1.3
TLS 1.3 버전의 Handshake 를 설명 합니다

TLS 1.2 와 다르게 TLS 1.3 은 총 1회의 왕복으로 Handshake 가 완료 된다
Handshake 흐름
Client Hello (Client -> Server)
다음의 정보를 포함 하여 서버로 접근 요청을 보낸다

- TLS 1.3 에서는 안전하지 않은 암호 모음에 대한 지원이 제거 되었다.
사용 가능한 암호 모음 수가 크게 줄었으므로 클라이언트는 서버가 선호하는 키 교환 방법을 알고 있을 가능성이 높다
암호 모음 목록

클라이언트 무작위

프로토콜 버전

Server Hello (Server -> Client)
💡 이 시점에서 서버는 아래의 데이터를 소지하고 있다
- 클라이언트 무작위
- 클라이언트의 매개변수(Premaster secret 을 생성하기 위한 매개변수)
- 암호 모음(Cipher suite)
- 서버 무작위(서버 자체 생성)
위 데이터들을 이용하여 서버는 마스터 암호를 생성 할 수 있게 된다
위 계산을 모두 끝내고 서버는 클라이언트에게 데이터를 보낸다
- 서버의 인증서
- 디지털 서명
- 서버 무작위
- 암호 모음 목록(Cipher suite)
Finished (Client -> Server)
클라이언트가 서명 및 인증서를 확인하고 마스터 암호를 생성 한 후 서버에게 완료 메시지를 전송한다
이로서 TLS 핸드셰이크가 종료 된다
0-RTT (Zero Round-Trip Time Resumption)
💡 해당 기능은 보안적 허점을 가지고 있는 기술이다 서버 에서는 Replay Attack 에 대한 대비를 해야 하므로 제한적으로 사용 된다
TLS 1.3 은 클라이언트-서버 간의 왕복 통신이 전혀 필요 없는 더욱 빠른 버전의 TLS 핸드 셰이크를 지원한다
클라이언트와 서버가 이전에 서로 연결된 적이 있는 경우(이전에 사용자가 웹 사이트를 방문한 적이 있는 경우) 사용 가능한 전략 이다.
0-RTT 연결 과정
- 초기 핸드셰이크
- TLS 1.3 의 일반적인 핸드셰이크 과정을 통해 TLS 통신이 활성화 된다
- 이 때 서버는 클라이언트에게 PSK(Pre-Shared key) 또는 세션 티켓을 제공한다
- PSK 는 이후 재 연결 시 사용 할 수 있는 사전 공유 키를 의미한다
- 세션 티켓은 이전 세션의 암호화 상태를 나타내는 정보 이다
- 세션 재개
- 이전 연결에서 받은 PSK or 세션 티켓을 활용하여 서버와의 재연결을 시도 할 수 있다
- 클라이언트는
Client Hello
메시지에 PSK 와 함께 0-RTT 데이터를 포함하여 전송 한다- 이 데이터는 이미 암호화 된 상태로 전송 됨
- 서버 처리
- 서버는 클라이언트가 제공한 PSK 를 확인하고, 유효하다면 즉시 0-RTT 를 처리할 수 있다
유효하지 않을 시 TLS 1.3 의 1-RTT 를 시도한다 - 서버가 0-RTT 데이터를 수락 하면 클라이언트는 추가적인 대기 시간 없이 데이터 전송이 가능하다
- 서버는 클라이언트가 제공한 PSK 를 확인하고, 유효하다면 즉시 0-RTT 를 처리할 수 있다
0-RTT 의 보안적 허점: 재전송 공격(Replay Attack)
재전송 공격 (Replay Attack)
악의적인 사용자가 클라이언트가 보낸 0-RTT 데이터를 중간에 가로채어 서버에 여러 번 전송 하여,
서버가 동일한 데이터를 여러번 처리 하게 하는 공격이다
이 문제를 해결하기 위해, 서버는 0-RTT 데이터의 재전송 메커니즘을 구현해야 한다
- 멱등성 구현
- 재전송 여부 판단하여 서버 처리 중단