仇潤(rùn)宇,王軼駿,薛 質(zhì)
(上海交通大學(xué) 網(wǎng)絡(luò)空間安全學(xué)院,上海 200240)
互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展給人們的生活帶來了極大便利,越來越多的個(gè)人信息在網(wǎng)絡(luò)上傳播。在享受互聯(lián)網(wǎng)便利性的同時(shí),人們的隱私保護(hù)意識(shí)逐漸提高,匿名通信網(wǎng)絡(luò)得到了越來越多的關(guān)注,暗網(wǎng)(Darknet)也因此誕生。
匿名通信網(wǎng)絡(luò)旨在提供匿名的、無法被第三方識(shí)別的網(wǎng)絡(luò)通信服務(wù),人們使用這些匿名通信網(wǎng)絡(luò)隱藏他們的網(wǎng)絡(luò)活動(dòng)。在當(dāng)前的匿名系統(tǒng)實(shí)現(xiàn)技術(shù)中,洋蔥路由技術(shù)被匿名通信網(wǎng)絡(luò)普遍采用,其中I2P和Tor是現(xiàn)如今使用最廣泛的兩種匿名通信網(wǎng)絡(luò)。I2P作為Tor的一種變體,采用“大蒜路由”技術(shù)使得收發(fā)雙方能夠隱藏自己的真實(shí)地址,以達(dá)到匿名通信的目的。
因?yàn)榘稻W(wǎng)自身的高匿名性和安全性,暗網(wǎng)成了很多灰色產(chǎn)業(yè)如信息販賣和違禁物品販賣的溫床。2018年3月,國(guó)內(nèi)著名視頻網(wǎng)站AcFun的800萬條賬戶信息在暗網(wǎng)某論壇被公開售賣[1];2013年9月,華住集團(tuán)旗下品牌酒店的5億住客信息在暗網(wǎng)某論壇以8比特幣的價(jià)格公開兜售[2]。在這種背景下,越來越多的國(guó)家和組織開始研究匿名網(wǎng)絡(luò)去匿名化的技術(shù),希望以此來控制這些非法產(chǎn)業(yè)的源頭。
國(guó)內(nèi)外現(xiàn)有的研究主要聚焦于I2P網(wǎng)絡(luò)的性能、規(guī)模以及流量特征等方面。
Bernd Conrad[3]等人對(duì)Tor和I2P兩種著名的低延時(shí)匿名通信系統(tǒng)進(jìn)行了系統(tǒng)比較和分析,結(jié)果顯示根據(jù)不同的應(yīng)用領(lǐng)域兩種匿名通信系統(tǒng)分別有自己的優(yōu)勢(shì)。Nguyen Phong Hoang[4]等人對(duì)I2P匿名網(wǎng)絡(luò)的研究結(jié)果表明,盡管I2P網(wǎng)絡(luò)是分散的,但是審查者可以通過將本地I2P節(jié)點(diǎn)的已知節(jié)點(diǎn)列入黑名單的方法,使內(nèi)網(wǎng)中的用戶無法訪問I2P網(wǎng)絡(luò)。Zincir-Heywood[5]等人對(duì)I2P的共享帶寬與匿名性之間的關(guān)系作了深入研究,結(jié)果顯示共享帶寬越多,I2P用戶的匿名性越強(qiáng)。Juan Pablo Timpanaro[6]等人設(shè)計(jì)并成功部署了I2P網(wǎng)絡(luò)的第一個(gè)大規(guī)模監(jiān)控系統(tǒng),結(jié)果表明I2P網(wǎng)絡(luò)中有約30%的用戶使用的是匿名文件共享服務(wù)。Christoph Egger[7]等人分析并實(shí)施了一些可以用來對(duì)I2P用戶進(jìn)行去匿名化的攻擊,得到的結(jié)論顯示雖然I2P擁有一定的對(duì)攻擊防御的措施,但是針對(duì)DHTs攻擊(如Sybil攻擊和Eclipse攻擊)仍然會(huì)被攻擊者利用。曹旭[8]等人通過爬蟲程序?qū)witter、Pastebin以及Reddit三個(gè)站點(diǎn)進(jìn)行I2P的域名收集,實(shí)驗(yàn)結(jié)果顯示I2P的匿名性要高于Tor和Freenet,但I(xiàn)2P的使用規(guī)模要小于Tor和Freenet。李金栓[9]等人詳細(xì)分析了I2P匿名通信系統(tǒng)的運(yùn)行原理和通信協(xié)議,提出了基于報(bào)文載荷長(zhǎng)度熵過濾的方法對(duì)I2P流量進(jìn)行識(shí)別。劉培朋[10]等人的分析表明,當(dāng)前I2P路徑選擇算法仍然面臨著來自內(nèi)部和外部的巨大威脅。
現(xiàn)有的研究成果大多停留在對(duì)I2P網(wǎng)絡(luò)性能和規(guī)模的研究上,論證I2P網(wǎng)絡(luò)在匿名通信方面的效果及其優(yōu)勢(shì)。少數(shù)人對(duì)I2P網(wǎng)絡(luò)的流量特征進(jìn)行了分析,探討了通過流量特征識(shí)別網(wǎng)絡(luò)中I2P流量的可能性以及其可能受到的攻擊和部署攻擊的可行性。本文針對(duì)I2P網(wǎng)絡(luò)容易受到的共謀攻擊提出一種可以減輕攻擊帶來影響的節(jié)點(diǎn)選擇優(yōu)化算法,能夠增強(qiáng)I2P網(wǎng)絡(luò)的匿名性。
I2P是一個(gè)面向信息、基于對(duì)等網(wǎng)絡(luò)的低延時(shí)匿名通信網(wǎng)絡(luò)。I2P的概念在2003年的IIP項(xiàng)目中首次被提出[8]。I2P匿名網(wǎng)絡(luò)旨在提供高匿名性的網(wǎng)絡(luò)通信服務(wù)。在I2P中通信收發(fā)雙方之間的通信內(nèi)容難以被惡意攻擊者掌握。目前,I2P可以提供的匿名服務(wù)包括匿名網(wǎng)頁(yè)瀏覽、匿名網(wǎng)站、匿名博客以及匿名電子郵件等。
I2P網(wǎng)絡(luò)中的所有用戶同時(shí)也充當(dāng)著I2P網(wǎng)絡(luò)的路由節(jié)點(diǎn),任意一個(gè)用戶發(fā)送的信息都要經(jīng)過數(shù)個(gè)路由節(jié)點(diǎn)組成的隧道(Tunnel),以達(dá)到隱藏真實(shí)收發(fā)雙方的目的。這樣第三方的網(wǎng)絡(luò)監(jiān)聽者只能知曉當(dāng)前路由節(jié)點(diǎn)的上一跳地址和下一跳地址,而無法掌握整個(gè)收發(fā)雙發(fā)的全部信息。I2P網(wǎng)絡(luò)的整體架構(gòu)與Tor網(wǎng)絡(luò)有很多相似的地方[9],但實(shí)際上I2P網(wǎng)絡(luò)提供的服務(wù)與后者完全不同。Tor網(wǎng)絡(luò)使得用戶能夠在保證自己隱私的前提下匿名訪問明網(wǎng)和被網(wǎng)絡(luò)審查者屏蔽的網(wǎng)站,而I2P網(wǎng)絡(luò)更注重保護(hù)網(wǎng)絡(luò)中的各種信息,所以通信雙方都必須是I2P網(wǎng)絡(luò)中的節(jié)點(diǎn)。
I2P網(wǎng)絡(luò)主要由用戶客戶端、網(wǎng)絡(luò)中參與的節(jié)點(diǎn)和網(wǎng)絡(luò)數(shù)據(jù)庫(kù)(NetDb)3個(gè)部分組成。下面簡(jiǎn)要介紹I2P網(wǎng)絡(luò)中大蒜路由、隧道以及網(wǎng)絡(luò)數(shù)據(jù)庫(kù)3個(gè)重要的概念。
大蒜路由是Tor網(wǎng)絡(luò)中洋蔥路由的變體,I2P網(wǎng)絡(luò)中的數(shù)據(jù)包通過使用包含多個(gè)節(jié)點(diǎn)的隧道,使得隧道中的任意一個(gè)節(jié)點(diǎn)都無法同時(shí)獲知通信雙方的具體信息,以達(dá)到匿名的目的。
與Tor一樣,數(shù)據(jù)在傳輸過程中經(jīng)過的各個(gè)節(jié)點(diǎn)都被認(rèn)為是不可信的,所以I2P在通信過程中進(jìn)行了端到端加密、隧道加密和傳輸加密3層加密。
首先,在代理生成消息后,先使用對(duì)方的公鑰進(jìn)行加密,也就是端到端加密;其次,消息進(jìn)入出口網(wǎng)關(guān)后,先進(jìn)行隧道加密(對(duì)稱加密);最后,根據(jù)輸出隧道的節(jié)點(diǎn)順序從后往前層層加密,也就是傳輸加密(非對(duì)稱加密)。消息經(jīng)歷輸出隧道的每一跳時(shí)都進(jìn)行一次對(duì)應(yīng)的傳輸解密,得到下一跳的地址和解密的數(shù)據(jù),再將數(shù)據(jù)發(fā)送給下一個(gè)節(jié)點(diǎn),直到隧道的終點(diǎn)。進(jìn)行隧道解密后,得到網(wǎng)關(guān)預(yù)處理的信息,并將該信息發(fā)送給Bob的輸入網(wǎng)關(guān)。當(dāng)Bob本地客戶端收到最后的加密數(shù)據(jù)后,使用私鑰對(duì)數(shù)據(jù)進(jìn)行解密,即可收到最終的明文內(nèi)容。
I2P隧道是I2P網(wǎng)絡(luò)在Tor網(wǎng)絡(luò)“洋蔥路由”基礎(chǔ)上衍生出的機(jī)制,本地客戶端選擇網(wǎng)絡(luò)中的節(jié)點(diǎn)作為隧道的參與者,搭建一條單向數(shù)據(jù)傳輸?shù)耐ǖ馈R粭lI2P隧道由數(shù)個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)(默認(rèn)為3個(gè)節(jié)點(diǎn))按固定順序組成,通常一條隧道需要擁有一個(gè)入口節(jié)點(diǎn)(隧道中的第一個(gè)節(jié)點(diǎn))和一個(gè)出口節(jié)點(diǎn)(隧道中的最后一個(gè)節(jié)點(diǎn))。
I2P隧道根據(jù)隧道中信息方向的不同分為發(fā)送信息的輸出隧道(Inbond Tunnel)和接收信息的輸入隧道(Outbound Tunnel)。圖1展示了Alice發(fā)送數(shù)據(jù)給Bob的整個(gè)過程。發(fā)送方Alice建立了一條輸出隧道,接收方Bob建立了一條輸入隧道。Alice輸出隧道的終點(diǎn)(Outbound Endpoint)將需要發(fā)送的信息發(fā)送給Bob輸入隧道的網(wǎng)關(guān)節(jié)點(diǎn)(Inbound Gateway),輸入隧道的網(wǎng)關(guān)可以接收任何用戶的消息并發(fā)送給接收方Bob。每個(gè)I2P本地客戶端需要同時(shí)維護(hù)多個(gè)輸入隧道和輸出隧道,以滿足用戶的各種匿名服務(wù)需求。
如果從隧道功能來劃分,I2P隧道主要有探測(cè)隧道、客戶端隧道和共享隧道3種類型。探測(cè)隧道的主要功能是與洪范節(jié)點(diǎn)通信、創(chuàng)建新的隧道和測(cè)試現(xiàn)有隧道;客戶端隧道主要用于滿足本地客戶端和其他節(jié)點(diǎn)之間的正常通信;共享隧道是指本地客戶端作為他人隧道參與者的隧道。共享隧道的數(shù)量根據(jù)網(wǎng)絡(luò)需求、共享帶寬和本地生成的通信量而變化。

