암호화된 SNI란? | ESNI의 작동 방식

암호화된 서버 이름 표시(ESNI)는 사용자 브라우징을 비공개로 유지하는 데 도움이 됩니다. 이는 사용자가 어떤 웹 사이트를 방문하고 있는지가 드러나는, 이전에는 암호화되지 않았던 TLS 핸드셰이크의 일부를 암호화하는 방식으로 이루어집니다.

학습 목표

이 글을 읽은 후에 다음을 할 수 있습니다:

  • 개인 정보 보호 및 보안을 위해 ESNI가 필요한 이유 알아보기
  • 공개 키 암호화 및 DNS 레코드를 사용하여 ESNI가 작동하는 방식 이해하기
  • 안전한 웹 브라우징을 위한 추가적인 개인 정보 보호 중심 프로토콜 살펴보기

관련 콘텐츠


계속 알아보시겠어요?

인터넷에서 가장 인기 있는 인사이트를 한 달에 한 번 정리하는 Cloudflare의 월간 요약본 theNET를 구독하세요!

Cloudflare가 개인 데이터를 수집하고 처리하는 방법은 Cloudflare의 개인정보 취급방침을 참조하세요.

글 링크 복사

암호화된 SNI(ESNI)란?

암호화된 서버 이름 표시(ESNI)는 사용자 검색 데이터를 비공개로 유지하는 데 필수적인 기능입니다. 스누핑하는 제3자가 TLS 핸드셰이크 프로세스를 염탐하여 사용자가 방문하는 웹 사이트를 확인할 수 없도록 합니다. 이름에서 알 수 있듯이 ESNI는 TLS 핸드셰이크의 서버 이름 표시(SNI) 부분을 암호화하여 이 작업을 수행합니다.

SNI는 클라이언트와 서버 간의 연결이 시작될 때 표시할 TLS 인증서를 웹 서버에 알려 줍니다. SNI는 TLS 프로토콜에 추가된 기능으로, 서버가 동일한 IP 주소에서 여러 개의 TLS 인증서를 호스팅할 수 있도록 합니다.

SNI는 우편 주소의 아파트 동호수와 같다고 생각하면 됩니다. 한 단지에 여러 아파트 세대가 있으므로 각 아파트 세대를 구분하려면 각기 다른 번호가 필요합니다. 마찬가지로 서버는 IP 주소로 표시되지만, 클라이언트 장치는 서버에 보내는 첫 번째 메시지에 SNI를 포함시켜 어느 웹 사이트(어느 아파트 세대)에 연결하려는지 표시해야 합니다.

TLS란 무엇인가요?

전송 계층 보안(TLS)은 인터넷에서 통신을 비공개로 안전하게 유지하는 암호화 프로토콜입니다.TLS는 주로 웹 브라우저가 웹 사이트를 로드할 때와 같이 애플리케이션과 웹 서버 간의 통신을 암호화하는 데 사용됩니다.TLS를 사용하는 모든 웹 사이트에는 TLS 인증서가 있어야 합니다.SSL은 프로토콜의 오래된 이름이지만, TLS를 SSL이라고 부르기도 합니다.

모든 TLS 연결은 "핸드셰이크"라고 불리는 작업으로 시작됩니다. 실생활에서 두 사람이 만나 서로 소개할 때 악수를 하는 것처럼, TLS 핸드셰이크는 사용자의 스마트폰과 같은 클라이언트 장치와 웹 애플리케이션 또는 웹 사이트 간에 이루어지는 일련의 소개 통신입니다. TLS 핸드셰이크 중에 두 통신 장치는 다른 단계 중에서도 사용할 암호화 키에 동의합니다. 많은 단계가 필요하지만, TLS 핸드셰이크는 몇 밀리초밖에 걸리지 않습니다.

서버 이름 표시(SNI)는 어떻게 작동할까요?

