Tor 개요

인터넷 통신은 '축적 전송 모델'을 기반으로 해요. '축적 전송 모델'을 우편물의 비유를 통해 이해해봅시다: IP 데이터그램이나 패킷이라 부르는 장소에서 데이터를 전송해요. 현실세계의 우편에 보내는 사람과 받는 사람의 도로명주소가 적혀있는 것처럼, 각 패킷에는 출발지 IP 주소(발송자의 주소)와 목적지 IP 주소(수신자의 주소)가 담겨있습니다. 발송자에서 수신자에 이르는 경로는 라우터로의 홉 여러 번으로 구성되며, 각 라우터는 주어진 목적지 IP 주소를 점검한 후 패킷을 근방의 목적지에 전송해요. 따라서 발송자와 수신자 사이의 각 라우터에서는 발송자가 수신자와 통신 중임을 알게 돼요. 특히, 현지 ISP는 인터넷 사용 추이를 전부 일람할 수 있는 위치에 있습니다. 게다가, 모든 패킷을 볼 수 있는 인터넷 내 각 서버 역시 행적을 모두 일람할 수 있습니다.

Tor는 트래픽을 여러 프록시를 경유하게 해 개인정보를 증진시키는 것을 목표로 해요. 귀하의 통신은 다중 계층으로 암호화되며, Tor 네트워크에서 여러 홉을 통해 최종 수신자까지 전송돼요. 이러한 프로세스를 다음 시각화 자료를 통해 더 알아보세요. 현지 ISP가 현재 조회할 수 있는 건 Tor 노드와 통신 중이라는 사실 뿐이에요. 마찬가지로, 인터넷 내 서버는 Tor 노드와의 통신이 이루어졌다는 사실 외에는 모릅니다.

대국적으로 Tor는 세 개의 개인정보 보호 문제를 해결하려 해요:

첫 번째, Tor는 웹사이트나 다른 서비스가 위치를 파악해 성향과 관심사를 기록한 데이터베이스를 구축하는걸 막는 것을 목표로 해요. Tor를 사용하면, 인터넷 접속에서 정보가 누설되는 걸 막는 기능이 기본으로 설정돼요. 접속될 때마다 얼마나 많은 정보를 제공할지 선택할 수 있게 되는 거죠.

둘째, Tor는 (ISP나 집 와이파이 혹은 라우터에 접속한 사람들과 같은) 현지의 특정인이 트래픽을 조회해 무슨 정보를 얻으려 했고, 어디서 해당 정보를 얻으려 했는지 파악하는 걸 막고자 해요. 또한 학습권과 출판권을 제한하려는 이들을 막고자 해요. Tor 네트워크 일부에라도 접속할 수 있다면, 인터넷 상 어떤 사이트든 닿을 수 있답니다.

셋째, Tor를 통해 접속을 최소 두 개 이상의 Tor 중계기를 거쳐 전송해요. 그렇기에 중계기 하나를 본다 해서 목적지를 파악하는 게 불가능 해요. Tor 중계기는 개인 및 단체에서 운영되므로, 신뢰를 분산시키는 게 기존의 단일 홉 프록시 접근방식보다 더 보안성이 있습니다.

그러나 Tor를 통해 전부 해결되지 못한 개인정보 보호 관련 위험이 존재함을 염두에 두세요: 여전히 잔존한 공격 항목을 참고하세요.

상기한 바와 같이, 감시자가 감시가 가능하고 목적지 웹사이트 · Tor 출구 노드를 조회할 권한이 있다면, 이를 Tor 네트워크 진입할 때와 나갈 때 발생하는 트래픽 시점과 연관지을 수 있습니다. 이와 같은 위협 상황을 Tor는 막지 못해요.