圖1 I2P中Alice與Bob通信過程
隧道的創(chuàng)建需要用戶客戶端從NetDb中檢索已知的路由節(jié)點(diǎn)信息,選擇符合條件的路由節(jié)點(diǎn)作為自己的隧道節(jié)點(diǎn)。如果創(chuàng)建的是出口隧道,本地客戶端自己充當(dāng)出口網(wǎng)關(guān)的角色;反之,則充當(dāng)入口網(wǎng)關(guān)的角色。隨后,本地客戶端隧道創(chuàng)建的信息發(fā)送給隧道中的節(jié)點(diǎn),直到隧道末端節(jié)點(diǎn)也獲得信息并反饋給隧道創(chuàng)建者。該隧道創(chuàng)建完成并獲得一個(gè)獨(dú)特的隧道ID,如圖2所示。當(dāng)隧道創(chuàng)建完成后,本地客戶端需要將網(wǎng)關(guān)的地址和隧道ID上傳給NetDb,使得網(wǎng)絡(luò)中的其他節(jié)點(diǎn)能夠獲取該隧道的信息。

圖2 輸出隧道創(chuàng)建過程
客戶端根據(jù)節(jié)點(diǎn)的順序?qū)?shù)據(jù)包進(jìn)行層層加密,每一層解密后得到下一個(gè)路由節(jié)點(diǎn)的地址,直到隧道的終點(diǎn)。這樣的過程保證了隧道中的中繼節(jié)點(diǎn)無法獲得任何隧道中傳輸信息的內(nèi)容,中繼節(jié)點(diǎn)只負(fù)責(zé)按照隧道中節(jié)點(diǎn)的順序從上一個(gè)節(jié)點(diǎn)獲取數(shù)據(jù)包并轉(zhuǎn)發(fā)給下個(gè)中繼節(jié)點(diǎn)。
I2P網(wǎng)絡(luò)的網(wǎng)絡(luò)數(shù)據(jù)庫(kù)Network Database(簡(jiǎn)稱NetDb)允許節(jié)點(diǎn)查詢其他節(jié)點(diǎn)和隱藏服務(wù)的信息。網(wǎng)絡(luò)數(shù)據(jù)庫(kù)包含著I2P網(wǎng)絡(luò)中所有網(wǎng)絡(luò)節(jié)點(diǎn)的消息,主要由兩個(gè)部分組成。
(1)路由信息(RouterInfo):RouterInfo中包含與I2P中路由節(jié)點(diǎn)通信必須的信息,如公鑰、地址和端口等;
(2)租約集(LeaseSet):LeaseSet中包含訪問特定網(wǎng)絡(luò)服務(wù)所必須的信息,如網(wǎng)關(guān)路由器地址、輸入隧道的隧道ID以及隧道傳輸?shù)墓€等。
當(dāng)I2P中的一個(gè)節(jié)點(diǎn)試圖與其他節(jié)點(diǎn)建立通信時(shí),需要獲得各個(gè)節(jié)點(diǎn)的聯(lián)系信息,包括IP地址、端口號(hào)和公鑰等。這些信息被封裝在一個(gè)數(shù)據(jù)結(jié)構(gòu)中,即路由節(jié)點(diǎn)信息(RouterInfo)
NetDb分布式服務(wù)器包含I2P中所有路由節(jié)點(diǎn)的信息,由網(wǎng)絡(luò)中一種特殊對(duì)等節(jié)點(diǎn)洪泛節(jié)點(diǎn)(Floodfill Routers)維護(hù),洪泛節(jié)點(diǎn)隨機(jī)根據(jù)節(jié)點(diǎn)帶寬選取或者節(jié)點(diǎn)志愿加入。洪泛節(jié)點(diǎn)為NetDb收集網(wǎng)絡(luò)中的路由信息,并與其他洪泛節(jié)點(diǎn)同步,回應(yīng)網(wǎng)絡(luò)中用戶對(duì)其他路由節(jié)點(diǎn)的RouterInfo或LeaseSet的查詢請(qǐng)求。當(dāng)I2P中一個(gè)節(jié)點(diǎn)想要訪問一個(gè)入口時(shí),需要先詢問洪泛節(jié)點(diǎn)哪個(gè)節(jié)點(diǎn)距離該入口最接近。如果被詢問的洪泛節(jié)點(diǎn)擁有該入口,會(huì)提供節(jié)點(diǎn)需要的信息,否則它應(yīng)該知道其他距離該入口更近的洪范節(jié)點(diǎn),并將該詢問轉(zhuǎn)發(fā)給它們。
新加入I2P的網(wǎng)絡(luò)節(jié)點(diǎn)需要通過“補(bǔ)種”服務(wù)器(Reseed Servers)獲得I2P網(wǎng)絡(luò)一小部分節(jié)點(diǎn)的信息以訪問I2P網(wǎng)絡(luò)。與Tor的中央目錄服務(wù)器不同,這些“補(bǔ)種”服務(wù)器并不能掌握整個(gè)I2P網(wǎng)絡(luò)的全貌,它們各自只擁有一小部分I2P網(wǎng)絡(luò)節(jié)點(diǎn)的信息。這些“補(bǔ)種”服務(wù)器和網(wǎng)絡(luò)中其他的網(wǎng)絡(luò)節(jié)點(diǎn)一樣,只是它們額外擁有了能夠?qū)π录尤牍?jié)點(diǎn)聲明一小部分I2P已知路由節(jié)點(diǎn)的功能。
I2P網(wǎng)絡(luò)中的對(duì)等節(jié)點(diǎn)選擇是為本地客戶端生成的消息及其應(yīng)答選擇傳輸路徑的節(jié)點(diǎn)序列的過程。每個(gè)路由器都要維護(hù)一個(gè)已知節(jié)點(diǎn)性能的配置文件(Profile),本地客戶端通過配置文件評(píng)估各個(gè)對(duì)等節(jié)點(diǎn)的帶寬、每個(gè)對(duì)等節(jié)點(diǎn)多久接受一次隧道溝通的請(qǐng)求以及對(duì)等節(jié)點(diǎn)是否過載或無法可靠地執(zhí)行,并通過這些性能數(shù)據(jù)選擇搭建隧道的節(jié)點(diǎn)。
根據(jù)前文介紹的I2P匿名網(wǎng)絡(luò)的傳輸機(jī)制可知,I2P網(wǎng)絡(luò)的匿名性和通信效率取決于節(jié)點(diǎn)選擇的優(yōu)劣,因此隧道節(jié)點(diǎn)的選擇在I2P網(wǎng)絡(luò)中具有非常重要的意義。這里首先介紹當(dāng)前I2P網(wǎng)絡(luò)中的節(jié)點(diǎn)選擇算法。
I2P網(wǎng)絡(luò)的隧道節(jié)點(diǎn)選擇算法工作在源路由模式下,即發(fā)送方負(fù)責(zé)選擇隧道節(jié)點(diǎn)并創(chuàng)建隧道。與其他匿名網(wǎng)絡(luò)不同,路由節(jié)點(diǎn)自己提供的性能數(shù)據(jù)不被其他路由節(jié)點(diǎn)信任,因?yàn)镮2P網(wǎng)絡(luò)中可能存在不想?yún)⑴c其他隧道搭建而宣稱自己性能較差的“慵懶”節(jié)點(diǎn)或者想要參與更多隧道搭建而宣稱自己性能很好的惡意節(jié)點(diǎn)。因此,I2P中的路由節(jié)點(diǎn)主動(dòng)測(cè)量其他路由節(jié)點(diǎn)的性能,如帶寬、隧道創(chuàng)建成功率、工作負(fù)載和可達(dá)性等。同時(shí),節(jié)點(diǎn)的性能評(píng)估不斷實(shí)時(shí)更新狀態(tài),包括路由節(jié)點(diǎn)響應(yīng)查詢的時(shí)間、路由節(jié)點(diǎn)參與隧道故障的次數(shù)和路由節(jié)點(diǎn)的最后通信時(shí)間。
目前,I2P對(duì)其他路由節(jié)點(diǎn)的選擇主要基于容量(Capacity)和速度(Speed)兩個(gè)指標(biāo)。為了表示路由節(jié)點(diǎn)的綜合性能,下面簡(jiǎn)要介紹幾個(gè)節(jié)點(diǎn)選擇算法的重要指標(biāo)。
2.1.1 容 量(Capacity)
容量是指一個(gè)路由節(jié)點(diǎn)在一段時(shí)間內(nèi)成功建立的隧道數(shù)量。創(chuàng)建隧道的操作開銷需要根據(jù)響應(yīng)隧道請(qǐng)求的意愿來評(píng)估路由節(jié)點(diǎn)。由于帶寬、CPU使用和參與隧道的數(shù)量有限制,路由節(jié)點(diǎn)有時(shí)可能拒絕或丟棄隧道請(qǐng)求。
容量計(jì)算是通過歷史統(tǒng)計(jì)信息估計(jì)一個(gè)路由節(jié)點(diǎn)同意參與下一時(shí)間的隧道數(shù)量。歷史統(tǒng)計(jì)信息的權(quán)重隨著時(shí)間的推移降低,評(píng)估的時(shí)間間隔為10 min、30 min、1 h和1 d。具體的計(jì)算公式如下:

