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