좀 더 확실하게 말씀드리자면, 감시당국이나 사법당국이 네트워크의 일부분을 볼 수 있는 구체적인 권한이 있을 경우, 시작과 끝 트래픽을 조회하고 해당 트래픽의 시점을 연관지음으로써 활동에 대한 혐의를 당국이 입증해낼 수 있습니다. 다시 말씀드리지만, 어떤 지점에 접속했다는 혐의를 받는 당시자가 실제로 그랬을 경우에만 유요한 방식이에요. 대부분의 국가에서 영장 발급에 필요한 '혐의' 자체의 영향력이 '타이밍 상관관계 분석'이 제공하는 영향력보다 이미 훨씬 큰 상황이에요.

게다가, Tor는 여러 TCP 접속에 필요한 회로를 재사용해요. 이로인해 당국에서 주어진 출구 노드에서 포착된 익명이 아닌 트래픽과 익명인 트래픽을 놓고 분석한 후 신원을 특정할 수 있습니다. 따라서 Tor와 다른 애플리케이션을 동시에 사용할 때 조심하셔야 해요. 각 애플리케이션 마다 분리된 Tor 클라이언트를 구동하기까지 하셔야 할 필요가 있다고 봅니다.

"Tor"라는 이름은 여러가지 의미가 있습니다.

Tor는 컴퓨터에서 작동하는 프로그램으로, 인터넷 상에서 안전할 수 있도록 도와요. Tor는 접속이 전세계 자원봉사자가 운영하는 중계기로 구성된 분산형 네트워크 상에서 이루어지도록 설정해 귀하를 보호해요: 이를 통해 누군가가 인터넷 접속을 조회해 어디에 방문했는지 파악하는 걸 방지해요. 또한 방문한 사이트에서 물리적 위치를 파악하는 것도 방지해요. 자원봉사자가 운영하는 중계기의 모음을 Tor 네트워크로 정의해요.

Tor를 이용하는 가장 대중적인 방법은 Tor 브라우저를 사용하는 겁니다. Tor 브라우저는 Firefox에서 많은 개인정보 보호 관련 문제를 수정한 브라우저이에요. Tor에 대해 페이지에서 Tor에 대해 더 알아보세요.

Tor 프로젝트는 Tor 소프트웨어를 개발 및 유지보수하는 비영리 단체(자선 단체)이에요.

'Tor'는 'The onion routing' network의 두문자어이에요. 2001년에서 2002년 사이 우리는 onion 라우팅의 차세대 버전을 설계하고 구현하기 시작했습니다. 이 당시 사람들에게 onion 라우팅 개발 중이라고 말하면, 그들은 "그게 뭔데 니트야"라고 답하기 일쑤였습니다. 설사 내부에서 표준 용어로 정한 건 'onion 라우팅'이라지만, 미 해군 연구소에서 주도했던 실제 onion 라우팅 프로젝트 에서 도출된 용어는 Tor였습니다.

(독일어와 터키어에서 Tor의 의미가 좋기도 했고요)

참고: Tor가 태생적으론 두문자어이긴 해요만, 'TOR'로 쓰지 마세요. 첫 철자만 대문자로 쓰세요. 사실, (Tor에 대한 모든 정보를 뉴스 기사로만 접한 채) Tor 프로젝트의 웹사이트를 보지 않으신 많은 분들이 TOR란 철자가 틀렸다는 사실을 나중에야 깨달으십니다.

아뇨, 삭제해주지 않아요. 귀하의 애플리케이션과 프로토콜을 파악하고 거기서 보낸 데이터를 지우거나 '정화하는' 기능이 탑재된 별개의 프로그램을 사용해야 해요. Tor 브라우저는 사용자 에이전트 문자열과 같은 애플리케이션 단에서의 데이터를 모든 사용자가 동일하게 갖도록 조정해요. 그럼에도 불구하고 Tor 브라우저는 사용자가 폼에 입력한 텍스트와 관련된 어떤 동작도 취할 수 없습니다.