C代表該節(jié)點(diǎn)的容量得分,c(t)表示參與隧道的路由節(jié)點(diǎn)在最近t時(shí)刻的統(tǒng)計(jì)信息,c(t)計(jì)算公式為:
C(t)=accepts-rejects-timeouts-4×failures(2)
accepts代表路由節(jié)點(diǎn)接受成為隧道參與節(jié)點(diǎn)的次數(shù),rejects代表路由節(jié)點(diǎn)拒絕成為隧道參與節(jié)點(diǎn)的次數(shù),timeous代表路由節(jié)點(diǎn)不響應(yīng)參與隧道的次數(shù),failures代表路由節(jié)點(diǎn)同意參與隧道搭建但是隧道測(cè)試失敗的次數(shù)。
2.1.2 帶 寬(Bandwidth)
帶寬被定義為一個(gè)節(jié)點(diǎn)在不同時(shí)間段內(nèi)速度的加權(quán)結(jié)果。路由節(jié)點(diǎn)將其在隧道中1 min內(nèi)發(fā)送和接收的字節(jié)數(shù)作為隧道中每個(gè)參與節(jié)點(diǎn)的速度,而隧道節(jié)點(diǎn)在1 min內(nèi)的帶寬是其參與的所有隧道的平均速度,計(jì)算公式為:

B代表路由節(jié)點(diǎn)的權(quán)重帶寬,b(t)代表最近t時(shí)刻內(nèi)3個(gè)最大帶寬的平均值。
2.1.3 在線時(shí)間(Online Time)
在線時(shí)間是指節(jié)點(diǎn)在線的時(shí)間,認(rèn)為節(jié)點(diǎn)在線的時(shí)間越長(zhǎng),保持在線的可能性越大。如果節(jié)點(diǎn)在測(cè)試期間處于脫機(jī)狀態(tài),則聯(lián)機(jī)時(shí)間重置為0。在線時(shí)間的計(jì)算公式如下:

T是節(jié)點(diǎn)在線時(shí)間的分?jǐn)?shù),ot代表節(jié)點(diǎn)的在線時(shí)間,rt代表系統(tǒng)的運(yùn)行時(shí)間。
2.1.4 可達(dá)性(Reachability)
可達(dá)性是路由節(jié)點(diǎn)選擇的必要條件。一個(gè)節(jié)點(diǎn)的可達(dá)性表示該節(jié)點(diǎn)是否擁有被選作隧道參與者的資格。
2.1.5 時(shí) 延(Delay)
I2P每10 min測(cè)量一次路由節(jié)點(diǎn)的時(shí)延,以確定被測(cè)量節(jié)點(diǎn)是否在線。顯然,一個(gè)路由節(jié)點(diǎn)的時(shí)延越低,該節(jié)點(diǎn)的得分越高。
基于以上5個(gè)評(píng)估指標(biāo),I2P網(wǎng)絡(luò)將所有路由節(jié)點(diǎn)劃分為3個(gè)級(jí)別:可達(dá)節(jié)點(diǎn)(Reachable Node)、高容節(jié)點(diǎn)(High-Capacity Node)和快速節(jié)點(diǎn)(Fast Node)。其中,快速節(jié)點(diǎn)是高容節(jié)點(diǎn)的子集,高容節(jié)點(diǎn)是可達(dá)節(jié)點(diǎn)的子集。
當(dāng)前的I2P網(wǎng)絡(luò)的節(jié)點(diǎn)選擇基礎(chǔ)算法分為3個(gè)步驟,如圖3所示。

