“나는 누구와 대화하고 있나?”라는 물음은 한 문장에 두 개의 질문이 겹쳐 있습니다. 하나는 메시지를 쓴 계정에 관한 것이고, 다른 하나는 당신의 클라이언트가 실제로 유지하는 네트워크 연결의 반대편에 있는 기계에 관한 것입니다. 서비스를 거치는 채팅에서 이 둘은 거의 결코 같은 존재가 아니며, 그 차이가 VPN이 메시지를 주고받는 상대에게 무엇을 숨기고 무엇을 숨기지 않는지에 대한 혼란의 대부분을 설명합니다. 토폴로지를 제대로 파악하면 프라이버시 질문은 감정적인 문제가 아니라 답할 수 있는 질문이 됩니다.

당신의 클라이언트는 서비스와 대화하지, 상대방과 대화하지 않는다

각 참가자가 서비스에 접속하고 서비스가 계정 사이에서 메시지를 전달하는 텍스트 채팅 앱을 생각해 보세요. 당신의 클라이언트는 서비스에 대한 연결을 유지하고, 상대 참가자는 같은 서비스에 별도의 연결을 유지합니다. 메시지는 상대의 클라이언트에서 서비스로, 서비스에서 당신의 클라이언트로 이동합니다. 즉 당신의 전송 상대는 상대방의 기기가 아니라 서비스의 끝점입니다.

Alex's client  ->  chat service  ->  your client

이후의 모든 것은 이 하나의 도식에서 나옵니다. 자기 자신의 연결을 보면 서비스가 드러나지, 알렉스가 드러나지 않습니다. 알렉스의 연결을 보면 반대편에서 본 서비스가 드러납니다. 어느 관찰도 그 자체로 상대방 기기에 대한 패킷 수준의 기록이 아니며, 자기 트래픽을 아무리 들여다봐도 그런 기록이 되지 않습니다.

관찰자가 다르면 모으는 증거도 다르다

서비스는 어느 참가자보다 강한 위치에 있습니다. 두 연결을 모두 종료하면서 동시에 어느 계정이 어느 연결의 주인인지 알기 때문입니다. 무엇을 보관하는지, 얼마나 오래, 어떤 기록을 결합하는지, 누구에게 공개하는지는 각각 별개의 질문에 별개의 답이 있으며, “앱이 종단 간 암호화되어 있다”는 말로는 어느 것도 답이 되지 않습니다.

받는 쪽인 당신은 네트워크 사실에는 약하지만 내용 사실에는 강합니다. 메시지 본문, 표시 이름, 보낸 사람이 입력하거나 첨부한 모든 것입니다. 자기 주소를 직접 입력한 보낸 사람은 그것을 공개한 것이며, 그 공개는 네트워크 관찰이 아닙니다. 그렇게 읽힐 뿐입니다.

ObserverSeesCannot conclude
YouYour connection to the service, message contents, sender-supplied detailsThe other client's source address
The other participantTheir connection, message contents, what the service attachesYour source address
The serviceBoth connections, account mapping, delivery metadataWhat it does not retain, or what leaves its boundary

알렉스가 VPN을 통해 접속하면 서비스는 그 연결에 대해 알렉스의 집 주소가 아니라 출구 주소를 볼 수 있습니다. 그것은 서비스가 무엇을 보는지에 대한 진술입니다. 출구 주소가 당신에게 전달된다는 뜻도 아니고, 알렉스의 전송 경로 선택 때문에 당신 자신의 연결이 익명화된다는 뜻은 더더욱 아닙니다.

앱이 정말로 피어 투 피어일 때

중계 모델은 모델일 뿐 법칙이 아닙니다. 일부 메시징 기능은 클라이언트 사이에 직접 경로를 만듭니다. 예를 들어 시그널링 서버를 통해 협상되는 브라우저의 데이터 채널이나, 대용량 데이터를 중계하지 않으려고 두 기기를 직접 연결하는 파일 전송 모드입니다. 그런 경우 전송 상대는 정말로 상대 참가자의 기기이며, 관찰자 분석은 완전히 달라집니다.

앱의 친근한 이름만으로는 어느 경우인지 알 수 없습니다. “다이렉트 메시지”는 누가 읽는지를 설명할 뿐 어떻게 전송되는지는 설명하지 않으며, 같은 앱 안의 통화나 화면 공유 기능은 옆의 텍스트 스레드와 다른 토폴로지를 쓸 수 있습니다. 해당 기능에 대한 공급자 문서를 읽거나, 사용하는 동안 클라이언트가 여는 연결을 관찰하세요.

종단 간 암호화 진술이 다루는 것은 보호된 내용을 누가 읽을 수 있는가입니다. 어떤 서버가 연결을 받는지, 어떤 메타데이터를 보는지, 직접 경로가 있는지에 대해서는 아무것도 말하지 않으며, RFC 6973의 관찰자 능력에 대한 논의는 유용한 규율입니다. 먼저 관찰자를 지목하고, 그 관찰자가 실제로 수집할 수 있는 것을 나열하세요.

이것이 VPN에 의미하는 것

VPN이 바꾸는 것은 서비스가 당신의 연결에 대해 보는 내용입니다. 전송 상대가 누구인지는 바꾸지 않고, 상대 참가자에게 당신 주소에 대한 새로운 시야를 주지도 않습니다. VPN이 메시지를 주고받는 상대에게서 당신을 숨겨 주리라 기대하는 것은 범주 오류입니다. 상대의 클라이언트는 애초에 당신의 클라이언트와 연결된 적이 없습니다.

VPN이 바꿀 수 있는 것은 직접 경로 기능입니다. 앱이 그렇지 않았다면 피어 투 피어 연결을 협상했을 경우, 트래픽을 터널로 보내면 대신 중계를 강제할 수 있고 일부 기능은 다르게 동작하거나 후퇴합니다. 이는 실제 효과지만 토폴로지에 관한 것이지 대화에서 사라지는 것에 관한 것이 아닙니다.

그런 다음 적어 두는 모든 것에서 두 질문을 분리하세요. 어느 계정이 보냈는가, 어느 끝점이 실어 날랐는가. 둘 모두에 명시적으로 답하고, 각 답을 누가 관찰할 수 있는지 적고, 메시지를 추적할 수 있는지에 대한 하나의 판정으로 둘을 합치는 것을 그만두세요.

관련 글