SNI 암호화, TLS 핸드셰이크 보안을 강화하다!

by DD
3개월 전
조회수 6

TLS 1.3에서 SNI(Server Name Indication)를 암호화하여 개인 정보 보호(Privacy)를 강화하는 기술

Encrypted Client Hello(ECH)는 클라이언트의 ClientHello 메시지를 서버의 공개 키로 암호화

Shared ModeSplit Mode 두 가지 토폴로지(Topology)를 지원하며, 클라이언트-페이싱 서버(Client-Facing Server)백엔드 서버(Backend Server) 간의 역할 분담

GREASE ECH 메커니즘을 통해 ECH 미지원 서버와의 연결에서도 ECH 사용을 시뮬레이션하여 추적(Tracking) 방지

ECH(Encrypted Client Hello)의 핵심 원리

ECH는 ClientHelloOuterClientHelloInner 두 가지 메시지를 활용하여 SNI를 보호한다. 클라이언트는 ClientHelloInner를 암호화하여 ClientHelloOuter에 담아 전송하며, 서버는 이를 복호화하여 ClientHelloInner를 획득한다. 이 과정에서 HPKE(Hybrid Public Key Encryption)를 사용하여 ClientHelloInner를 암호화하고, ClientHelloOuterAAD를 통해 무결성을 보장한다. 특히, ClientHelloOuter는 SNI를 포함하지 않아 중간자 공격(Man-in-the-Middle Attack)으로부터 안전하다.

ECH 구성 및 동작 방식

ECH는 ECHConfig를 통해 서버의 공개 키와 관련 메타데이터를 클라이언트에 제공한다. 클라이언트는 이 정보를 기반으로 ClientHelloInner를 생성하고, 이를 암호화하여 ClientHelloOuter를 구성한다. 서버는 ECHConfig를 사용하여 ClientHelloOuter를 복호화하고, ECH 지원 여부에 따라 ServerHello 또는 HelloRetryRequest를 전송한다. ECH가 거부될 경우, 클라이언트는 public_name을 사용하여 서버를 인증하고, 재시도를 수행한다.

GREASE ECH를 통한 추적 방지

GREASE ECH는 ECH를 지원하지 않는 서버와의 연결에서도 ECH를 시뮬레이션하여 ECH 사용 여부(ECH Usage)를 숨기는 기술이다. 클라이언트는 GREASE 값을 사용하여 encrypted_client_hello 확장을 전송하고, 서버는 이를 무시한다. 이를 통해 ECH를 사용하는 클라이언트와 그렇지 않은 클라이언트 간의 차이를 줄여 추적(Tracking)을 어렵게 만든다. 특히, HelloRetryRequest 발생 시에도 동일한 값을 유지하여 ECH 사용 여부를 숨긴다.

보안 고려 사항 및 공격 완화

ECH는 다양한 보안 공격에 대한 완화 메커니즘을 포함한다. ClientHelloOuterAAD를 사용하여 ClientHelloOuter의 무결성을 보장하고, config_id를 랜덤하게 생성하여 구성 식별자(Configuration Identifiers)를 숨긴다. 또한, 패딩(Padding)을 통해 ClientHelloInner의 길이 정보를 숨기고, HelloRetryRequest Hijack Mitigation 등 다양한 공격에 대한 방어 기법을 제공한다. 이러한 조치들을 통해 SNI 암호화(SNI Encryption)의 안전성을 확보한다.

RFC 9849. TLS Encrypted Client Hello

댓글 0

첫 번째 댓글을 남겨보세요!