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