일반적인 프록시 제공는 인터넷 상 공간에서 서버를 개설해요. 트래픽을 개설한 서버가 중계할 수 있도록 해주는 거죠. 이와같은 방식을 통해 간단하고 유지보수하기 쉬운 아키텍처가 만들어집니다. 사용자는 같은 서버에 들어가고 나갑니다. 서버 제공자는 프록시 사용 대가를 요구하거나 모금해달라는 광고를 서버에 내놓을 수 있습니다. 가장 간단한 설정에선 아무것도 설치할 필요가 없습니다. 그냥 브라우저를 주어진 프록시 서버에 지정해두면 돼요. '단순 프록시 서비스 제공자'는 온라인에서의 개인정보나 익명성 보호가 필요하지 않고 프록시 제공자가 나쁜 짓을 안 할 거라 신뢰하는 경우 괜찮은 솔루션이에요. 몇몇 '단순 프록시 서비스 제공자'는 SSL 통해 카페 내 무료인터넷과 같이 특정 지역에서의 감시자로부터 사용자의 접속을 보호해요 .

'단순 프록시 서비스 제공자'는 또한 '단일 장애점'을 생성해요. '단순 프록시 서비스 제공자'는 신원과 인터넷에서 뭐를 보고 있는지 압니다. 서버를 거쳐가는 트래픽을 볼 수 있기 때문이에요. 몇몇 경우, 서비스 제공자가 은행 사이트나 전자상거래 사이트를 중계하는 과정에서 그들이 암호화된 트래픽 내부를 볼 수도 있습니다. 서비스 제공자가 트래픽을 보지 않을 거라는 점, 트래픽 스트림에 광고를 삽입하지 않을 거라는 점, 그리고 인적 사항을 보존하지 않을 거라는 점을 신뢰해야 해요.

Tor는 트래픽이 목적지에 보내지기 전까지 적어도 각기 다른 세 개의 서버를 거치게 해요. 세 중계기마다 암호화 계층이 다르기 때문에, 인터넷 접속을 감시하는 대상은 Tor 네트워크에 보낸 내용물을 수정하거나, 읽을 수 없습니다. 귀하의 트래픽은 (귀하 컴퓨터 내에 있는)Tor 클라이언트와 트래픽이 보내진 전세계 내 장소 사이에서 암호화돼요.

첫 서버에서 절 볼 수 있지 않나요?

볼 수 있을지도 모릅니다. 세 서버 중 첫 서버가 악의를 컴퓨터에서 온 암호화된 트래픽을 조화할지도 모릅니다. 그럼에도 불구하고 신원과 Tor로 뭘 하고 있는지는 알지 못해요. 그저 "이 IP 주소에서 Tor를 사용하고 있습니다."만 파악할 수 있을 뿐이에요. 즉 누군지와 인터넷에서 하는 일을 알아내려는 악의적인 첫 노드에서 여전히 보호받을 수 있는 거예요.

세 번째 서버가 제 트래픽을 볼 수 없나요?

볼 수 있을지도 모릅니다. 세 서버 중 마지막 서버가 악의를 품을 경우 Tor로 보낸 트래픽을 볼 수 있습니다. 그러나 누가 이 트래픽을 보냈는지 알지 못해요. 귀하가 (HTTPS 같은) 암호화 프로토콜을 사용한다면, 마지막 노드에서 파악할 수 있는 정보는 도착지 뿐이에요. Tor와 HTTPS가 서로 작동하는 방식을 Tor and HTTPS 에서 제공하는 시각화 자료를 통해 더 자세히 알아보세요.

예.

Tor 소프트웨어는 자유 소프트웨어예요. 이는 Tor 소프트웨어를 유상 또는 무상으로 수정 여부와 상관없이 재배포할 수 있는 권리를 부여한다는 것을 의미해요. 특정 권한을 요청할 필요도 없습니다.

그러나 Tor 소프트웨어를 재배포할 때, 귀하는 반드시 Tor 프로젝트의 라이선스를 준수해야 해요. 라이선스의 준수는 기본적으로 Tor 프로젝트의 LICENSE 파일을 배포하려는 Tor 소프트웨어 한 켠에 반드시 집어넣어야 함을 말해요.