SNI는 TLS 핸드셰이크의 첫 번째 단계에서 작지만 중요한 부분입니다. TLS 핸드셰이크의 첫 번째 메시지는 "클라이언트 헬로(client hello)"라고 불립니다. 이 메시지의 일부로 클라이언트는 웹 서버의 TLS 인증서를 확인하도록 요청합니다. 서버는 응답의 일부로 인증서를 보내야 합니다.

문제는 많은 웹 서버에서 둘 이상의 웹 사이트를 호스팅하고 각 웹 사이트마다 자체 TLS 인증서가 있을 수 있다는 것입니다. 서버에서 클라이언트에게 잘못된 웹 사이트를 표시하면 클라이언트가 원하는 웹 사이트에 안전하게 연결할 수 없으므로 "연결이 비공개가 아님" 오류가 발생합니다.

SNI는 클라이언트가 연결하려는 웹 사이트를 표시하여 이 문제를 해결합니다. 역설적이게도 SNI를 사용하여 TLS 핸드셰이크가 성공적으로 완료될 때까지는 암호화를 수행할 수 없습니다. 그 결과로 클라이언트 헬로 메시지가 TLS 핸드셰이크가 시작될 때 전송되므로 일반 SNI는 암호화되지 않습니다. 클라이언트와 서버 간의 연결을 모니터링하는 공격자는 모든 추가 통신을 해독할 수는 없다고 하더라도 핸드셰이크의 SNI 부분을 읽어 클라이언트가 어떤 웹 사이트에 연결했는지 확인할 수 있습니다. 공격자는 이 정보를 여러 가지 방법으로 사용할 수 있습니다(예를 들어, 피싱 웹 사이트를 설정하여 사용자를 속일 수 있습니다).

암호화된 SNI는 어떻게 작동할까요?

ESNI는 클라이언트 헬로 메시지의 SNI 부분(그리고 이 부분만)을 암호화하여 SNI를 비밀로 유지합니다. 암호화는 두 사람이 사물함 열쇠를 모두 가지고 있어야만 같은 사물함을 사용할 수 있는 것처럼, 통신의 양쪽(이 경우 클라이언트와 서버)이 정보를 암호화하고 해독할 수 있는 키를 가지고 있는 경우에만 작동합니다. 클라이언트 헬로 메시지는 클라이언트와 서버가 TLS 암호화 키를 협상하기 전에 전송되기 때문에 ESNI 암호화 키는 다른 방법으로 전달해야 합니다.

해결책: 공개 키 암호화. 웹 서버는 DNS 레코드에 공개 키를 추가하여 클라이언트가 올바른 서버를 찾을 위치를 조회할 때 서버의 공개 키도 찾을 수 있도록 합니다. 이는 방문자가 안전하게 집에 들어갈 수 있도록 집 열쇠를 집 밖에 있는 자물쇠 상자에 넣어두는 것과 비슷합니다. 그런 다음 클라이언트는 공개 키를 사용하여 특정 서버만 해독할 수 있는 방식으로 SNI 레코드를 암호화할 수 있습니다. (이는 다소 단순화된 설명입니다. 자세한 기술 설명은 이 블로그 게시물을 참조하세요.)

Alice가 Bob의 웹 사이트(www.bobisawesome.example.com)를 방문하려 한다고 가정해 보겠습니다. 책임감 있는 웹 사이트 소유자라면 모두 그렇듯, Bob은 웹 사이트에 TLS를 사용하여 웹 사이트를 오가는 모든 트래픽을 암호화합니다. 또한 Bob은 Alice와 같은 사이트 방문자를 더욱 안전하게 보호하기 위해 ESNI를 구현했습니다.

Alice가 노트북 브라우저에 https://www.bobisawesome.example.com을 입력하면 노트북에서는 다음과 같은 과정을 거쳐 웹 사이트가 로드됩니다.

  1. Alice의 노트북은 DNS 서버에 쿼리를 보내 웹 사이트의 IP 주소를 찾습니다.
  2. DNS 응답으로 Alice의 노트북에서는 Bob의 웹 사이트를 찾기 위해 사용할 IP 주소를 알게 되며, DNS 응답에는 Bob의 ESNI 공개 키도 포함되어 있습니다.
  3. Alice의 노트북에서는 지정된 IP 주소로 클라이언트 헬로 메시지를 보내며, Bob의 공개 키를 사용하여 메시지의 SNI 부분을 암호화합니다.
  4. Bob의 웹 서버에 Bob의 TLS 인증서가 표시됩니다.
  5. TLS 핸드셰이크가 진행되고 Alice의 노트북에 www.bobisawesome.example.com이 로드됩니다. 네트워크를 모니터링하고 있을 수 있는 공격자는 Alice가 어떤 웹 사이트를 방문하고 있는지 확인할 수 없습니다.*

