-
摘要
P2P網絡的去中心化、自治性以及匿名性吸引了越來越多的用戶。然而,用戶不加約束的行爲使得爲peer之間建立信任模型是很有必要的。大部分現有的信任模型基於推薦,然而具備有收斂慢、信任計算複雜度高、網絡開銷大等的缺陷。收到人類社交的啓發,本文提出了針對基於Chord的P2P網絡的基於擔保的信任模型GeTrust。一個服務peer需要選擇它的擔保peers,這些擔保peers要求給出聲譽抵押,並將評價值最高的作爲服務提供者。爲了增大GeTrust的可用性以及防止惡意行爲,我們也給出了激動機制與匿名信譽管理策略。
本文的主要工作如下:
- GeTrust模型,在擔保節點的幫助下,請求的節點不需要使用全局推薦來評估服務節點,從而減少了計算和消息複雜性。
- 利用聲譽抵押與激勵機制來確保GeTrust的正常運行。
- 使得高聲譽值的節點能夠獲取更可靠的服務,能夠提高誠實節點的體驗與加強網絡可用性。
-
相關定義
- 服務節點與服務聲譽:服務節點是在一個事務中提供服務的節點,服務聲譽代表服務節點的信任度。每個節點在加入網絡時的初始化服務聲譽爲0.5。
- 擔保節點與擔保聲譽:擔保節點爲一個服務提供擔保,擔保聲譽爲擔保節點的信任度。每個服務節點必須至少有一個擔保節點。服務節點與擔保節點都需要爲它們的行爲負責。
- 存檔節點:管理服務聲譽、擔保聲譽、對某個事務該負責的節點記錄的節點。本文采用Chord-based聲譽管理機制,所以每個節點都有可能成爲存檔節點。
- 請求節點:一個事務中請求服務的節點。在服務結束後,請求節點需要向存檔節點對服務節點與擔保節點進行反饋。
- 直接信任:請求節點根據歷史事務記錄對一個指定節點的信任評估。直接信任可分爲服務直接信任與擔保直接信任,分別針對服務節點與擔保節點。直接信任存儲在請求節點本地。
- :判定一個節點是否有資格成爲擔保節點的標準:服務聲譽的閾值。值在區間(0.5,1]內。
假定mb爲事務號,請求節點爲i,服務節點爲b,i對b的直接信任計算公式如下。其中爲i對b的第k次反饋,值在區間[-1,1]內,爲時間衰減函數,使得最近的反饋佔比更高。t0爲第一次反饋,tk爲第k次反饋。
假定mg爲事務號,請求節點i,擔保節點g,i對g的直接信任計算公式如下。公式中的其他符號含義與計算類似於公式1。
-
GeTrust
GeTrust的流程圖包括以下三個方面:擔保關係的建立、服務關係的建立以及聲譽計算。在提供服務之前,擔保關係需要首先確定,這一步需要擔保節點與服務節點的相互評估。之後在擔保節點的擔保下,服務節點與請求節點相互評估以建立服務關係。在服務完成後,存檔節點根據請求節點的反饋計算服務節點與擔保節點的聲譽,並更新記錄。
-
擔保關係建立前的評估
任何服務節點在提供服務前必須要有它自己的擔保節點。申請一個好的擔保節點有助於提高服務節點的聲譽。在GeTrust中,每個節點維護兩個擔保節點列表:當前擔保列表(current guarantee list,CGL)與備份擔保列表(Backup guarantee list,BGL)。前者存儲當前列表,後者備份擔保節點信息。
考慮到查找擔保節點的遍歷性,我們使用一個轉換函數將節點的IP轉變爲[1,L]之間一個整數,如r。之後通過一個安全hash函數來獲取索引:,其中GID是一個數字化的前綴,用來幫助節點定位到擔保節點的索引節點。將InodeID作爲存儲擔保節點的索引信息的節點的nodeID。服務節點可以向索引節點查找HASH(GID+r)來獲取擔保節點。同時,我們還允許擔保節點志願擔任某節點的擔保節點。稱志願擔任的節點爲自推薦節點。當節點收到某節點的自推薦後,將自推薦節點加入BGL中。當服務節點確定由某節點擔任擔保節點時,將給自推薦節點發送一個擔保應用,而同時自推薦節點的存檔節點會通知兩節點建立不需要評估的擔保關係。這種方式對於剛加入網絡的節點是有幫助的,因爲這些節點的信譽還比較低。然而自推薦節點的信譽受損的風險也很大。
在提供服務之前,服務節點b首先從BGL中找到他的擔保節點。任何由b找到的擔保節點都需要由b的存檔節點確定有資格擔任擔保節點,並需要事先扣除擔保節點在先前擔保過程中所作出的聲譽抵押。我們使用剩餘擔保聲譽來代表一個新的擔保關係下可用的擔保聲譽,這可通過以下式子進行計算:。其中爲擔保節點當前的擔保聲譽,爲第i次服務擔保節點所需要扣除的擔保聲譽。只有當計算節點大於0時,該節點纔有資格繼續擔任爲擔保節點。
用來確定選中的擔保節點是否足夠的能力來擔保當前服務。爲事務容量,能夠用來防止節點利用一些小的事務累積的聲譽來對大的事務進行欺騙,v爲b所申請的擔保節點數,爲第j個擔保節點的剩餘擔保聲譽,Rb爲服務節點b的剩餘服務聲譽,計算公式如下:,其中、與之前所表述的一致,爲第i次服務所填充的聲譽。如果計算後得到的Rfill>0,則表示服務節點b還可以選擇更好的擔保節點,因此b將繼續通過hash來查找更多的擔保節點,反之若Rfill<=0,則b的存檔節點向所有的擔保節點發送擔保應用。當沒有足夠的擔保節點來保證Rfill<=0時,b使用自己的服務聲譽來填充當前Rfill的差值,若不能填充,則b必須等待。
當擔保節點收到針對b的擔保應用後,擔保節點的存檔節點Dg需要首先檢查:Dg所記錄的所有擔保節點中,b是否出現過大於等於兩次的惡意服務,若出現則b存在於黑名單中,從而通知擔保節點拒絕提供擔保。若b的服務聲譽大於閾值時,可以從黑名單中移除。若b不在黑名單中,Dg根據公式6、7來確定擔保節點是否應該提供擔保。具體地,Dg計算曆史反饋相似度,計算過程爲聯合擔保節點與b所共同執行過事務的服務節點的集合所作出的反饋。CSet(b,g)爲b與g的共同服務節點集合。公式6通過餘弦相似度來計算曆史反饋相似度。根據計算出來的相似度,公式7可以計算出相對聲譽Wb,這是用來評價擔保節點對服務節點的信任度。如果Wb大於0,擔保節點將接受擔保,否則拒絕擔保。注意自推薦節點會因爲激勵機制的存在而主動承擔擔保。
當擔保關係成功建立之後,服務節點將所有的擔保節點加入CGL與BGL。
-
聲譽抵押
服務節點提供服務與擔保節點提供擔保都需要抵押聲譽。信譽抵押從擔保關係建立時開始記錄,在節點切斷擔保關係(如意外掉線、主動放棄等等)或者服務節點提供了惡意的服務時將扣除聲譽。
此外,公式8、9表明聲譽值越高的節點在出錯時受到的懲罰越大。
-
擔保關係建立過程
擔保關係建立過程如圖2所示,b爲服務節點,g爲擔保節點,Db與Dg爲b與g的存檔節點。整個過程使用了三種消息:Notify、Query、Reply,如表1所示。執行步驟如下:
- b想要提供服務,b首先從BGL中找擔保節點,如果BGL不能提供足夠的擔保節點的話,從索引節點中查找新的節點。g是一個候選的擔保節點。b通知Db:Notify(b,Db)=CGN|HIDb|IDg。
- Db在收到Notify之後,向Dg請求g的擔保聲譽與扣除了的聲譽:Query(Dg,Db)=HIDg|RM。Dg將回復:
- Db計算g的剩餘擔保聲譽,判斷g是否有資格進行擔保。若有資格,通知g與Dg:
- Dg在收到GA後,向Db請求獲取b的聲譽以及b的歷史反饋節點的集合:,等待回覆:
- Dg通過公式6、7計算相對聲譽,若認爲b有資格提供服務則發送:
-
服務關係建立
服務關係指請求節點與服務節點關係的建立。
- 當請求節點a請求服務節點b提供服務時,b需要評估a以確定是否提供服務。
其中爲聲譽因子,m爲a與p交互次數(包括服務以及擔保)。m=0時。爲a的服務聲譽,爲a的擔保聲譽,與爲b對a的直接服務信任與直接擔保信任。b接受a的服務請求的條件爲:。其含義爲請求節點必須提高自己的聲譽,才能夠增加Eq,並且能夠與聲譽更高的服務節點交互。
- 在事務開始前,請求節點a也需要評估服務節點b。
其中,爲b的歷史成功事務的比率,Sall爲b提供的服務總數,Ssucc爲成功提供的服務數,爲第k次服務的事務容量,若首次提供服務則設置fh-succ爲0。爲b的所有擔保節點的平均擔保聲譽。因而,a將選擇Es高的節點作爲服務節點。
-
聲譽更新
在事務完成之後需要重新計算聲譽。
-
反饋驗證
在計算聲譽之前,需要驗證請求節點所提供的反饋,以丟棄沒有通過認證的反饋。公式13給出了在一個過去時間窗口T內所收到的有效反饋的均值與方差,當前反饋F爲T的最後一個反饋。
其中,nT爲T內接收的反饋總數,Fi爲第i個反饋。考慮一下三個方面:
- 當時,如果F位於區間內,則被接受的概率爲Rb|g(如果Rb|g<0.5則爲1-Rb|g),否則,概率爲1-Rb|g(如果Rb|g<0.5則爲Rb|g)。Rb|g爲對應的服務節點聲譽或者擔保節點聲譽。
- 當時,反饋波動大,代表着可能存在服務節點與請求節點共謀的情況,此時反饋被接受的概率爲0.5。
注意即便沒有被接受的反饋也被存檔節點記錄。此外,還存在第二次反饋認證,認證方法同第一次反饋認證,只是時間發生在以F爲第一個接受反饋起的時間窗口T。
-
激勵機制
在請求節點向服務節點請求服務時,公式10、11說明了高聲譽的請求節點能夠獲得高聲譽的服務節點所提供的服務。而在提供服務之後,對服務節點與擔保節點的激勵如公式14、15所示。Reward代表着節點提供服務或者擔保的獎勵。其中,代表着最近的窗口時間T內的成功事務比率。同時爲了得到獎勵,服務節點也會更傾向於與聲譽高的擔保節點來提高成功事務比率,擔保節點也傾向於尋找聲譽高的服務節點。
-
聲譽更新
根據收到的反饋,在服務結束後,存檔節點會計算服務節點與擔保節點的聲譽。公式16、17分別表示服務節點與擔保節點聲譽的更新。
注意到節點聲譽的更新由節點的存檔節點執行,因此,設計聲譽管理以及反饋通信機制是很重要的。
-
基於Chord的GeTrust實現
-
聲譽管理
-
節點的聲譽由其存檔節點管理,而其自身應當是不可知的,這能防止共謀攻擊。
在Chord網絡中,節點ID是IP地址的hash,並且所有節點在一個圓上升序排列。對於服務id爲k的服務,應當由順時針下的下一個節點(或節點k)來分配。在一個請求過程中,請求節點從索引節點獲取服務索引,並將這些節點作爲服務節點候選。
爲了避免存檔節點來僞造節點的聲譽,本文給出了匿名存儲機制,該機制應該滿足:
- 節點i的存檔節點不能獲取i的物理地址與邏輯地址
- 節點i的存檔節點不是i,節點i不能選擇自身的nodeID,以避免惡意的自己擔任自己的存檔節點。
- 任何節點j不能獲取其他節點的存檔節點的物理地址與邏輯地址。
爲了滿足這些要求,本文應用以下策略來選擇一個節點的存檔節點。節點i的存檔節點由key=來決定,其存檔節點是在chord圓上等於key或者follow key的第一個節點,或者稱之爲key的後繼節點:successor(key)。由於hash的單向性,並且hash的最開始的key爲i的物理地址,要求1、2得以滿足。爲了滿足要求3,本文對Chord協議增加兩點限制:1)只有i能夠操作,能迭代地獲取後繼節點2)j要與i的存檔節點通信時,只有迭代模式能夠允許向i的迭代節點路由消息,具體來說,假設j要知道i的聲譽,根據Chord協議,j將nodeID=HASH(nodeIDi)的節點作爲下一跳(p1),如此迭代,直到消息到達i的存檔節點,i的聲譽再沿着來的路徑返回給j。
-
GeTrust模型的事務
圖3爲Chord網絡中GeTrust模型的事務處理過程,a爲請求節點,b爲服務節點,g爲擔保節點集,Da、Db、Dg分別爲a、b、g的存檔節點。一次事務中,擁有四種消息:Notify、Query、Reply、FeedBack。
- a向從索引節點獲取到的節點發送,假設節點b接收了這個請求。通過,b從Da獲取到了a的聲譽:。b通過公式10、11對a進行評估,若成功,b查找擔保節點,並建立擔保關係,並向a回覆:。
- a在收到b的回覆後,詢問b的擔保節點以確定是否真正建立擔保關係:,若成功建立擔保關係,擔保節點回復:。
- 若a收到了擔保節點的確認,a發送來請求獲取b和g的歷史事務記錄,這會收到回覆:,之後a能夠通過公式12評估服務節點,若通過則事務開始。
- 當事務結束之後,b與g需要通知存儲節點以確保記錄與a進行了事務交互,發送:。存檔節點記錄a的nodeID,並等待a的反饋。
- a發送反饋,存檔節點更新聲譽。
-
仿真與結果分析
定義兩種節點集:
- 正常節點:有兩種類型。一是Nice-Peer(NP),這種節點真實地提供服務、擔保與反饋;二是Unconscious Peer(UP),真實地提供擔保與反饋,但以一定概率無意識地提供惡意服務,仿真時該概率設置爲0.2。
- 惡意節點:有三種類型。1)Complete-malicious Peer(CMP):提供惡意服務、擔保、反饋2)Strategic-malicious Peer(SMP):根據自身聲譽有策略地作出反應,當聲譽值低時,以一定概率(如0.4)跟NP一樣,當聲譽值高時,以很高的概率(如0.8)來攻擊網絡3)Malicious-feedback Peer(MFP):提供真實的服務與擔保,提供假的反饋。
本文使用PeerSim來構造仿真環境。假設任一節點能找到需要的服務,儘管服務可能是惡意的。仿真環境中共1w節點,NP與UP分別佔30%,CMP佔20%,SMP與MFP各佔10%。任一節點只要滿足GeTrust模型條件,都可以成爲服務、請求、擔保節點。初始階段沒有擔保節點,故隨機地從服務節點的fingertable中選取擔保節點。10000節點隨機分配共10w不同的服務。L=10,T爲一次模擬循環。每次模擬循環中,所有節點發送一個服務請求,在服務節點提供服務前,需要先建立擔保關係,然後爲請求節點提供服務,事務結束後,請求節點給出反饋,再根據反饋更新聲譽。每次仿真包括30循環,共運行20次,取平均值作爲仿真值。所有節點初始聲譽爲0.5。
-
參數的影響
GeTrust模型有兩個參數:與。前者用來評估請求節點,取值範圍(0,0.5),後者是可以作爲擔保節點的基本條件,取值(0.5,1)。
首先設置,將惡意節點百分比從0.1到0.4以及來比較成功事務比率,如圖4(a)所示。4(b)爲惡意節點百分比爲0.4情況下不同delta的事務總數。Delta增加,成功事務比率下降,而總事務數增加。Delta爲0.2時平衡最好。
之後設置delta爲0.2,將惡意節點百分比從0.1到0.4以及不同的RLIM-g來比較成功事務比率,如圖4(c)所示。4(d)爲惡意節點百分比爲0.4情況下不同RLIM-g的事務總數。RLIM-g增加,總事務數下降。RLIM-g爲0.7平衡最好。
因此,將之後的仿真參數設置爲:Delta爲0.2,RLIM-g爲0.7。
-
不同相似係數的影響
該小節實驗針對公式6(計算相似度),仿真分別採用Jaccard\Dice\Cosine三種相似函數來進行評估。圖5爲實驗結果,Consine、DICE基本一致,相對Jaccard成功事務比率更高,考慮到許多P2P網絡模型中使用Consine,本文在之後的仿真中也使用Consine。
-
服務聲譽的演化
設置正常節點的數目從30%到90%(NP與UP始終各佔一半),其餘節點CMP:SMP:MFP=2:1:1。圖六爲實驗結果。當正常節點數目大於60%後,NP與UP的聲譽大於0.8,CMP聲譽小於0.1。
-
計算複雜度
圖7爲與FCTrust、SecuredTrust的複雜度對比,可以看出GeTrust的計算複雜度最低。
-
反饋驗證的有效性
圖8爲實驗結果,其中FMF爲filtered malicious feedbacks,而SFR爲successful filtered rate of malicious feedbacks。
-
不同比例的惡意節點的影響
圖9爲將CMP的比例從0到50%情況下的成功事務比率,網絡中的其他節點平均設定爲NP與UP。
圖10爲將SMP的比例從0到50%情況下的成功事務比率,網絡中的其他節點平均設定爲NP與UP。
圖11爲將MFP的比例從0到50%情況下的成功事務比率,網絡中的其他節點平均設定爲NP與UP。
-
抵抗攻擊
-
共謀攻擊
-
共謀攻擊發生在服務節點與擔保節點、請求節點與服務節點之間、請求節點服務節點擔保節點之間。仿真時把SMP當成一個共謀組,SMP節點佔比20%,NP:UP:CMP:MFP=3:3:1:1。
- 服務節點與擔保節點共謀
進行額外的設定:共謀組節點接到共謀組節點的擔保應用時,不進行評估。實驗結果如圖12所示。
- 請求節點與服務節點共謀
進行額外的設定:共謀組請求節點在事務結束後作出的反饋,若服務節點屬於共謀組,給予好的反饋,否則低的反饋。實驗結果如圖13所示。
- 請求節點服務節點擔保節點共謀
同時進行前兩個額外的設定。實驗結果如圖14所示。
-
Whitewashing
CMP佔比20%,NP與UP同比例分配剩餘節點。假定CMP節點聲譽低於0.1,該節點將離開網絡然後再重新加入網絡(並有一個新的nodeID)。實驗結果如圖15所示。
圖16爲四種攻擊情況下的阻擋的攻擊的比率。