다만, 보통 Tor의 재배포 문의를 남기는 분들 대다수는 단순히 'Tor 소프트웨어'를 배포하려는 게 아니더라고요. 그분들이 배포하길 원하시는 건 'Tor 브라우저'이에요. This includes Firefox Extended Support Release and the NoScript extension. 따라서 각 프로그램의 라이선스 또한 전부 준수해야 해요. 두 Firefox 확장기능은 'GNU General Public License' 하에서 배포돼요. 한편 Firefox ESR은 'Mozilla Public License' 하에서 릴리스돼요. 라이선스를 준수하는 가장 간단한 방법은 각 프로그램의 소스 코드를 재배포하려는 번들 내부에 전부 삽입하는 거예요.

또한 재배포하려는 프로그램을 받는 분들이 Tor가 무엇인지, 누가 만들었는지, 제공하는 기능(그리고 제공하지 않는 기능)을 알 수 있도록 명확하게 표기해야 해요. 더 자세한 정보를 상표 관련 자주 묻는 질문 에서 확인하세요.

Tor와 같이 사용할 수 있는 프로그램은 매우 많아요. 다만 애플리케이션 레벨에서의 익명성 문제를 Tor 프로젝트에서 모두 조사하지 못했습니다. 따라서 대상 애플리케이션에 안전한 설정이 적용돼있어 추천한다고 말씀드리기가 어려워요. Tor 프로젝트의 위키에 커뮤니티 차원에서 관리하는 특정 애플리케이션에 Tor를 적용하는 방법 문서가 있으니 설명을 보고 따라해보세요. 이 문서에 기여해주시면 정확한 리스트를 유지하는 데 도움이 돼요!

대다수 분들이 Tor 같은 안전한 웹 브라우징을 위한 모든 기능이 담긴 Tor 브라우저를 사용하고 있습니다. 다른 브라우저에서 Tor를 사용하는 방식은 위험할 뿐더러 권장되지도 않아요.

분명히 말씀드리건대 Tor에 백도어는 없습니다.

We know some smart lawyers who say that it is unlikely that anybody will try to make us add one in our jurisdiction (United States). 백도어를 삽입할 거라고 계속 묻는 그들과 싸우겠습니다. (법조인들이 말하는 것처럼) 이길 거예요.

Tor 프로젝트에선 Tor에 절대 백도어를 넣지 않아요. Tor 프로젝트에선 Tor에 백도어를 넣는 건 Tor의 사용자에게 심각하게 무책임한 행위라 생각해요. 그리고 보안 소프트웨어 전반에 나쁜 선례를 남기는 거라고 봅니다. Tor 프로젝트에서 의도적으로 백도어를 당사 보안 소프트웨어에 한번이라도 삽입하는 순간, 그동안 쌓아 온 전문적 평판을 망가뜨리게 돼요. 아무도 다신 우리 소프트웨어를 신뢰하지 못하겠죠. 신뢰하지 못할 엄청난 명분도 생겼으니까요!

그렇긴 하지만, 여전히 많은 사람들이 Tor 프로젝트를 대상으로 교묘하게 공격하고 있습니다. Tor 프로젝트를 사칭하거나, Tor 프로젝트 컴퓨터에 침입할 수도 있습니다. 그러나 Tor는 오픈소스이므로, 언제나 소스를 열람해 의심스런 요소 유무를 검사해볼 수 있습니다. (아무리 못해도 직전 릴리스와의 차이 정도는 확인할 수 있습니다). Tor 프로젝트(혹은 귀하에게 tor를 배포한 기관)에서 소스코드에의 접근권을 주지 않는다면, '재밌는 일'이 일어나고 있다는 지표이에요. 배포 사이트에 누군가가 손을 댔을지 모르므로, 릴리스의 PGP 서명도 확인해보셔야 해요.

또한 익명성에 영향을 미치는 우발적인 버그가 발생할 수도 있습니다. Tor 프로젝트에선 주기적으로 익명성과 관련된 버그를 찾아 수정해요. 그러니 Tor 버전을 최신으로 유지해주세요.

