본문 바로가기
Network Security

The Onion Router (TOR)

by Hangii 2024. 6. 10.

Background

TLS(Transport Layer Security)는 IP header를 암호화하지 않는다. 만약 TLS가 header를 암호화한다면, header 정보를 탈취하려는 중간자 공격을 막을 수 있어 좋아보이기도 한다.

하지만 IP header를 암호화해버리면, Network Layer에서 routing 시에 destination IP address로 패킷을 전달할 수 없게 된다. Router가 해당 packet을 어디로 전달할지에 대한 정보가 header에 있기 때문이다. 그러면 router에게 IP packet의 header를 공개하는 것이 불가피한 상황에서, 어떻게 하면 중간자 공격으로부터 자유로울 수 있을까?

 

Linkability Issue

만약 TLS 차원에서 데이터를 암호화한 후, router들만 이를 decrpyt하여 확인할 수 있는 알고리즘을 만들었다고 하자. 그래도 위의 문제로부터 자유로울 수는 없다. 중간 공격자가 router들의 encrpyt된 input/output 데이터를 모니터링한 후 destination에 도달할 때까지 추적할 수 있기 때문이다. 이를 linkability issue라고 부른다. Router A의 암호화된 output이 Router B의 input으로 전달되는 것을 확인하면, 패킷이 Router A에서 Router B로 전달됨을 알 수 있고, 이 과정을 계속 반복하면 destination을 알아낼 수 있다는 거다. 

 

Mix Network

이런 공격을 막기 위해, 라우터 내부에서 packet을 deform하는 것이 필요하다. 

대표적인 방법으로는 Mix Network가 있다. Mix라고 부르는 프록시 서버들이 연결되어있는 네트워크를 말하는데, 

여기서 메세지는 다음 전달하고자 하는 라우터의 public key로 encrpyt되고, 라우터의 주소와 함께 다음 Mix의 public key로 encrypt된다. 이 때 공격자들이 메세지 내용을 유추하는 것을 방지하기 위해 일종의 salt 역할을 하는 random string을 추가한다. 이 네트워크의 가장 중요한 특징은 Mix들의 데이터 전송 경로가 사전에 확정되어있다는 것이다.

 

메세지가 다음 mix로 전달되는 과정을 수식으로 표현하면 다음과 같다.

(1)에서 sender A가 random string R0와 msg를 concatenate하고 receiver B의 public key로 encrypt해 Kb를 얻는다. 그리고 다시 random string R1과 Kb, 그리고 B의 address를 다음 mix의 public key로 encrpyt한다. 

앞에서 mix들이 데이터를 주고받는 경로는 고정되어있다고 했으므로, 다음 mix의 주소를 A가 알아내려는 노력을 들이지 않고 전송만 하면 된다. 

 

(2)에서 다음 mix가 데이터를 수신하면, 자신의 private key로 decryption을 진행하여 R1, Kb, bdst를 얻는다. 여기서 R1은 버리고 Kb를 b의 주소로 전송한다. 

 

위의 예제는 mix가 하나일 때만을 설명한건데, 중간 mix들이 여러 개 있다고 생각하면, 이들이 데이터를 주고받는 흐름을 유추하는 것은 거의 불가능할 것이다. 즉, src와 dst 사이의 link를 끊어, end-to-end communication의 도청을 방지할 수 있게 된다. 

 

Onion Router

Onion Router에서 msg가 encrypt된 모습

 

Mix net에서 전달되는 데이터는 위 그림처럼 src부터 dst에 도달하는 과정에서 거치는 모든 router의 public key로 중첩되어 encrypt된 형태일 것이다. 양파 껍질처럼 까도 까도 encrpyt된 형태가 나오기 때문에 onion router라고 부른다.

msg는 다음과 같이 선행되는 router에서 다음 router의 public key로 encrypt되어 전달되고, 다음 router가 받아서 자신의 secret key로 decrpyt하여 확인할 수 있게 된다.

 

TOR

TOR 소프트웨어는 Onion Router들로 이루어진 네트워크를 사용한다. 자원하여 자신의 PC를 router로서 사용하기로 선택하면, encrypted된 정보들이 해당 PC를 거쳐 dst에 도달하게 된다. msg를 받는 사람 입장에서는 TOR의 종료 노드로부터 데이터가 오는 것처럼 보인다. TOR는 네트워크 경로를 파악하기 어렵기 때문에 DDos 공격 등에 악용되는 경우도 있다.

 

TOR에서 웹 호스팅도 지원하는데, 여기서 호스팅 된 웹의 도메인은 .onion이라고 한다. (꽤 귀엽다는 생각이 든다..)

 

TOR Connection Establishment

TOR 네트워크에서는 목표한 라우터만이 msg를 확인할 수 있도록 하기 위해, 사전에 주고 받은 세션 키를 가지고 encryption을 진행한다. 그러기 위해선 당연하게도 통신을 시작하기 전에, 경로 상에서 소통을 해야 하는 모든 장치들이 키를 주고 받는 connection establishment 과정이 필요하다. 아래 예제는 Diffie-Hellman ephemeral 방식으로 key exchange를 하는 과정을 나타낸다.

TOR의 connection establishment 과정

 

먼저 S와 OR1가 key exchange를 하는 과정은 다음과 같다:

S에서 g^(x1)을 OR1의 public key로 encrypt하여 전송하면, OR1이 이를 받고 자신의 secret key를 g^(x2) 형태로 전송한다. 그럼 S와 OR1은 각자 g^(x1x2)를 계산하여, K1을 얻게 된다.

 

다음으로 S와 OR2가 key exchange하는 과정을 살펴보자.

S가 앞에서 사용했던 secret key와 다른 secret key x2를 생성한다. (Ephemeral이라고 부르는 이유가 이거다.) g^(x2)를 OR2의 public key로 encrypt하고, 이 cypher text에 OR2의 주소를 concatenate한다. 그 다음 이 전체 데이터를 앞에서 생성한 K1으로 encrpyt하여 OR1에 전달한다. 

OR1은 이 데이터를 받은 후 decrpyt하여 본인은 해독하지 못하는 cypher text와 이를 전달해야 하는 주소를 얻게 된다. 받은 주소에 데이터를 전달하면, OR2가 받아 본인의 secret key로 decrypt한다. 그러면 S가 보냈던  g^(x2)를 가지고 g^(x2y2)를 계산하여, K2를 얻게 된다. 또한 g^(y2)를 다시 OR1에 전달하고, OR1은 사전에 정의한 키 K1으로 이를 encrypt하여 S에 전달한다. 

 

이렇게 하면 src와 모든 router 간의 key exchange가 이뤄지고, 이후부터는 생성한 session key로 msg를 encrypt하여 전달하면 된다.

'Network Security' 카테고리의 다른 글

Message Authentication Code (MAC)  (0) 2024.06.11

댓글