標籤:

Tor原理詳解

在介紹Tor詳細原理之前有必要介紹一點密碼學的東西,對理解其原理很有幫助:

密碼學中有兩種常見的加密方式:

  • 對稱加密:加密和解密使用同一個秘鑰,如AES、DES等演算法。
  • 非對稱加密:加密和解密使用不相同的密鑰,這兩個秘鑰分別稱為公鑰(public key)和私鑰(private key)——也就是說私鑰可以解開公鑰加密的數據,反之亦然(很神奇的數學原理)。

Tor是一個三重代理(也就是說Tor每發出一個請求會先經過Tor網路的3個節點),其網路中有兩種主要伺服器角色:

  • 中繼伺服器:負責中轉數據包的路由器,可以理解為代理;
  • 目錄伺服器:保存Tor網路中所有中繼伺服器列表相關信息(保存中繼伺服器地址、公鑰)。

Tor客戶端先與目錄伺服器通信獲得全球活躍中繼節點信息,然後再隨機選擇三個節點組成circuit (電路),用戶流量跳躍這三個節點(hop)之後最終到達目標網站伺服器。如下圖示:

Tor網路

Tor客戶端與目標伺服器的通信分為兩個部分:建立通信鏈路和在通信鏈路上發送數據包

一、建立通信鏈路的過程:

  1. 客戶端與目錄伺服器建立鏈接,並從目錄伺服器中選取一個時延最低的伺服器作為第一個中繼伺服器/OR1;
  2. 客戶端向OR1發送一個請求建鏈請求,OR1驗證完客戶端的合法性後生成一對密鑰(公鑰pubkey_OR1_Client、私鑰prikey_OR1_Client),然後將公鑰pubkey_OR1_Client發回給客戶端(至此,客戶端成功的建立了其與OR1的通信鏈路);
  3. 客戶端又從目錄伺服器中選擇一個時延最低的中繼伺服器OR2,並向OR1發送一個數據包:使用pubkey_OR1_Client加密OR2的地址;
  4. OR1收到數據包後使用prikey_OR1_Client解開數據包,發現是一個讓其自身與另外一個伺服器OR2建立鏈接的請求,那麼OR1重複步驟2與OR2建立鏈接,並將OR2返回的OR1與OR2鏈路的公鑰pubkey_OR1_OR2返回給客戶端;
  5. 客戶端重複步驟3、4,建立OR2與OR3之間的通信鏈路,並接收到OR2與OR3之間鏈路的公鑰pubkey_OR2_OR3;
  6. 至此,客戶端與3個中繼伺服器之間的鏈路/circuit已經成功建立,客戶端擁有3把公鑰:pubkey_Client_OR1、pubkey_OR1_OR2、pubkey_OR2_OR3。

二、發送數據包:

  1. 客戶端將要發送的數據(data)經過3層加密包裹:*第一層:使用pubkey_OR2_OR3加密data:pubkey_OR2_OR3(data);*第二層:使用pubkey_OR1_OR2加密第一層加密後的數據:pubkey_OR1_OR2(pubkey_OR2_OR3(data));*第三層:使用pubkey_Client_OR1加密第二層機密後的數據:pubkey_Client_OR1(pubkey_OR1_OR2(pubkey_OR2_OR3(data)));
  2. OR1收到客戶端發來的數據後使用其與Client鏈路的私鑰prikey_Client_OR1解開數據包,發現數據包是發往OR2的,那麼OR1就將解開後的數據包發送給OR2;
  3. OR2收到OR1發來的數據包重複OR1的步驟:將接收的數據包解開發往OR3;
  4. OR3收到數據包後,使用prikey_OR2_OR3解開數據包,這個時候的數據包是客戶端要發往目的伺服器的真實數據包data。此時,OR3就將data路由給目標伺服器。

數據包是層層包裹,每經過一個中繼伺服器就解開一層,它的結構就跟洋蔥相同,你只能看出它的外表,而想要看到核心,就必須把它層層的剝開(這就它叫洋蔥/Onion路由的緣由)。Tor匿名的原理也正是基於此:真實數據包在層層包裹之後在鏈路上發送,Tor鏈路上的節點不知道數據包的源頭,而只知道它要送往的下一個地址,這樣就無法追蹤到發送者IP地址。

(完)


推薦閱讀:

12個匿名搜索引擎,不會追蹤用戶的搜索記錄
男友說「如果你沒有這張臉,就把你扔了」是什麼意思?
被匿名表白是一種怎樣的體驗?

TAG:匿名 |