TLS 1.3 0-RTT

0-RTT replay 위험

TLS 1.3 0-RTT early data는 이전 세션 키로 첫 요청을 먼저 보내지만, 서버가 같은 데이터를 다시 받을 수 있어 멱등성과 anti-replay 정책이 필수다.

01

세션 재개

클라이언트가 이전 연결의 PSK/ticket을 사용해 early data를 준비한다.

resumption
02

early data 전송

핸드셰이크 완료 전 GET 같은 요청을 먼저 보낸다.

latency cut
03

서버 판정

ticket freshness, anti-replay window, route policy로 수락 여부를 판단한다.

accept/reject
04

재시도 처리

거절되면 클라이언트는 1-RTT 완료 뒤 안전하게 다시 요청한다.

재시도 경로
GET cache
대체로 허용 가능 동일 요청이 여러 번 처리되어도 상태가 바뀌지 않아야 한다.
idempotent
POST payment
거의 금지 결제, 주문, 포인트 사용처럼 재실행 피해가 큰 요청은 1-RTT 이후 처리한다.
state changing
anti-replay
ticket과 시간 창으로 중복 제한 분산 서버에서는 전역 replay 방지 저장소가 어려워 보수 정책이 필요하다.
cluster caveat
fallback
early data reject 시 재전송 가능 클라이언트와 서버가 거절 경로를 정상 오류처럼 처리해야 한다.
425 Too Early

운영 질문

멱등성 같은 요청이 두 번 실행되어도 DB 상태와 외부 부작용이 안전한지 본다.
로그 구분 early data로 들어온 요청을 일반 요청과 구분해 관측한다.
프록시 CDN/LB가 0-RTT를 어디까지 받고 origin에 어떻게 전달하는지 확인한다.