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 키 지문의 복사본을 받으시거나 이를 가진 다른 분을 찾으셔야 합니다.
이정도 수준의 공격을 걱정해야 하는 상황이라면, 보안 커뮤니티에 참여해 구성원과 만나서 얘기해보는 걸 추천드립니다.