圖3 傳統(tǒng)I2P節(jié)點(diǎn)選擇算法
第一步,測(cè)試本地客戶端已知的所有路由節(jié)點(diǎn)的可達(dá)性,并把可以通過測(cè)試的節(jié)點(diǎn)歸類為可達(dá)節(jié)點(diǎn);
第二步,計(jì)算可達(dá)節(jié)點(diǎn)的可靠性得分(Reliability Score),這里可靠性得分是指節(jié)點(diǎn)容量和在線時(shí)間的綜合得分。一個(gè)路由節(jié)點(diǎn)的可靠性得分計(jì)算公式如下:

R代表該節(jié)點(diǎn)的可靠性得分;C表示該路由節(jié)點(diǎn)的容量得分;T表示該節(jié)點(diǎn)的在線時(shí)間得分;k代表調(diào)整在線時(shí)間得分權(quán)重的系數(shù)(默認(rèn)值為1),取值范圍0~10。
通過公式計(jì)算每個(gè)路由節(jié)點(diǎn)的可靠性,并得到所有已知路由節(jié)點(diǎn)的平均可靠性得分(AveReliability Score)。可靠性得分高于平均得分的節(jié)點(diǎn)被放入高容節(jié)點(diǎn)池中。此外,本地客戶端還會(huì)使用最大值和最小值作為高容節(jié)點(diǎn)池中節(jié)點(diǎn)數(shù)量的上限和下限。如果節(jié)點(diǎn)池中的路由節(jié)點(diǎn)數(shù)量小于最小值,那么更多可靠性評(píng)分較低的路由節(jié)點(diǎn)將被選中并添加到節(jié)點(diǎn)池中;反之,如果節(jié)點(diǎn)池中的路由節(jié)點(diǎn)數(shù)量大于最大值,那么評(píng)分較高的節(jié)點(diǎn)會(huì)被選中添加到高容節(jié)點(diǎn)池中。
第三步,計(jì)算高容節(jié)點(diǎn)池中每個(gè)高容節(jié)點(diǎn)的帶寬得分(Bandwidth Score),同時(shí)計(jì)算平均帶寬得分(AveBandwidth Score),將帶寬得分高于平均帶寬得分的路由節(jié)點(diǎn)添加到快速節(jié)點(diǎn)池中。類似地,本地客戶端使用最大值和最小值界定快速節(jié)點(diǎn)池中路由節(jié)點(diǎn)數(shù)量的上下限。如果快速節(jié)點(diǎn)池中的節(jié)點(diǎn)數(shù)量低于設(shè)定的最小值,那么更多帶寬得分較低的路由節(jié)點(diǎn)將被添加到快速節(jié)點(diǎn)池中;反之,如果快速節(jié)點(diǎn)池中的節(jié)點(diǎn)數(shù)量高于最大值,則只選取帶寬得分最高的路由節(jié)點(diǎn)添加到節(jié)點(diǎn)池中。
雖然現(xiàn)行的I2P節(jié)點(diǎn)選擇算法保證了傳輸隧道的穩(wěn)定性和可靠性,但是很難防御攻擊者對(duì)I2P網(wǎng)絡(luò)的共謀攻擊。這里的共謀攻擊指的是攻擊者在I2P網(wǎng)絡(luò)中部署大量惡意的路由節(jié)點(diǎn),這些惡意節(jié)點(diǎn)不僅可以直接拒絕本地客戶端的服務(wù)請(qǐng)求,還可以互相協(xié)同收集I2P網(wǎng)絡(luò)中用戶的信息,以達(dá)到去匿名的攻擊目的。這些惡意節(jié)點(diǎn)由于優(yōu)秀的性能,往往會(huì)成為I2P網(wǎng)絡(luò)中的洪泛節(jié)點(diǎn),同時(shí)擁有更高的可能性被其他用戶選擇加入快速節(jié)點(diǎn)池成為隧道的參與者。顯然,如果本地客戶端的隧道中存在多個(gè)惡意節(jié)點(diǎn),將很難保證本地用戶通信的匿名性和系統(tǒng)性能。
當(dāng)前的I2P網(wǎng)絡(luò)中,發(fā)達(dá)國(guó)家和地區(qū)(如歐洲、俄羅斯和美國(guó))相對(duì)于其他國(guó)家和地區(qū)擁有更多的I2P路由節(jié)點(diǎn)。所以,在傳統(tǒng)的I2P節(jié)點(diǎn)選擇算法下,隧道中的多個(gè)節(jié)點(diǎn)可能來自于同一個(gè)地區(qū)。實(shí)際上,在課題研究的過程中就曾經(jīng)發(fā)現(xiàn)大量來自紐約州立大學(xué)石溪分校的I2P節(jié)點(diǎn)處于本地客戶端的快速節(jié)點(diǎn)池中,也發(fā)現(xiàn)了兩個(gè)來自該大學(xué)的節(jié)點(diǎn)參與同一隧道的搭建。為了對(duì)抗這種針對(duì)I2P節(jié)點(diǎn)選擇的共謀攻擊,I2P官方建議使用者增加隧道長(zhǎng)度以減少隧道中惡意節(jié)點(diǎn)的比例。但是,由于I2P網(wǎng)絡(luò)本身的網(wǎng)絡(luò)時(shí)延較高,這種增加隧道長(zhǎng)度的解決方法無疑會(huì)增加通信時(shí)延。
為了更好地解決這種問題,提出了一種節(jié)點(diǎn)選擇優(yōu)化算法,如圖4所示。優(yōu)化的I2P節(jié)點(diǎn)選擇算法在傳統(tǒng)算法的基礎(chǔ)上增加一個(gè)步驟,即根據(jù)節(jié)點(diǎn)的IP地址劃分每個(gè)節(jié)點(diǎn)所屬的區(qū)域。這里假設(shè)攻擊者擁有在一個(gè)國(guó)家及周邊地區(qū)部署大量惡意節(jié)點(diǎn)的能力。因此,優(yōu)化算法將節(jié)點(diǎn)按地理位置的大洲劃分為6個(gè)分組,其中由于南極洲的特殊情況將其排除在外。在劃分完已知節(jié)點(diǎn)的區(qū)域后,再分別對(duì)每個(gè)區(qū)域的節(jié)點(diǎn)按照性能指標(biāo)進(jìn)行進(jìn)一步劃分,選出其中的可達(dá)節(jié)點(diǎn)、高容節(jié)點(diǎn)和高速節(jié)點(diǎn)。在本地客戶端搭建隧道時(shí),隨機(jī)選擇3個(gè)區(qū)域內(nèi)的節(jié)點(diǎn)作為隧道的參與者。