(현재 실제로 사용되는 저지연 익명화 설계 방식 모두가 그렇듯이) Tor 역시 공격자가 통신로 처음과 끝을 조회하게 되면 속수무책이에요. 예를 들어, 네트워크에 들어갈 때 선택한 Tor 중계기를 공격자가 보고 조정할 수 있으며, 방문한 웹사이트도 보고 조정할 수 있다고 가정합시다. 관련 연구 단체에서 파악한 바에 따르면, 이런 상황에서 공격자가 통신로 양 끝에서 오는 볼륨 정보와 타이밍 정보를 상관관계 분석하는 걸 확실히 막을 수 있는 실현가능한 저지연 설계방식은 현존하지 않아요.

그럼 대체 어찌해야 할까요? 공격자가 C 중계기를 조회하고 조정할 수 있다고 가정해 봅시다. 총 N 중계기가 있다고도 가정해 봅시다. 귀하가 시작 중계기와 출구 중계기를 네트워크를 사용할 때마다 새로 선택한다고 할 때, 공격자는 수신하는 모든 트래픽의 상관관계를 분석할 수 있습니다. 이 때의 확률은 대략 (c/n)2 이에요. 그러나 대다수 사용자들에게 프로파일링이란 항시 추적당하는 것처럼 나쁜 겁니다: 공격자의 감시 없이 이것 저것 하고 싶은데 말이죠. 또한 감시하는 공격자는 감시 횟수가 한 번이든, 여러 번이든 나쁜 건 매한가지이에요. 따라서 시작 중계기와 출구 중계기를 아무리 무작위로 많이 골라봐야 사용자가 공격자의 프로파일링에서 벗어날 가능성은 없다는 거죠.

"입구 지킴이" 해결책: 각 Tor 클라이언트는 입구 지점으로 사용할 몇 개의 중계기를 무작위로 선택하고, 첫 번째 홉에 해당 중계기만 사용해요. 해당 중계기가 조정되거나 관측되지 않는다면, 공격자가 완전히 패배한 것이죠. 그리고 사용자는 안전한 거고요. 해당 중계기를 공격자가 조정하거나 관측한다면, 공격자는 사용자 트래픽의 수많은 편린을 접하게 돼요. 그러나 사용자는 기존처럼 프로파일링되지는 않을 겁니다. 따라서 사용자가 프로파일링을 피할 수 있는 가능성이 0이었던 전에 비해 어느정도 존재하게 돼요(대략 (n-c)/n 정도).

An Analysis of the Degradation of Anonymous Protocols, Defending Anonymous Communication Against Passive Logging Attacks, 그리고 특히 Locating Hidden Servers 를 읽고 더 알아보세요.

입구노드의 종류가 적을수록 운영되는 Tor 노드가 적고, Tor 사용자 IP 주소를 목록화하길 원하는 공격자에 대항하는데 도움이 돼요. (설사 사용자가 지칭하는 도착지를 알 수 없다 해도, 공격자는 여전히 Tor 사용자 IP 주소 목록을 통해 이것저것 나쁜 짓을 할 수 있습니다.) 그러나 이 기능은 "디렉터리 지킴이" 디자인으로 변경되기 전까지는 실제로 유용하지 않아요.

Tor는 다양한 종류의 키를 사용하며, 이는 세 가지 목표 때문이에요: 1) Tor 네트워크 내 데이터를 보호받을 권리를 확고히 하는 암호화를 위함, 2) 클라이언트가 의도된 대로 중계기와 통신 중임을 알 수 있도록 하는 인증방식을 위함, 3) 모든 클라이언트가 같은 중계기 구성임을 알 수 있도록 하는 서명방식을 위함.