*이 마지막 진술은 프로세스의 DNS 부분이 DNSSEC와 HTTPS를 통한 DNS 또는 TLS를 통한 DNS를 사용하는 경우에만 해당됩니다(자세한 내용은 아래 참조).

ESNI만으로 웹 브라우징을 비공개로 유지할 수 있을까요?

ESNI는 웹에서 개인 정보 보호 및 보안을 위한 중요한 단계이지만, 다른 새로운 프로토콜과 기능도 중요합니다. 인터넷은 보안과 개인 정보 보호를 염두에 두고 설계되지 않았으므로 웹 사이트를 방문하는 과정에서 비공개가 아닌 여러 단계가 존재합니다. 그렇지만 다양한 새로운 프로토콜이 악의적인 공격자로부터 각 단계를 암호화하고 보호하는 데 도움이 되고 있습니다.

도메인 네임 시스템(DNS)은 사람이 읽을 수 있는 웹 사이트 주소(예: www.bobisawesome.example.com)를 영숫자 IP 주소와 매칭합니다. 이는 모든 사람이 사용하는 대형 주소록에서 누군가의 주소를 찾는 것과 같습니다. 하지만 일반적인 DNS는 암호화되지 않으므로 누구나 다른 사람이 어떤 주소를 조회하는지 알 수 있으며, 누구나 주소록인 것처럼 가장할 수 있습니다. ESNI를 사용하더라도 공격자는 사용자가 어떤 DNS 레코드를 쿼리하는지 확인하고 어떤 웹 사이트를 방문하는지 파악할 수 있습니다.

세 가지 추가 프로토콜 TLS를 통한 DNS, HTTPS를 통한 DNS, DNSSEC가 이러한 격차를 해소하는 것을 목표로 합니다.

TLS를 통한 DNS와 HTTPS를 통한 DNS는 모두 동일한 작업을 수행합니다. 즉, TLS 암호화를 통해 DNS 쿼리를 암호화합니다. 이들 간의 주요한 차이점은 사용하는 네트워크 계층과 사용하는 네트워크 포트입니다. DNSSEC는 DNS 레코드가 DNS 서버를 사칭하는 공격자(DNS 캐시 포이즈닝 공격에서와 같이)가 아닌 합법적인 DNS 서버에서 온 것인지 확인합니다.

암호화된 클라이언트 Hello(ECH)란?

암호화된 클라이언트 Hello(ECH)는 암호화를 통해 클라이언트 Hello의 SNI 부분을 보호하는 TLS 프로토콜의 또 다른 확장입니다. 그러나 ESNI와 달리 ECH는 전체 클라이언트 Hello를 암호화합니다. 이 블로그 게시물에서 ECH에 대하여 자세히 알아보세요.

Cloudflare에서는 ESNI를 지원할까요?

Cloudflare 네트워크는 2018년 9월부터 ESNI를 지원하고 있습니다.Cloudflare는 ESNI를 지원하는 최초의 주요 네트워크였을 뿐만 아니라 ESNI를 개발하는 데도 중요한 역할을 했습니다.ESNI는 아직 공식 RFC 또는 인터넷 표준으로 발표되지는 않았지만, RFC 초안이 준비되고 있습니다.

무료 ESNI 검사 도구를 사용하여 브라우저의 보안, 개인정보 보호, ESNI 사용 여부를 확인하세요.SNI가 만들어진 이유 또는 TLS 핸드셰이크의 작동 방식을 자세히 알아보세요.