VPN 제공업체가 볼 수 있는 것과 볼 수 없는 것
출구는 주소, 시간, 그리고 Encrypted Client Hello를 쓰지 않으면 TLS 핸드셰이크에 담긴 사이트 이름까지 본다. 보존은 별개의 문제다.
터널은 로컬 네트워크를 당신의 트래픽 밖으로 밀어낸다. 하지만 반대편에서 패킷이 개방 인터넷에 닿기 전에 모든 것을 처리하는 회사를 없애지는 않는다. 이 위치는 사업 모델이자 동시에 프라이버시 문제다. 따라서 쓸모 있는 질문은 제공업체가 당신을 볼 수 있는지가 아니라 무엇을 보고, 무엇에 이름을 붙일 수 있으며, 무엇을 보관하는지다.
신뢰가 실제로 옮겨 가는 곳
암호화는 당신의 기기에서 제공업체 서버까지 이어지고, 그 바깥 구간이 바로 로컬 네트워크가 보는 전부다. 제공업체는 그 구간의 반대쪽 끝을 쥐고 있으므로 터널을 복호화하고 패킷을 계속 전달한다. 그 자체가 결함은 아니라 당신이 산 서비스의 정의다. 신뢰는 사라진 것이 아니라 지역 사업자에서 출구 사업자로 옮겨 갔다.
그 위치에서 제공업체는 당신의 출발지 주소, 접속한 시각, 대략 얼마나 전송했는지, 어떤 목적지에 접촉했는지를 알게 된다. 그중 무엇도 메시지를 읽을 필요가 없으며, 범주를 나누는 이유가 바로 여기에 있다. 제공업체 간의 흥미로운 차이는 그 관측이 이후 어떻게 다뤄지는가에 있다.
출구가 불가피하게 처리하는 것
출구가 범주를 얼마나 확실히 볼 수 있는지에 따라 순서를 매겨 보라. 어떤 행도 암호화를 깨뜨릴 필요가 없고, 피할 수 있는지에 대해서는 행마다 답이 다르다.
| Category | Visible at the exit | Why |
|---|---|---|
| Your public address | Always | It is the address the tunnel arrives from |
| Connection times and volume | Always | Accounting data, not content |
| Destination IP addresses | Always | The exit has to route the packets |
| HTTPS hostname (SNI) | Normally, unless ECH is used | Sent in the clear in the TLS ClientHello |
| DNS names | Only if DNS is plaintext | DoH or DoT hides the query; plaintext is readable by the forwarder |
| Page paths and form contents | Not normally | Protected by the destination site's TLS session |
네 번째 행이 바로 대부분의 사고 모델이 놓치는 부분이다. 현대 브라우저는 사이트 이름을 ClientHello, 즉 TLS 핸드셰이크의 첫 메시지에 넣고, 그 필드는 모든 DNS 질의가 종단 간 암호화되어 있어도 출구에서 읽을 수 있다. Encrypted Client Hello가 협상되지 않으면 이름은 목적지 주소 옆을 평문으로 이동한다. 암호화된 DNS가 바꾸는 것은 누가 질의를 보는가이며, 누가 이름을 보는가가 아니다.
오래된 연결의 인증서에도 마찬가지로 TLS 1.3은 서버 인증서를 암호화하지만 TLS 1.2 핸드셰이크는 스트림을 기록하는 관찰자에게 이름을 노출할 수 있다. 둘 다 전송의 사실이며 제공업체의 정책이 아니다.
TLS가 덮는 것과 덮지 않는 것
사이트가 HTTPS를 제공할 때 브라우저는 그 사이트의 엔드포인트와 TLS 연결을 맺으며, VPN 서버와 맺지 않는다. 제공업체는 암호화된 레코드를 전달하고 목적지 주소, 시점, 대략적인 크기를 알게 된다. ECH가 작동하지 않으면 사이트 이름은 ClientHello에 실려 가고, 페이지 본문은 두 경우 모두 암호화된 채로 남는다. 예상치 못한 루트 인증서는 이 경계를 바꾸므로 인증서 경고는 존중받아 마땅하다.
평범한 HTTP에는 출구 너머에 그런 보호가 없다. 터널은 제공업체까지의 구간을 보호하고, 그 뒤로 요청은 VPN이 없을 때와 똑같이 이동한다. ECH는 지키는 것이 이름이지 내용이 아니므로 그것을 고치지 않는다.
보존은 가시성과 다른 문제다
사업자는 연결 데이터를 메모리에서 처리하고 아무것도 남기지 않을 수도 있고, 일부만 남기고 그것이 브라우징 기록이 아니라고 정확히 설명할 수도 있다. 로그 없음 주장은 구호가 아니라 범주로 읽어야 하며, 연결 기록, 타임스탬프, 총량, 목적지 데이터, 계정 식별자, 지원 메시지가 모두 해당한다. 제공업체는 정직하게 브라우징 로그를 두지 않으면서도 계정 기록과 서비스 운영에 필요한 메타데이터를 보관할 수 있다. 가시성은 그중 어느 범주가 저장되는지 알려주지 않는다.
감사는 대상 시스템과 그것이 포괄한 기간에 대한 증거이고, 오픈 소스 클라이언트 코드는 서버가 아니라 클라이언트를 설명한다. 둘 다 유용하며, 어느 것도 출구 뒤의 모든 저장 시스템을 대변하지 않는다. 감사의 배지가 아니라 범위를 물어야 한다.
제공업체를 가르는 질문
무엇이 보관되고 얼마나 오래, 누가 꺼낼 수 있는지 물어라. 디렉터리 등재, 앱 개발자, 특정 서버를 돌리는 사람이 서로 다른 세 당사자일 수 있으므로 출구를 누가 운영하는지 물어라. 평문 ClientHello는 DNS 질의 없이도 사이트를 지목하므로 DNS가 어떻게 처리되는지와 쓰는 경로에서 ECH가 지원되는지도 물어라. 법적 요청에 무슨 일이 일어나는지 묻고, 답변은 의도가 아니라 능력의 설명으로 읽어라.
EFF의 VPN 고르기 안내서는 이런 질문에 쓸 만한 점검표이며, 어떤 서비스에 대한 판결이 아니라 틀이다. 마케팅 페이지는 보존 정책이 아니다. 이 중 어느 것도 VPN을 무용하게 만들지 않고, 누구를 믿어야 하고 무엇을 위해 믿어야 하는지가 바뀔 뿐이다.