TLS 1.3

TLS 1.3은 key_share를 미리 보내 1 RTT로 줄인다

ClientHello에 (EC)DHE 키 교환 재료를 담아 보내므로, 서버 응답 뒤 핸드셰이크 키와 애플리케이션 키를 만들 수 있다.

1-RTT full handshake 암호화된 handshake 0-RTT 주의
클라이언트
ClientHello + key_share지원 버전, cipher suite, SNI, ALPN, 공개 키 공유값을 한 번에 보낸다.
Finished, 이후 HTTP 요청서버 인증을 확인하고 클라이언트 Finished 뒤 애플리케이션 데이터를 보낸다.
서버
ServerHello + key_share선택 결과를 돌려주고 그 뒤 메시지는 핸드셰이크 키로 보호된다.
{EncryptedExtensions, Certificate, CertificateVerify, Finished}인증서, 서버 서명, Finished가 암호화된 상태로 전송된다.
정적 RSA/DHTLS 1.2에서는 구성에 따라 가능했다.TLS 1.3에서는 제거되고, full handshake는 임시 key_share를 쓴다.
Cipher suite키 교환과 인증까지 이름에 담았다.AEAD와 해시 중심으로 단순해졌다.
0-RTT지원하지 않는다.재개 연결에서 가능하지만 replay 위험 때문에 제한적으로 쓴다.
서버가 마지막으로 확인하는 것

서버는 클라이언트 Finished를 받은 뒤 클라이언트도 같은 handshake transcript와 키를 계산했는지 확정한다.

0-RTT 주의: early data는 서버 응답을 기다리지 않아 빠르지만, 재전송 공격에 취약할 수 있어 멱등 요청 위주로 제한해야 한다.