TLS 1.3은 키 교환을 앞당기고 낡은 선택지를 줄인다
TLS 1.3의 핵심은 ClientHello에 key_share를 먼저 실어 1-RTT로 암호화 상태에 들어가고, 정적 RSA/DH와 재협상처럼 위험한 선택지를 제거한 것이다.
1-RTT
첫 응답 뒤 바로 보호 채널
ClientHello의 key_share 덕분에 서버 응답을 받은 뒤 트래픽 키를 계산한다.
encrypted early
ServerHello 뒤 대부분 암호화
인증서와 Finished는 핸드셰이크 키로 보호되어 중간 노출이 줄어든다.
0-RTT caution
빠르지만 replay-safe만
재전송되어도 안전한 요청에만 early data를 제한적으로 쓴다.
01 ClientHello
supported_versions + key_share
버전, cipher, ALPN, SNI, 공개 키 공유값을 한 번에 보낸다.
02 ServerHello
선택 결과 + key_share
서버도 공유값을 보내고 양쪽이 같은 handshake secret을 만든다.
03 encrypted handshake
인증서와 Finished 보호
Certificate, CertificateVerify, Finished가 암호화된 흐름으로 간다.
04 application data
HTTP는 트래픽 키 안으로
핸드셰이크 transcript가 맞아야 애플리케이션 데이터가 열린다.
항목
TLS 1.2
TLS 1.3
Full handshake
보통 2 RTT
보통 1 RTT
Cipher suite
키 교환, 인증, 암호, 해시까지 이름에 포함
AEAD와 해시 중심, 키 교환/인증은 확장으로 협상
제거된 것
정적 RSA/DH, 재협상 가능
정적 RSA/DH와 재협상 제거
0-RTT는 지연을 줄이는 도구이지 기본 보안 모델이 아니다. GET처럼 멱등인 요청만 허용하고 결제, 주문, 상태 변경은 1-RTT 이후로 미룬다.