韓越++陸天波
摘要:隨著網(wǎng)絡(luò)服務(wù)的發(fā)展與人們對隱私要求的日益提高。在提供用戶通信匿名的基礎(chǔ)上,產(chǎn)生了保護服務(wù)器匿名性的需求。第二代洋蔥路由The Second Generation Onion Router(Tor)的隱匿服務(wù)功能就完美地實現(xiàn)了這樣的需求。然而自其提出至今已逾10年,其隱匿服務(wù)技術(shù)并未得到良好的發(fā)展。近年來,隨著網(wǎng)絡(luò)服務(wù)規(guī)模的不斷擴大,在Tor網(wǎng)絡(luò)上架設(shè)大型網(wǎng)絡(luò)服務(wù),或?qū)⒕W(wǎng)絡(luò)服務(wù)遷移至Tor網(wǎng)絡(luò)中的需求逐漸增多。然而,在隱匿服務(wù)設(shè)計之初,由于其實現(xiàn)只考慮了單核單線程的情況,并未能充分利用現(xiàn)在流行的多核架構(gòu),也不支持負載均衡等技術(shù)。因而,其可擴展性成為了服務(wù)提供者需要解決的首要問題。本文通過使用相同的主機名與私鑰運行多個隱匿服務(wù)實例來解決其可擴展性問題,并使用Shadow在離線環(huán)境下進行仿真,最終通過實驗分析了這種方式對Tor隱匿服務(wù)帶來的性能提升及可能存在的問題。
關(guān)鍵詞:計算機網(wǎng)絡(luò);匿名通信;Tor;隱匿服務(wù)
中圖分類號:TP393
文獻標(biāo)識碼:A
DOI:10.3969/j.issn.1003-6970.2016.02.017
引言
近年來網(wǎng)絡(luò)服務(wù)發(fā)展迅猛,網(wǎng)絡(luò)應(yīng)用中用戶對個人隱私及信息安全的要求日益提升,進而產(chǎn)生了保護網(wǎng)絡(luò)服務(wù)隱匿性的需求。The Second Generation Onion Router(Tor)匿名通信系統(tǒng)被稱為第二代洋蔥路由系統(tǒng),是目前最為流行的匿名通信解決方案。它能夠在抵抗多種被動或主動攻擊的同時,保持良好的性能。Tor的低通信延遲、高匿名性、易使用、易部署等諸多特點使得它在近年來得到飛速發(fā)展?,F(xiàn)今,全球已有超過6000個Tor網(wǎng)絡(luò)結(jié)點,超過200萬人使用Tor網(wǎng)絡(luò)進行通信。
Tor于2004年便提出了隱匿服務(wù)(Hidden Service)的概念。自此,Tor不僅可以支持客戶端用戶完成基本的匿名通信服務(wù),還一定程度上確保了隱匿服務(wù)提供方的匿名。通過使用Tor網(wǎng)絡(luò),用戶可以匿名地訪問該隱匿服務(wù),而隱匿服務(wù)提供方也可以維護地理位置不可知的服務(wù)器。 用戶需要通過Tor指定的頂級域名(Top LevelDomain,TLD).onion訪問隱匿服務(wù)。Tor網(wǎng)絡(luò)可以識別自己的TLD,并自動連接到該隱匿服務(wù)。然后,隱匿服務(wù)會將收到的請求交由普通的服務(wù)器軟件進行處理。
雖然Tor的隱匿服務(wù)發(fā)布至今已逾10年,但其發(fā)展遠沒有Tor本身那樣繁盛。隱匿服務(wù)現(xiàn)在處于一個尷尬的境遇。它擁有一定數(shù)量的忠實用戶群體,但很少有研究學(xué)者來專門關(guān)注它。這使得Tor隱匿服務(wù)仍有許多問題需要研究、實驗,以增強其有效性及安全性。且隨著在Tor網(wǎng)絡(luò)上架設(shè)大型網(wǎng)絡(luò)服務(wù),或?qū)⒕W(wǎng)絡(luò)服務(wù)遷移至Tor網(wǎng)絡(luò)中的需求逐漸增多,隱匿服務(wù)的可擴展性自然成為了其需首要解決的問題之一。
1 Tor隱匿服務(wù)概述
1.1 Tor隱匿服務(wù)基本流程
當(dāng)某用戶希望對外提供Web服務(wù)或即時通信服務(wù)時,Tor的隱匿服務(wù)可以幫助服務(wù)提供者隱藏其物理地址。通過提供“集合結(jié)點”(Rendezvous Point,RP),其他用戶可以在對服務(wù)提供者除域名信息外一無所知的情況下,順利訪問其隱匿服務(wù)。
第一步:服務(wù)提供方為了能夠在Tor網(wǎng)絡(luò)中匿名地對外提供服務(wù),需要對Tor網(wǎng)絡(luò)聲明其存在,將一些必要的信息通報給Tor網(wǎng)絡(luò)。因此,在正式提供服務(wù)之前,服務(wù)提供方需要隨機選取Tor網(wǎng)絡(luò)中的幾個中繼結(jié)點,與之建立連接,傳遞服務(wù)的公鑰,并請求這些中繼結(jié)點作為該隱匿服務(wù)的介紹結(jié)點(Introduction Point,IP)。
如圖1所示,隱匿服務(wù)提供方Bob向IPI,IP2,IP3分別建立3條匿名鏈路,并請求他們成為自己的介紹結(jié)點。由于它們之間建立的是Tor匿名鏈路,而非直連,IPI,IP2,IP3三者只知道其服務(wù)相關(guān)的公鑰,并不知道服務(wù)提供方Bob的身份或IP地址。
第二步:如圖2所示,Bob需要為其提供的隱匿服務(wù)生成一個隱匿服務(wù)描述符。
該描述符之中應(yīng)包含:隱匿服務(wù)對應(yīng)的公鑰,隱匿服務(wù)的介紹結(jié)點列表,以及利用隱匿服務(wù)私鑰對該描述符前述部分的簽名。
一旦成功生成了隱匿服務(wù)描述符,它會被上傳到響應(yīng)的隱匿服務(wù)目錄服務(wù)器以供其他用戶查找。其查找索引形式為“XYZ.omon”,其中XYZ為根據(jù)隱匿服務(wù)公鑰生成的隱匿服務(wù)名,一般由16個英文字母組成。至此,隱匿服務(wù)已被成功部署,等待提供服務(wù)。
第三步:如圖3所示,當(dāng)一個用戶想要連接到一個隱匿服務(wù)時,他需要事先通過其他途徑獲得該隱匿服務(wù)對應(yīng)的洋蔥地址,即前述的“XYZ.omon”。得到該地址后,用戶通過分布式哈希表詢問對應(yīng)的隱匿服務(wù)目錄服務(wù)器來獲得與之對應(yīng)的隱匿服務(wù)描述符。若存在該描述符,那么用戶就可以知曉匿名服務(wù)的介紹結(jié)點列表以及其所使用的公鑰信息。
于此同時,用戶隨機挑選一個Tor網(wǎng)絡(luò)中的中繼結(jié)點,并通過告知該結(jié)點一個一次性秘密信息,來請求其作為該用戶的集合結(jié)點RP。
第四步:當(dāng)用戶成功獲取了隱匿服務(wù)的描述符,并設(shè)置了集合結(jié)點后,用戶需要再構(gòu)造一個由隱匿服務(wù)公鑰加密的消息。該消息需包含:集合結(jié)點的地址,以及先前預(yù)先協(xié)商完成的一次性秘密信息。該消息將通過Tor鏈路被發(fā)送至隱匿服務(wù)的某一個介紹結(jié)點,而介紹結(jié)點則會將該消息回傳給隱匿服務(wù)提供者。如圖4所示,隱匿服務(wù)提供方Bob與請求方Alice均通過Tor鏈路來進行數(shù)據(jù)通信,雙方的身份信息都不會被泄露,從而保證了各自的匿名。
第五步:隱匿服務(wù)提供方Bob對用戶Alice發(fā)送來的服務(wù)相關(guān)消息進行解密,并獲得其中的集合結(jié)點地址及一次性秘密信息。隨后,Bob向集合結(jié)點建立匿名鏈路,并向其發(fā)送接收到的一次性秘密信息,如圖5所示。
第六步:集合結(jié)點通知隱匿服務(wù)請求者Alice,自己已成功與隱匿服務(wù)提供方建立起鏈接。Alice確認該消息后,便可以利用通過集合結(jié)點建立起的匿名鏈路進行類似于常規(guī)Tor網(wǎng)絡(luò)通信的匿名通信。對于隱匿服務(wù)提供方亦是如此。
該匿名鏈路與常規(guī)Tor網(wǎng)絡(luò)中的匿名鏈路的主要差別在于,隱匿服務(wù)中的匿名鏈路大多由6個結(jié)點組成,長度是常規(guī)匿名鏈路的2倍。且在該鏈路中,集合結(jié)點明確知道自己的身份。
在整個隱匿服務(wù)協(xié)議的運行過程之中,協(xié)議力求保證通信雙方的匿名性。協(xié)議中所選用的IPI,IP2,IP3,以及RP均無法確切得知通信雙方的身份及地理位置,匿名性由Tor鏈路的特性(單個路由無法得知整條鏈路)提供保障。
1.2 Tor隱匿服務(wù)基本流程
1.2.1 隱匿服務(wù)目錄服務(wù)器與分布式哈希表
為了連接到特定的隱匿服務(wù),用戶客戶端需要對該隱匿服務(wù)的相關(guān)信息進行查詢。在Tor網(wǎng)絡(luò)中,該查詢服務(wù)的實現(xiàn)原理類似于分布式哈希表,可以讓隱匿服務(wù)的描述符在Tor網(wǎng)絡(luò)中被結(jié)點轉(zhuǎn)發(fā)傳播。
權(quán)威目錄服務(wù)器(Directory authorities)會對運行超過24小時的結(jié)點進行投票,來決定該結(jié)點是否有成為隱匿服務(wù)目錄服務(wù)器的資格。這樣會確保只有高可靠性的結(jié)點才會被選作隱匿服務(wù)目錄服務(wù)器結(jié)點。一旦一個中繼結(jié)點被授予HSDir標(biāo)記,就意味著它可以作為隱匿服務(wù)目錄服務(wù)器,有能力處理隱匿服務(wù)描述符,并允許用戶對其進行上傳或下載。
一個隱匿服務(wù)的描述符會被發(fā)布到哪臺隱匿服務(wù)目錄服務(wù)器上是確定的。因此,當(dāng)一個用戶想訪問一個特定的隱匿服務(wù)時,它可以通過計算得知自己需要向哪臺隱匿服務(wù)目錄服務(wù)器去請求所需的隱匿服務(wù)描述符。在同一時刻,網(wǎng)絡(luò)中會有6臺隱匿服務(wù)目錄服務(wù)器持有對同一特定隱匿服務(wù)的描述符。并且,每個客戶端實例也都會保存一個當(dāng)前網(wǎng)絡(luò)中隱匿服務(wù)目錄服務(wù)器列表的子集。
在最初的實現(xiàn)中,Tor網(wǎng)絡(luò)中有一組特定的目錄服務(wù)器用于存儲網(wǎng)絡(luò)中隱匿服務(wù)的描述符。這種實現(xiàn)不能抵抗單點失效,其可擴展性、可用性、抗審查能力等方面也都存在著問題。而現(xiàn)在的設(shè)計則提供了更好的可用性及可擴展性。
分布式哈希表的實現(xiàn)形式使得隱匿服務(wù)描述符的存儲沒有最初設(shè)計中那樣集中。對于特定的隱匿服務(wù),如果持有其隱匿服務(wù)描述符的一臺隱匿服務(wù)目錄服務(wù)器發(fā)生故障,網(wǎng)絡(luò)中還會有其他的隱匿服務(wù)目錄服務(wù)器正常工作,便不會導(dǎo)致隱匿服務(wù)的描述符獲取失敗。并且,這樣的設(shè)計提高了攻擊者針對隱匿服務(wù)目錄服務(wù)器的攻擊難度。
1.2.2 隱匿服務(wù)描述符的創(chuàng)建及發(fā)布
Tor隱匿服務(wù)首先產(chǎn)生兩個相同的描述符,不同的描述符會根據(jù)其描述符ID與得到的簽名進行區(qū)分。
隱匿服務(wù)描述符ID(Descriptor-id)的計算方法如下:
公式(l)中,H為一個安全的哈希函數(shù)H,連接起后述多個值。
pennanent-id為隱匿服務(wù)公鑰截斷前80位的哈希結(jié)果。
time-period為隱匿服務(wù)生效時間的Unix時間戳。
descriptor-cookie是一個可選參數(shù),為一個客戶端和一個隱匿服務(wù)之間用于認證互通而共同協(xié)商的秘密信息。
replica則標(biāo)識了哪兩個副本被建立,它決定了描述符會發(fā)布于分布式哈希表中的位置,下文會針對此作詳述。
完成了描述符的創(chuàng)建后,隱匿服務(wù)會發(fā)布每個副本到3個隱匿服務(wù)目錄服務(wù)器,即共有6臺隱匿服務(wù)目錄服務(wù)器會持有該隱匿服務(wù)的描述符。一個隱匿服務(wù)會去權(quán)威目錄服務(wù)器下載Tor網(wǎng)絡(luò)結(jié)點數(shù)據(jù),保留HSDir標(biāo)識的結(jié)點信息,并按結(jié)點的指紋信息(fingerprint),即結(jié)點公鑰的哈希值排列成環(huán)狀(也稱作哈希環(huán))。順時針順序,取指紋信息與描述符指紋相近的三個中繼結(jié)點作為其隱匿服務(wù)目錄服務(wù)器結(jié)點,保存其隱匿服務(wù)描述符。隱匿服務(wù)描述符的兩個副本都遵循同樣的規(guī)則。如上圖6所示,該匿名服務(wù)的兩個描述符分別選中了nl,n2,n3和kl,k2,k3作為其隱匿服務(wù)目錄服務(wù)器結(jié)點。這種規(guī)則使得兩個指向同一隱匿服務(wù)的描述符,能夠在Tor網(wǎng)絡(luò)中得到更均勻的分布,從而提高其可用性。
當(dāng)隱匿服務(wù)目錄服務(wù)器接收到一個隱匿服務(wù)描述符時,首先要驗證其真實性。它會使用隱匿服務(wù)的公鑰來驗證其描述符中的簽名信息,并將結(jié)果與其描述符ID做比對。另外,如果該隱匿服務(wù)目錄服務(wù)器上已經(jīng)存儲了同一隱匿服務(wù)的描述符,則會對其進行更新。
通常情況下,隱匿服務(wù)會每隔一小時重新發(fā)布它的描述符。另外,在檢測到隱匿服務(wù)目錄服務(wù)器發(fā)生變更或介紹結(jié)點失效時,隱匿服務(wù)也會更新其描述符至對應(yīng)的隱匿服務(wù)目錄服務(wù)器。
1.2.3 隱匿服務(wù)描述符的獲取
對于一個想要連接到隱匿服務(wù)的客戶端,它需要先去獲取隱匿服務(wù)對應(yīng)的有效描述符。
當(dāng)客戶端持有該隱匿服務(wù)描述符的緩存時,它會嘗試直接與之建立連接。如若失效,則需要去重新獲取。
與隱匿服務(wù)發(fā)布其描述符類似,客戶端首先通過權(quán)威目錄服務(wù)器下載Tor網(wǎng)絡(luò)結(jié)點的數(shù)據(jù),并獲取其中包含HSDir標(biāo)識的結(jié)點,根據(jù)其指紋排列成環(huán)。然后,客戶端會根據(jù)欲連接的隱匿服務(wù)的ID來計算可能含有該隱匿服務(wù)描述符的隱匿服務(wù)目錄服務(wù)器地址集合。該集合一般含有6個結(jié)點,客戶端會隨機選擇其一,對隱匿服務(wù)描述符進行獲取。如若失敗,則會依次嘗試。
2 可擴展的Tor隱匿服務(wù)
在最初的設(shè)計實現(xiàn)中,Tor的隱匿服務(wù)并非針對多服務(wù)器系統(tǒng),也沒能充分利用多處理器架構(gòu),或提供負載均衡功能。而隨著近年來網(wǎng)絡(luò)服務(wù)的迅猛發(fā)展,在Tor網(wǎng)絡(luò)上架設(shè)大型網(wǎng)絡(luò)服務(wù)的需求逐漸增多。因此,其可擴展性成為了服務(wù)提供者需要解決的首要問題。
目前,隱匿服務(wù)并不能很方便地進行擴展。大型網(wǎng)站很難在不改變其現(xiàn)有體系結(jié)構(gòu)的情況下,以隱匿服務(wù)的方式遷移到Tor網(wǎng)絡(luò)中。這其中最主要的問題便是,隱匿服務(wù)需要通過介紹結(jié)點接入隱匿服務(wù)。一個隱匿服務(wù)描述符只能對應(yīng)3到10個介紹結(jié)點。而大多介紹結(jié)點只是普通的中繼結(jié)點,有著有限的帶寬,并不善于處理大規(guī)模的流量。
其次,隱匿服務(wù)本身缺乏對負載均衡的支持。雖然我們可以使用TCP/HTTP負載均衡工具(例如HAProxy等)來進行初步的負載均衡,但并沒有類似DNS輪詢這樣的技術(shù)來將客戶端分配到不同的IP上。我們可以設(shè)立很多相同的隱匿服務(wù)當(dāng)作“子服務(wù)“,通過增加描述符數(shù)量來達到類似的效果。這樣的方式雖然在結(jié)果上有一定的吸引力,但同時又會引入更多的問題,比如子服務(wù)間的通信、長期密鑰的存儲、介紹結(jié)點的分配等等。
綜上所述,對Tor隱匿服務(wù)可擴展性的改進大體可以通過兩種方式解決。一是針對提供隱匿服務(wù)的服務(wù)器自身的改進。我們可以簡單地加強其硬件等資源,使其擁有諸如更多的內(nèi)存,更快的CPU;或者改進其體系架構(gòu),使其更有效地利用現(xiàn)有資源,以更低的成本完成性能的調(diào)優(yōu)。二是針對隱匿服務(wù)工作方式的特殊性,在請求來臨時,將不同請求派發(fā)到指向不同實例的介紹結(jié)點,進行有效的流量分發(fā)、使負載均衡。
在這里,我們重點關(guān)注后者。在接下來的實驗中,我們會使用相同的主機名和公鑰運行多個隱匿服務(wù)實例,通過實驗來探究這種方式對提升隱匿服務(wù)性能帶來的收益,并進一步探究運行的實例個數(shù)對提升性能的影響。
3 實驗
3.1 實驗工具
Tor網(wǎng)絡(luò)當(dāng)前擁有數(shù)千個結(jié)點,用戶數(shù)量也在與日俱增。如何在Tor網(wǎng)絡(luò)上進行相關(guān)實驗成為了一個較為重要的問題。而局域網(wǎng)仿真,即是解決該問題的一個重要方法。
Shadow堤一個離散事件網(wǎng)絡(luò)仿真器。它允許用戶在其上建立、仿真一個含上千結(jié)點的大型Tor網(wǎng)絡(luò),以獲得網(wǎng)絡(luò)負載和性能相關(guān)的重要參數(shù)。同時,Shadow也是一個重要的調(diào)試工具,在其上可以運行關(guān)于Tor的相關(guān)確定性實驗,在學(xué)術(shù)界廣受追捧。Shadow在現(xiàn)有版本中已經(jīng)直接附帶了Tor網(wǎng)絡(luò)的幾種基本配置,用以幫助用戶迅速地實現(xiàn)Tor網(wǎng)絡(luò)仿真的起步工作。
Shadow的Tor插件允許用戶通過XML文件來定義、配置其網(wǎng)絡(luò)拓撲和網(wǎng)絡(luò)流量,甚至還可以定義Tor的相關(guān)配置文件,比如各種結(jié)點配置等。在實驗結(jié)束時,Shadow還能產(chǎn)出詳細的日志文件,描述了各結(jié)點CPU、內(nèi)存使用情況,生成、接收到的流量等一系列具體信息。
Shadow附帶了很多實用的日志分析工具,并支持自定義生成實驗結(jié)果的圖表。后文中,我們通過在實驗中監(jiān)控隱匿服務(wù)結(jié)點的使用情況來確定其性能,圖表結(jié)果大多來源于此。
3.2 實驗設(shè)計
接下來,我們將進行兩組實驗,一是通過負載均衡實驗來評估這種擴展方式的性能,二是通過故障之后的服務(wù)切換來衡量其可靠性。
在負載均衡實驗中,我們會記錄各個隱匿服務(wù)實例對客戶端請求的響應(yīng)數(shù)據(jù),也會探究隱匿服務(wù)使用的實例數(shù)量是否會對整個系統(tǒng)的性能產(chǎn)生影響。而在故障轉(zhuǎn)移實驗中,則會重點關(guān)注在某實例發(fā)生故障后,流量重新建立的時間開銷,來衡量隱匿服務(wù)的可靠性。
實驗中,我們選用Shadow對Tor網(wǎng)絡(luò)進行仿真,并保證實驗環(huán)境的一致。本文所有實驗皆運行于同一臺8G內(nèi)存的筆記本,且Shadow中對Tor網(wǎng)絡(luò)拓撲結(jié)構(gòu)的設(shè)置除隱匿服務(wù)結(jié)點外完全相同。每個實驗都會仿真5000Ticks(Shadow中的時間計量單位)。由于計算機內(nèi)存限制,網(wǎng)絡(luò)拓撲由一個權(quán)威目錄服務(wù)器、30個中繼結(jié)點、10個出口結(jié)點、30個隱匿服務(wù)客戶端及若干隱匿服務(wù)服務(wù)器組成。
實驗將模擬一個簡化的Tor網(wǎng)絡(luò),所有隱匿服務(wù)客戶端都會重復(fù)地向同一個.omon地址發(fā)送數(shù)據(jù)包。在負載均衡實驗中,所有的隱匿服務(wù)服務(wù)器會在實驗周期中正常運行;而在故障轉(zhuǎn)移實驗中,一臺隱匿服務(wù)服務(wù)器會在3000ticks時停止服務(wù)。
在這兩個實驗中,我們會分別運行1、2、3、6個隱匿服務(wù)實例,以觀察運行更多的實例是否可以得到更好的性能與可靠性,或者反之亦然。
3.3 實驗結(jié)果
3.3.1 負載均衡實驗
圖7至圖10展示了隱匿服務(wù)實例個數(shù)分別為1、2、3、6時,各隱匿服務(wù)實例接收流量隨時間變化的曲線。
如圖8所示,在只包含2個隱匿服務(wù)實例的情況下,其中一個隱匿服務(wù)實例“hiddenserverl-11.0.0.72”接受了約360MiB的請求流量,占總流量的56%,而另一個實例“hiddenserver2-11.0.0.73”占據(jù)44%??梢姡髁看_實被分發(fā)到兩個實例上,且較為均勻。從而,我們通過實驗也證實了,通過運行多個Tor隱匿服務(wù)實例,確實可以起到簡單的負載均衡效果,來增加其性能。
但是隨著實驗中我們對隱匿服務(wù)實例數(shù)量的增加,流量分配開始變得不均。如圖9所示,實驗在3個隱匿服務(wù)實例下進行,其中一隱匿服務(wù)“hiddenserver3-11.0.0.74”被分配到了約330MiB的流量,約占整體的50%,而其他兩個隱匿服務(wù)實例,“hiddenserverl-11.0.0.72”與“hiddenserver2-11.0.0.73”,分別只分配到約32%和18%的流量。
我們再觀察圖10,在運行6個隱匿服務(wù)實例的實驗中,只有其中4個隱匿服務(wù)實例接收到了流量,另外兩個實例“hiddenserver5-11.0.0.76”與“hiddenserver6-11.0.0.77”所接收到的流量占比甚至不到總量的0%。
由此可見,隨著運行隱匿服務(wù)實例個數(shù)的增多,這種通過簡單運行多實例的方式帶來的負載均衡效果將越來越差。
對比這些隱匿服務(wù)各自發(fā)布描述符的時間,我們猜測,隱匿服務(wù)實例接收到的流量與匿名描述符發(fā)布時間也有著緊密的聯(lián)系,最先發(fā)布描述符的隱匿服務(wù)實例往往會接收到更多的流量。
再來看圖11,它展示了分別運行1、2、3、6個隱匿服務(wù)實例的情況下,隱匿服務(wù)客戶端接收固定字節(jié)文件(1048576 bytes)所消耗時間的曲線。我們可以明顯發(fā)現(xiàn),運行多個實例的隱匿服務(wù)完成下載的時間大幅少于單實例。因此,我們可以得出結(jié)論,一個隱匿服務(wù)運行更多的實例,會讓用戶得到更快的響應(yīng)時間,性能得到顯著提升。
3.3.2 失效轉(zhuǎn)移實驗
在失效轉(zhuǎn)移實驗中,我們同樣會分別運行具有2、3、6個實例的隱匿服務(wù),但會在各實驗大約一半的時間時(3000ticks),關(guān)閉其中一個隱匿服務(wù)實例。
按照Tor隱匿服務(wù)協(xié)議,當(dāng)這一情況發(fā)生時,原本連接到那臺失效的隱匿服務(wù)實例上的客戶端會查詢之前獲取到的隱匿服務(wù)描述符緩存,選擇另一個介紹結(jié)點,試圖與隱匿服務(wù)恢復(fù)連接。直到檢測到所有介紹結(jié)點皆失效,才會到目錄服務(wù)器重新獲取新的描述符,繼而連接到隱匿服務(wù)(另外一個有效的實例上)。
圖12至圖14展示了各隱匿服務(wù)實例接收流量隨時間變化的曲線。后綴帶有“will_stop”的隱匿服務(wù)實例會在3000 ticks處關(guān)閉,表現(xiàn)為3000 ticks后該實例服務(wù)的流量將不再變化,如圖中水平直線所示。
觀察圖12、圖13,當(dāng)一臺隱匿服務(wù)失效后,其他的隱匿服務(wù)很快便承擔(dān)了其流量。究其原因,在這兩個實驗中,各隱匿服務(wù)實例在最開始同時發(fā)布了其描述符至相應(yīng)的匿名服務(wù)目錄服務(wù)器,因而,在遇到某一隱匿服務(wù)實例失效時,通過重新獲取隱匿服務(wù)描述符,便可得到能夠有效連接到隱匿服務(wù)的介紹結(jié)點列表。
我們偶然發(fā)現(xiàn),如果隱匿服務(wù)開啟時間不同,所得到的結(jié)果也會不同。如圖14所示,在這個實驗中,一個隱匿服務(wù)實例“hiddenserver_will_stop-11.0.0.74”在其他實例運行后開啟,因此這個實例的描述符在上傳后會替換所有相應(yīng)隱匿服務(wù)目錄服務(wù)器上的描述符。在這之后連接隱匿服務(wù)的客戶端所獲取的描述符都會指向該最近啟動的隱匿服務(wù)實例。如若此時這個實例關(guān)閉,客戶端便無法獲取到有效的隱匿服務(wù)描述符,直至其他有效的隱匿服務(wù)更新其描述符。
這正如圖14所展示的一樣,在3000ticks后,客戶端由于無法獲取到有效的隱匿服務(wù)描述符,在一定時間內(nèi)會導(dǎo)致整個隱匿服務(wù)的失效。直至4000ticks,其有效的隱匿服務(wù)實例定期更新其描述符,才使得客戶端可以獲取到有效的隱匿服務(wù)描述符,流量與服務(wù)才得以恢復(fù)。
3.3 實驗結(jié)論
通過實驗,我們可以確認運行多個隱匿服務(wù)實例可以完成對請求流量分配的原因。
第一,在任意給定時間,隱匿服務(wù)目錄服務(wù)器上對于一個隱匿服務(wù)可能持有不同的描述符。有的指向?qū)嵗齛,有的指向?qū)嵗齜。
即使所有的隱匿服務(wù)實例同時開啟并發(fā)布他們的描述符。隱匿服務(wù)目錄服務(wù)器接收到描述符的時間也可能會不同。因為隱匿服務(wù)會定期更新它的描述符,所以每個隱匿服務(wù)目錄服務(wù)器只會使最新獲取的描述符生效。
第二,客戶端決定訪問哪個目錄服務(wù)器獲取描述符是隨機的。在真實Tor網(wǎng)絡(luò)中,描述符的同時發(fā)布很難實現(xiàn)。這就導(dǎo)致隱匿服務(wù)目錄服務(wù)器很可能只保存了剛剛開啟的實例的描述符,而沒有保存另外其他的描述符。
但是,因為每個隱匿服務(wù)實例需要一定周期才會更新其描述符,所以網(wǎng)絡(luò)中一段時間中存儲的描述符會發(fā)生變化。這樣會使所有的新連接都鏈接到最新的隱匿服務(wù)實例上,以達到流量的動態(tài)分配。
4 總結(jié)與展望
本文介紹了Tor隱匿服務(wù)的設(shè)計原理,且通過實驗證實了通過運行多個Tor隱匿服務(wù)實例,更準(zhǔn)確的說目錄服務(wù)器持有指向不同實例的描述符,可以起到分散負載的作用。這在一定程度上提高了Tor隱匿服務(wù)的可擴展性。通過負載均衡實驗,揭示了實例數(shù)量與最終負載均衡、性能提升的對應(yīng)關(guān)系。并通過失效轉(zhuǎn)移實驗暴露出了該方法所存在的一些問題。這些都為在Tor中架設(shè)大型隱匿服務(wù)時所需的相關(guān)配置提供了非??捎^的參考價值。
由于工作量和時間的關(guān)系,本文只探討了隱匿服務(wù)可擴展性方面的問題與解決方案。Tor隱匿服務(wù)還存在著很多的問題等待完善。在解決其可用性與可擴展性之后,隨著隱匿服務(wù)的普及,它需要大量的研究者們投身于其安全性上的改進。畢竟,大規(guī)模網(wǎng)絡(luò)服務(wù)技術(shù)已經(jīng)相當(dāng)成熟,而隱匿服務(wù),多了一份保護服務(wù)提供者的隱匿性的責(zé)任,需要在現(xiàn)有技術(shù)之上做出更多的努力。