암호화: 먼저 Tor 내 모든 접속은 TLS 링크 암호화를 사용해요. 따라서 감시자가 어떤 셀이 회로를 구성하는지 확인하기 위해 내부를 들여다보지 못해요. 또한 Tor 클라이언트는 매 회로에서의 중계기마다 임시 암호화 키를 생성해요. 이러한 몇 겹의 암호화 계층 때문에 출구 중계기만 셀을 읽을 수 있습니다. 회로의 목적지에 다다랐을 때, 양쪽에서 회로 키를 제거해요. 따라서 트래픽의 로그를 딴 후 중계기에 침입해 키를 확보하는 공격자의 방식이 성립되지 않아요.

인증: 각 Tor 중계기는 공개 복호화 키를 갖고 있습니다. 이를 'onion 키'라고 해요. 각 중계기가 소유한 'onion 키'는 4주마다 서로 교대해요. Tor 클라이언트가 회로를 생성할 때, 매 단계마다 Tor 중계기가 onion 키를 알고 있는지 입증하도록 요구돼요. 이러한 방식으로 인해, 회로 상의 입구노드는 나머지 전체 경로를 스푸핑할 수 없습니다. Tor 클라이언트가 회로를 선택하기 때문에, Tor의 '분산 신뢰' 특성을 확고히 할 수 있습니다: 즉 회로 내 어떤 단일 중계기도 클라이언트와 클라이언트가 하려는 일 둘 다 알 수가 없습니다.

조정: 클라이언트가 중계기가 무엇인지 어떻게 알 수 있을까요? 또 자신이 주어진 중계기에 맞는 키를 갖고 있음을 클라이언트는 어떻게 알 수 있을까요? 각 중계기는 '신원 키'라고 부르는 장기 공개 키를 갖고 있습니다. 각 디렉터리 기관은 여기에 더해 '디렉터리 서명 키'라는 걸 추가로 갖고 있습니다. 디렉터리 기관은 알려진 모든 중계기의 서명 목록을 제공해요. 해당 리스트에는 각 중계기가 가진 키, 위치, 출구 정책 등이 적시된 각 중계기에서의 인증서(각 중계기의 신원 키에 의한 자체 서명 인증서)가 기재돼있어요. So unless the adversary can control a majority of the directory authorities (as of 2022 there are 8 directory authorities), they can't trick the Tor client into using other Tor relays.

디렉터리 기관이 어디인지 클라이언트가 아는 방법이 있나요?

Tor 소프트웨어에 내장된 각 디렉터리 기관의 위치와 공개 키 목록을 확인할 수 있습니다. 따라서 사용자를 속여 가짜 Tor 네트워크를 이용케 하는 유일한 방법은 변조된 버전의 Tor 소프트웨어를 받게 하는 것 뿐이에요.

제대로 된 소프트웨어를 받았는지 사용자가 어떻게 확인하나요?

Tor 프로젝트가 배포한 소스 코드나 패키지엔 GNU Privacy Guard로 디지털 서명이 돼있습니다. Tor 브라우저의 서명을 확인하는 방법를 확인하세요.

Tor 프로젝트에서 서명한 것인지 확실히 하고자 한다면, Tor 프로젝트 구성원과 대면해 GPG 키 지문의 복사본을 받으시거나 이를 가진 다른 분을 찾으셔야 해요. 이정도 수준의 공격을 걱정해야 하는 상황이라면, 보안 커뮤니티에 참여해 구성원과 만나서 얘기해보는 걸 추천드립니다.

Tor는 회로가 정상 작동 하는 이상, 10분마다 새 TCP 스트림에서 같은 회로를 재사용해요. (회로가 작동하지 않는다면, Tor는 즉시 새로운 회로로 전환해요.)

그러나 단일 TCP 스트림(예시: 장시간 IRC 접속)은 계속 동일한 회로에 남게 됨을 명심하세요. Tor는 개별 스트림을 주어진 회로에서 다른 회로로 전송하지 않아요. 만약 Tor에서 개별 스트림을 다른 회로로 전송한다면, 네트워크 조각을 보는 상대방이 목적지를 볼 가능성이 높아지게 돼요.