圖4 優(yōu)化節(jié)點(diǎn)選擇算法
在優(yōu)化節(jié)點(diǎn)選擇算法下,因?yàn)镮2P本地客戶端的每條隧道都只有一個(gè)參與者處于同個(gè)地區(qū),所以攻擊者通過在某個(gè)區(qū)域內(nèi)部署大量節(jié)點(diǎn)來發(fā)動(dòng)共謀攻擊的傳統(tǒng)方法將不能奏效。此外,由于沒有改變隧道長(zhǎng)度和節(jié)點(diǎn)性能的評(píng)估標(biāo)準(zhǔn),對(duì)整個(gè)I2P網(wǎng)絡(luò)的時(shí)延影響無法通過單純?cè)黾铀淼篱L(zhǎng)度來實(shí)現(xiàn)。實(shí)際上,優(yōu)化算法中影響I2P網(wǎng)絡(luò)時(shí)延的主要因素來自跨大洲的節(jié)點(diǎn)傳播時(shí)延,而這種情況在傳統(tǒng)節(jié)點(diǎn)選擇算法中也會(huì)出現(xiàn),所以整體時(shí)延的提高并不明顯。
I2P網(wǎng)絡(luò)作為當(dāng)今最流行的暗網(wǎng)訪問工具之一,其匿名性要優(yōu)于其前身Tor網(wǎng)絡(luò),但是其算法復(fù)雜度高,用戶數(shù)量相對(duì)較少,通信時(shí)延要比Tor高。因此,單純?cè)黾铀淼篱L(zhǎng)度來提高I2P網(wǎng)絡(luò)匿名性的做法,對(duì)于I2P用戶是難以接受的。提高匿名性的同時(shí)盡量減少對(duì)通信時(shí)延的影響,是優(yōu)先級(jí)較高的做法。本文提出的優(yōu)化節(jié)點(diǎn)選擇算法是在這樣的思想下提出的,可以大大提高攻擊者的攻擊成本,讓攻擊者不得不選擇其他攻擊手段。同時(shí),由于優(yōu)化算法并沒有改變算法本身的篩選標(biāo)準(zhǔn),所以對(duì)整個(gè)I2P網(wǎng)絡(luò)的通信時(shí)延并沒有很大影響。不過,因?yàn)閮?yōu)化算法無法在真實(shí)的I2P網(wǎng)絡(luò)中部署以進(jìn)行測(cè)試評(píng)估,所以無法具體分析優(yōu)化算法對(duì)I2P用戶帶來的影響。后續(xù)將與I2P官方人員溝通,在部分節(jié)點(diǎn)上部署這種優(yōu)化節(jié)點(diǎn)算法進(jìn)行測(cè)試和評(píng)估。