Hopr 기초 에피소드 3: 익명 라우팅

지난번 우리는 인터넷을 이용하며 생성되는 어마어마한 양의 커넥션 메타데이터에 대해 알아보았습니다. 이 메타데이터는 우리의 온라인 및 오프라인 활동에 대한 프로필을 구축하는데 이용될 수 있습니다.

이것은 프라이버시에 있어 매우 큰 문제이지만 고칠 방법을 찾기란 매우 어렵습니다. 메타데이터는 현재 인터넷이 작동함에 있어 필수적인 요소입니다. 단순히 스위치를 끄는 것과 같이 간단한 해결방법이란 찾을 수 없습니다.

이 에피소드에서 우리는 HOPR와 같은 네트워크를 통해 익명으로 데이터를 라우팅 하는 방법의 기초에 대해 알아볼 것입니다.

익명 메시징의 역설

지난 에피소드에서 이용했던 봉투 비유를 다시 이용해 보겠습니다: 우편을 통해 친구에게 메시지를 보내는 상황을 가정하고, 우편을 배달하는 사람을 믿을 수 없다고 생각하겠습니다. 어떻게 하면 내용을 비밀로 할 수 있을까요? 당신과 친구만이 알 수 있는 코드로 메시지를 작성하는 것이 하나의 옵션이 될 수 있습니다. 이렇게 하면 누군가 중간에 봉투를 열어보더라도 내용을 이해할 수 없을 것입니다. 이는 엔드-투-엔드 암호화와 약간은 헐겁게 유사하다고 볼 수 있습니다.

하지만 지난번 우리는 데이터가 아니라 메타데이터가 실질적인 문제라는 것을 알게 되었습니다. 만약 당신이 그 메시지를 친구에게 보낸다는 사실조차도 알게 해서는 안된다면 어떡할까요? 위에 언급한 코드를 이용한 메시지는 전혀 효용이 없습니다. 수신 주소를 코드화해 입력한다면 당신의 우편은 절대로 목적지에 도달할 수 없을 것입니다.

하나의 솔루션으로 여러 사람으로 이루어진 체인을 거쳐 우편을 보내 편지의 발신지와 최종 수신지를 위장하는 방법을 사용할 수 있습니다. 러시아의 마트료시카 인형처럼 편지봉투를 여러개 준비합니다. 각 봉투는 체인의 다음 사람에게 전달됩니다. 한 사람이 봉투 패킷을 받으면, 가장 바깥쪽 봉투를 열어 다음 수신인을 확인하고 해당 주소로 발송합니다. 이 작업은 최종 수신인인 당신의 친구가 마지막 봉투를 열어 메시지를 확인할 때까지 계속됩니다. 누구든 봉투가 전달되는 전체 과정을 보지 않는다면 전달받은 곳이 최종 목적지인지 혹은 체인 링크의 중간 지점인지 알 수 없을 것입니다.

이것은 Tor 프로젝트와 같은 플랫폼에서 어니언 라우팅이 어떻게 작동하는지에 대한 간단한 비유였으며, 아마 많은 분들이 Tor에 대해서 들어본 적이 있을 것입니다(Tor는 The Onion Router의 약어입니다). 어니언 라우팅에서 앞선 예시의 봉투는 실제 암호화의 레이어이며, 한 사람이 한개 이상의 레이어를 열어보는 것이 불가능하고 메시지가 전송될 경로(혹은 지나온)를 내다보거나 스파이할 수 없습니다. 데이터를 수신할 때, 당신은 단지 데이터가 발송된 직전 노드와 다음으로 전송될 직후 노드에 대해서만 알 수 있습니다.

이렇게 메시지가 여러 수신지를 거쳐 전송되는 프로세스를 릴레이잉(relaying) 이라고 부릅니다. 이는 HOPR에게 이름을 부여하는 것이기도 한데, HOPR에서 데이터는 목적지에 도달하기 전 한 사람으로부터 다른 사람에게 ‘hop(뛰다)’하기 때문입니다. 릴레이어의 전체 집합체를 네트워크 라고 부르며, 네트워크의 각 포인트는 노드 라고 부릅니다.

이것은 꽤 좋은 시스템이며, 사람으로서 메시지의 수신인과 발신인을 추적하기란 매우 어렵고 복잡합니다. 그러나 충분한 분석력을 가지고 있다면 이와 같은 네트워크를 깨는 것이 가능합니다.

네트워크 활동을 추적할 수 있다면, 여기서 노드 사이의 패턴을 찾기 시작할 수 있습니다. 만약 Chāo가 Betty로부터 데이터 패킷을 받고 다른 패킷을 Dmytro에게 보낸다면, 당신은 그들 모두가 같은 체인의 일부라는 것을 추론할 수 있습니다. 이와 같은 추론을 충분히 만든다면 당신은 해당 네트워크의 프라이버시를 깨뜨릴 수 있습니다. 이는 어태커가 Betty, Chāo, Dmytro 중 하나(또는 셋 전부)라면 더욱 쉽습니다!

우리는 두 종류의 어태커로부터 동시에 보호해야 합니다: 네트워크 활동을 바깥에서 모두 관찰할 수 있는 사람, 그리고 하나 혹은 그 이상의 노드를 가진 시스템 내부의 어태커. 기억하셔야 할 점은 공개된 분산형 네트워크에서 누구나 합류할 수 있다는 것입니다. 이 점은 자유에 있어서 필수적이지만 방어를 더욱 어렵게 만든다는 단점이 공존합니다.

패킷 분할

보안을 향상하는 하나의 방법은 메시지를 서로 다른 번호의 여러 개의 패킷 으로 분할하는 것입니다. 모든 패킷이 목적지에 도달하면, 분할될 때 지정받은 번호는 전체 메시지를 재구성하는데 이용될 수 있습니다. 이 시스템은 인터넷에서 표준 데이터 전송으로 이용되고 있지만, 사용자가 각 패킷을 서로 다른 경로를 통해 보내기로 선택할 수 있기 때문에 HOPR와 같은 네트워크에서 더욱 큰 힘을 발휘합니다. 이렇게 경로가 확산되면 추적이 더욱 어려워지며 악의적인 노드가 정보에 액세스할 기회를 크게 감소시킵니다.

하지만 안타깝게도 더욱 어려워진다는 것이 불가능을 의미하지는 않습니다. 이와 같은 복잡성에도 어태커는 여전히 타이밍, 메시지 크기 그리고 커넥션 로그 등의 다른 메타데이터를 이용해 네트워크 내 트래픽에 대한 조리있는 그림을 그릴 수 있습니다. 우리는 보다 나은 무언가를 만들어야 합니다.

다행히 우리는 믹싱 을 도입해 이 접근법을 더 높은 단계로 가져와 복잡성이라는 하나의 레이어를 또 다시 더할 수 있습니다. 이것이 어떻게 작동하는지에 대해서는 다음 글을 통해 알아보겠습니다.