包旭東,尤 淳,李勇軍
(西北工業(yè)大學(xué)計(jì)算機(jī)學(xué)院,陜西 西安 710129)
BT網(wǎng)絡(luò)是一種結(jié)構(gòu)化的P2P網(wǎng)絡(luò),廣泛應(yīng)用于文件共享與傳輸。為了加強(qiáng)對(duì)BT網(wǎng)絡(luò)的監(jiān)管,可以賦予網(wǎng)絡(luò)中部分節(jié)點(diǎn)管理員的身份,對(duì)網(wǎng)絡(luò)中的節(jié)點(diǎn)和共享文件進(jìn)行監(jiān)督。在這個(gè)過(guò)程中,為了防止惡意節(jié)點(diǎn)發(fā)現(xiàn)這部分節(jié)點(diǎn)的管理員身份,而執(zhí)行一些欺騙的手段,管理員節(jié)點(diǎn)必須對(duì)自己的身份保密。此外,管理員之間還需要進(jìn)行信息的交互,這就要求管理員在不暴露身份的情況下,在網(wǎng)絡(luò)中尋找并發(fā)現(xiàn)其它管理員身份的節(jié)點(diǎn),并與之建立連接。
本文設(shè)計(jì)和實(shí)現(xiàn)了一個(gè)隱藏傳輸系統(tǒng)解決上述問(wèn)題。該系統(tǒng)主要是將身份的驗(yàn)證信息通過(guò)Lehmer code編碼[1]隱藏在正常數(shù)據(jù)塊請(qǐng)求隊(duì)列中發(fā)送給其它節(jié)點(diǎn),這樣如果接收到請(qǐng)求隊(duì)列的節(jié)點(diǎn)是管理員身份,那么它就能夠通過(guò)已知的算法從隊(duì)列中提取驗(yàn)證信息,并驗(yàn)證發(fā)送隊(duì)列的節(jié)點(diǎn)的身份。如果接收者是普通節(jié)點(diǎn),那么它將得不到任何額外的信息,只會(huì)按照請(qǐng)求隊(duì)列發(fā)送相應(yīng)的數(shù)據(jù)塊給目標(biāo)節(jié)點(diǎn)。
為了提高開(kāi)發(fā)效率和質(zhì)量,開(kāi)發(fā)出擴(kuò)展方便、易維護(hù)的系統(tǒng),在設(shè)計(jì)過(guò)程中使用了插件技術(shù),根據(jù)不同的功能劃分不同的插件模塊,這樣開(kāi)發(fā)出的系統(tǒng)結(jié)構(gòu)清晰、易維護(hù),模塊之間耦合性低,更新擴(kuò)展靈活。
本文重點(diǎn)介紹BT網(wǎng)絡(luò)隱藏傳輸系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。
構(gòu)建基于插件技術(shù)的BT網(wǎng)絡(luò)隱藏傳輸系統(tǒng)主要涉及BitTorrent通信協(xié)議、信息隱藏技術(shù)和插件技術(shù)三個(gè)方面的內(nèi)容。
BT協(xié)議[2]是架構(gòu)于TCP/IP協(xié)議之上的一個(gè)P2P文件傳輸協(xié)議,處于TCP/IP結(jié)構(gòu)的應(yīng)用層。BT網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示,BT用戶通過(guò)解析下載到的種子文件,得到Tracker服務(wù)器地址和目標(biāo)文件的Hash值。用戶A連接Tracker服務(wù)器,獲得文件上傳者B和C的ID,然后與B和C分別建立連接,雙方通告自己擁有的數(shù)據(jù)塊,最后向目標(biāo)ID發(fā)送數(shù)據(jù)塊請(qǐng)求隊(duì)列,進(jìn)行數(shù)據(jù)下載。
Figure 1 BT network圖1 BT網(wǎng)絡(luò)結(jié)構(gòu)
信息隱藏技術(shù)(也叫隱寫術(shù)Steganography)[3~5],指的是不讓除預(yù)期的接收者以外的任何人知曉信息的傳遞事件或者信息的內(nèi)容。通常是將秘密信息隱藏到看上去普通的信息中進(jìn)行傳送。
基于Lehmer code的隱藏通道構(gòu)建[6],首先把要通過(guò)隱藏通道傳輸?shù)男畔解析成數(shù)字,將它轉(zhuǎn)化成階乘數(shù)字系統(tǒng)來(lái)表示,表示成M!;然后通過(guò)萊曼編碼把原先有序列表中的每個(gè)元素移動(dòng)到其置換后的目標(biāo)位置上,通過(guò)這樣的置換將M!所表示的信息隱藏到新的排列之中。
Figure 2 Conversion process of factorial number
圖2 階乘數(shù)轉(zhuǎn)換過(guò)程圖
新的排列中就隱藏了階乘數(shù)3010!的信息,同樣如果要從隊(duì)列中提取隱藏信息,使用轉(zhuǎn)換過(guò)程的逆運(yùn)算就能夠?qū)崿F(xiàn)。
插件(Plug-in)是一種遵循一定規(guī)范的應(yīng)用程序接口編寫出來(lái)的程序。簡(jiǎn)單來(lái)說(shuō)插件技術(shù)就是在軟件的設(shè)計(jì)開(kāi)發(fā)過(guò)程中根據(jù)功能和需求把軟件劃分成兩個(gè)主要部分:主程序和插件程序。主程序主要完成程序的基礎(chǔ)功能以及對(duì)插件的管理,插件程序主要實(shí)現(xiàn)部分相對(duì)獨(dú)立的功能,這樣通過(guò)對(duì)插件的修改和增減來(lái)調(diào)整和維護(hù)整個(gè)軟件,由于插件與主程序是相對(duì)獨(dú)立的,耦合性很低,所以對(duì)插件的調(diào)整對(duì)整個(gè)程序影響較小。
組件對(duì)象模型COM(Component Object Model)[7,8]是一個(gè)較好的實(shí)現(xiàn)插件的技術(shù),基于COM建立的插件系統(tǒng),具有與語(yǔ)言無(wú)關(guān)、進(jìn)程透明、可重用的特性。插件就是一個(gè)COM組件,插件程序作為COM組件程序,包含了一個(gè)或者多個(gè)COM對(duì)象,這些對(duì)象都實(shí)現(xiàn)了相同的COM接口,通過(guò)在注冊(cè)表的指定位置查找COM組件的CLSID值,來(lái)訪問(wèn)COM對(duì)象,調(diào)用插件,使用插件提供的服務(wù)。COM允許把相關(guān)的一組COM類組織到一個(gè)類別組中,組中的所有COM類都實(shí)現(xiàn)同一組接口,共享一個(gè)類別ID,主程序從COM類分組中搜索需要的插件。具體實(shí)現(xiàn)步驟如下:
(1)注冊(cè)一個(gè)COM組:CATID_Plugin;
(2)插件實(shí)現(xiàn)包含ICoPlugin接口的COM類,并注冊(cè)到COM組CATID_Plugin中;
(3)主程序啟動(dòng)組件類別管理器從COM組中列舉各個(gè)COM組件,得到COM組件的CLSID;
(4)根據(jù)不同的功能需求決定使用哪個(gè)ICoPlugin接口指針調(diào)用LoadFile方法;
(5)程序退出的時(shí)候,釋放COM對(duì)象,并釋放COM庫(kù)所占用的資源。
基于插件技術(shù)的BT網(wǎng)絡(luò)隱藏傳輸系統(tǒng)主要通過(guò)調(diào)整數(shù)據(jù)塊請(qǐng)求隊(duì)列來(lái)創(chuàng)建隱藏信道完成隱藏傳輸。將待請(qǐng)求的隊(duì)列發(fā)送給插件系統(tǒng),由插件系統(tǒng)的密鑰處理模塊生成密鑰,編碼與解碼模塊對(duì)請(qǐng)求隊(duì)列進(jìn)行重新編碼,最后使用新的請(qǐng)求隊(duì)列與目標(biāo)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)交換。如果插件系統(tǒng)中的用戶管理模塊能夠接收到目標(biāo)節(jié)點(diǎn)的應(yīng)答密鑰,一個(gè)隱藏傳輸信道就成功建立。系統(tǒng)模型如圖3所示。
Figure 3 System model圖3 系統(tǒng)模型圖
系統(tǒng)運(yùn)行在如圖1所示的BT網(wǎng)絡(luò)中,用戶A、B、C為特殊身份用戶,其它節(jié)點(diǎn)為普通用戶,特殊身份用戶希望通過(guò)隱藏傳輸系統(tǒng)構(gòu)建隱藏通道尋找到相同身份者。例如,用戶A所在的節(jié)點(diǎn)u與用戶B所在的節(jié)點(diǎn)v進(jìn)行基于BT協(xié)議的數(shù)據(jù)交換,節(jié)點(diǎn)u利用編碼模塊對(duì)原始的請(qǐng)求隊(duì)列進(jìn)行重新排列,將約定的密鑰隱藏到新生成的請(qǐng)求隊(duì)列之中。當(dāng)節(jié)點(diǎn)v接收到請(qǐng)求隊(duì)列之后首先通過(guò)解碼模塊將請(qǐng)求隊(duì)列中隱藏的信息解析出來(lái),通過(guò)密鑰處理模塊對(duì)密鑰進(jìn)行驗(yàn)證,從而驗(yàn)證節(jié)點(diǎn)u的真實(shí)身份。具體過(guò)程如圖4所示。
Figure 4 Structure of node transmission圖4 節(jié)點(diǎn)傳輸結(jié)構(gòu)圖
3.2.1 系統(tǒng)的基礎(chǔ)架構(gòu)
系統(tǒng)的基礎(chǔ)架構(gòu)包括一個(gè)數(shù)據(jù)傳輸客戶端和一個(gè)插件的管理模塊。
(1)數(shù)據(jù)傳輸客戶端主要解析種子文件獲取待下載的文件的一些信息;連接Tracker獲取peer的IP和端口;連接peer進(jìn)行數(shù)據(jù)上傳和下載;對(duì)要發(fā)布的信息提供共享文件制作和生成種子文件。
(2)插件管理模塊主要用于注冊(cè)和反注冊(cè)插件,正確地找到插件的路徑并初始化插件;啟用和禁用插件,對(duì)已經(jīng)注冊(cè)的插件可以根據(jù)需要啟用或者禁用;顯示插件的基本信息,如插件的版本、描述、版權(quán)等;配置插件的參數(shù),對(duì)插件自身的一些參數(shù)進(jìn)行設(shè)置。
3.2.2 插件系統(tǒng)
插件程序主要包括編碼與解碼模塊、密鑰處理模塊和用戶管理模塊。
(1)編解碼模塊主要是通過(guò)Lehmer code算法對(duì)節(jié)點(diǎn)發(fā)出的請(qǐng)求隊(duì)列順序進(jìn)行重新排列,構(gòu)建能夠隱藏認(rèn)證信息的隱藏通道。
(2)密鑰處理模塊根據(jù)通信雙方的ID和密鑰K,通過(guò)一個(gè)約定好的Hash算法得到一個(gè)能夠驗(yàn)證雙方身份的信息。
(3)用戶管理模塊對(duì)編解碼模塊解析出的信息進(jìn)行比對(duì),判斷對(duì)方節(jié)點(diǎn)的身份,如果對(duì)方為管理員身份時(shí),將對(duì)方節(jié)點(diǎn)的ID存入ID table,同時(shí)將生成密鑰的下半部分發(fā)送給源節(jié)點(diǎn),表明自己的身份。
插件系統(tǒng)的構(gòu)建以及密鑰處理和編解碼模塊的實(shí)現(xiàn)是創(chuàng)建隱藏通道和身份識(shí)別的核心技術(shù),是實(shí)現(xiàn)系統(tǒng)功能的關(guān)鍵。
假設(shè)用一個(gè)密鑰K來(lái)表明特殊節(jié)點(diǎn)的身份,特殊節(jié)點(diǎn)u通過(guò)密鑰處理模塊得到身份驗(yàn)證信息m(由K計(jì)算得到),使用編碼模塊將m的前半部分隱藏在要發(fā)送的數(shù)據(jù)塊請(qǐng)求隊(duì)列中,發(fā)送攜帶身份驗(yàn)證信息m/2的請(qǐng)求隊(duì)列給節(jié)點(diǎn)v;如果節(jié)點(diǎn)v有相同的身份屬性,那么它就能夠通過(guò)解碼模塊將隱藏的信息解析出來(lái)并與自己的密鑰進(jìn)行比對(duì);如果能夠成功匹配那么證明雙方的身份屬性相同,就用明文的方式發(fā)送m的下半部分給對(duì)方,使雙方都知道彼此的身份屬性。如果v是個(gè)普通的節(jié)點(diǎn),它不會(huì)發(fā)現(xiàn)任何的違規(guī)并與u進(jìn)行通信,因?yàn)槿魏蔚恼?qǐng)求訂單都是被BitTorrent協(xié)議所允許的。而且,即使v注意到這個(gè)請(qǐng)求命令通道并且能夠正確地譯碼,它也不能夠發(fā)現(xiàn)違規(guī),因?yàn)樗静恢烂荑€K。身份驗(yàn)證過(guò)程如圖5所示。
Figure 5 Authentication圖5 身份驗(yàn)證過(guò)程
(1)對(duì)發(fā)送隊(duì)列的編碼算法。
當(dāng)一個(gè)特殊身份用戶u已經(jīng)決定哪些數(shù)據(jù)塊要從鄰居節(jié)點(diǎn)v處請(qǐng)求的時(shí)候,將要發(fā)送給v的請(qǐng)求隊(duì)列就用算法1來(lái)進(jìn)行編碼轉(zhuǎn)換。
算法1編碼算法
把信息m(密鑰的上半部分)使用Hash函數(shù)解析成數(shù)字,將它轉(zhuǎn)化成階乘數(shù)字系統(tǒng)來(lái)表示,表示成M!,通過(guò)M!以萊曼編碼的形式得到一個(gè)新的排列。
算法1的流程如圖6所示。
Figure 6 Algorithm 1 flowchart圖6 算法1流程圖
(2)對(duì)接收隊(duì)列的解碼算法。
當(dāng)一個(gè)特殊身份用戶接收到相同身份屬性用戶的請(qǐng)求,用算法1的逆運(yùn)算(算法2)可得到隱藏在隊(duì)列中的信息。
算法2解碼算法
將接收隊(duì)列Q與順序隊(duì)列進(jìn)行逐位比對(duì),通過(guò)查找Q中元素在順序隊(duì)列中的位置來(lái)還原階乘數(shù)M!。
算法2的流程圖如圖7所示。
Figure 7 Algorithm 2 flowchart圖7 算法2流程圖
通過(guò)算法1和算法2可以對(duì)要傳遞的驗(yàn)證信息m進(jìn)行隱藏傳輸,算法并沒(méi)有添加或者減少原來(lái)的信息,只是通過(guò)調(diào)整P2P網(wǎng)絡(luò)中節(jié)點(diǎn)請(qǐng)求數(shù)據(jù)塊的順序來(lái)創(chuàng)建隱藏通道,最終達(dá)到傳輸隱秘信息的目的。
因?yàn)楣?jié)點(diǎn)隨機(jī)產(chǎn)生的請(qǐng)求隊(duì)列與編碼后的隊(duì)列是有發(fā)生碰撞的可能性的,為了避免這個(gè)問(wèn)題就要選擇一個(gè)隨機(jī)的并足夠大的密鑰,才能夠保持偶然碰撞的可能性非常地低:這個(gè)偶然碰撞的可能性是2-|K|/2。因此,特殊身份用戶u選擇一個(gè)密鑰K的長(zhǎng)度至少為6logn。為避免密鑰K發(fā)生碰撞,與v進(jìn)行通信的時(shí)候,把Hash(idu‖idv‖K,logn)作為一個(gè)密鑰。其中‖表示串聯(lián)操作,Hash函數(shù)Hash(x,b)將一個(gè)bit位x∈{0,1}映射成為一個(gè)長(zhǎng)度是b的bit串,如果輸入的值x有一個(gè)至少是b的信息熵,那么Hash(x,b)被成功猜出來(lái)的可能性最多是 2-b,這就保證了低碰撞可能性,詳細(xì)論證過(guò)程見(jiàn)參考文獻(xiàn)[6]。本文中的Hash函數(shù)使用的是MD5算法,則有m=MD5(idu‖idv‖K)。
基于COM的插件系統(tǒng)包括插件管理器、插件基本接口和插件功能三個(gè)要素。這里主要介紹插件結(jié)構(gòu)的實(shí)現(xiàn)。
(1)COM插件管理器主要是管理COM組件的裝載與卸載,系統(tǒng)將每個(gè)COM插件都注冊(cè)到一個(gè)固定的COM分組中,主程序在COM分組中搜索出插件 。通過(guò)調(diào)用void SpecialReg(GUID ID_SubItem,BOOL bReGISter)函數(shù)將一個(gè)COM注冊(cè)、反注冊(cè)到某一個(gè)COM組中。而從COM組中列舉各個(gè)COM組件的代碼如下:
Figure 8 Experimental result圖8 實(shí)驗(yàn)結(jié)果
ICatInformationPtr pICatInformation(CLSID_StdComponentCategoriesMgr);
IEnumCLSID* pIEnumCLSID=NULL ;
HRESULT hr=pICatInformation→EnumClassesOfCategories(1,
&CATID_RdExcelExportCategory,
0,
NULL,
&pIEnumCLSID) ;
(2)在COM插件中插件基本接口是一個(gè)包含基類的接口COM,在這個(gè)COM中它只定義接口,不作任何實(shí)現(xiàn)。主程序的插件所包含的COM對(duì)象都實(shí)現(xiàn)了如下COM接口。
Interface ICoPlugin:IUnknown
{
HRESULT LoadQueue([i] ULONG ulinQueueNumber);
ULONG Encode();//算法1實(shí)現(xiàn)編碼功能
ULONG Discode();//算法2實(shí)現(xiàn)解碼功能
HRESULT Key();/*密鑰處理模塊實(shí)現(xiàn)密鑰管理功能*/
}
插件的開(kāi)發(fā)就是COM組件的開(kāi)發(fā),是對(duì)接口中定義的各個(gè)功能的實(shí)現(xiàn)與封裝,具體的實(shí)現(xiàn)原理與算法上文已經(jīng)介紹,這里不再詳述。
本系統(tǒng)安全性與可行性主要取決于編碼后產(chǎn)生的新隊(duì)列與網(wǎng)絡(luò)中隨機(jī)產(chǎn)生的請(qǐng)求隊(duì)列是否會(huì)發(fā)生碰撞,如果發(fā)生碰撞,目標(biāo)節(jié)點(diǎn)會(huì)錯(cuò)誤地判斷源節(jié)點(diǎn)的身份,證明系統(tǒng)設(shè)計(jì)是有缺欠的。本文通過(guò)實(shí)驗(yàn)對(duì)系統(tǒng)可行性進(jìn)行了驗(yàn)證,實(shí)驗(yàn)網(wǎng)絡(luò)中設(shè)有2個(gè)特殊節(jié)點(diǎn)和100個(gè)普通節(jié)點(diǎn),檢查各節(jié)點(diǎn)在通信過(guò)程中是否會(huì)發(fā)生請(qǐng)求隊(duì)列碰撞的現(xiàn)象。實(shí)驗(yàn)結(jié)果如圖8所示。實(shí)驗(yàn)用的密鑰為:i am a key。
得到MD5值:
md5:4e83c3530fc2796a8d2b88db7426c22d
得到的階乘數(shù):
(12 0 19 29 22 13 3 5 17 21 14 3 19 18 15 3 16 4 8 8 5 3 8 10 8 4 0 4 1 4 1 2 0 0)!
編碼后的數(shù)列:
12 0 20 31 24 14 3 6 22 28 18 4 29 27 23 5 30 8 15 16 10 7 21 32 25 11 1 17 9 26 13 33 2 19
實(shí)驗(yàn)結(jié)果顯示,在這次實(shí)驗(yàn)中發(fā)生碰撞的概率是0%,同時(shí)根據(jù)得到的新請(qǐng)求隊(duì)列可以看出,34個(gè)請(qǐng)求組成的請(qǐng)求隊(duì)列發(fā)生碰撞的概率是1/234,這是個(gè)小概率事件。說(shuō)明系統(tǒng)具有相當(dāng)?shù)陌踩院鸵欢ǖ目尚行浴?/p>
本文通過(guò)對(duì)萊曼編碼算法在BT網(wǎng)絡(luò)數(shù)據(jù)塊交換過(guò)程中的應(yīng)用,采用插件技術(shù)設(shè)計(jì)了一個(gè)隱藏傳輸系統(tǒng),并給出了關(guān)鍵技術(shù)的實(shí)現(xiàn)。此系統(tǒng)在BT網(wǎng)絡(luò)中通過(guò)文件下載就能夠發(fā)現(xiàn)相同身份的密謀者,而且具有良好的擴(kuò)展性和隱秘性,在Internet中具有一定的應(yīng)用價(jià)值。同時(shí),在BT網(wǎng)絡(luò)下可以嘗試更多的信息隱藏算法,而萊曼編碼也可以放到其它的通信協(xié)議中構(gòu)建隱藏傳輸通道,針對(duì)這些問(wèn)題我們將做進(jìn)一步的研究。
[1] Lehmer D H.Teaching combinatorial tricks to a computer[C]∥Proc of Symposium on Applied Mathematics Combinatorial Analysis, 1960:179-193.
[2] Chen Gui-hai,Li Zhen-hua.Peer networks:Architecture, application and design [M]. Beijing:Tsinghua University Press,2007.(in Chinese)
[3] Li Z,Sun X,Wang B,et al.A steganography scheme in P2P network[C]∥Proc of the 4th International Conference on Intelligent Information Hiding and Multimedia Signal Processing (IIH-MSP), 2008:20-24.
[4] Bickson D. Steganographic communications using the gnutella network[D]. Jerusalem:Hebrew University of Jerusalem, 2003.
[5] Zhang C, Dhungel P, Wu D, et al. Unraveling the BitTor-rent ecosystem[J]. IEEE Transactions on Parallel and Distributed Systems, 2010,22(7):1164-1177.
[6] Eidenbenz R, Locher T, Wattenhofer R. Hidden communication in P2P networks:Steganographic handshake and broadcast[C]∥Proc of the 30th IEEE International Conference on Computer Communications(INFOCOM), 2011:954-962.
[7] Liang Zhong-jie, Si Min, Li Ting. Application research for COM and DLL[J]. Microcomputer Applications, 2006,27(6):702-705.(in Chinese)
[8] Pan Ai-min. COM principles and applications[M]. Tsinghua University Press, 2001.(in Chinese)
附中文參考文獻(xiàn):
[2] 陳貴海,李振華.對(duì)等網(wǎng)絡(luò):結(jié)構(gòu)、應(yīng)用與設(shè)計(jì)[M].北京:清華大學(xué)出版社,2007.
[7] 梁忠杰,思敏,李婷. COM技術(shù)和動(dòng)態(tài)鏈接庫(kù)技術(shù)的應(yīng)用研究[J]. 微計(jì)算機(jī)應(yīng)用, 2006,27(6):702-705.
[8] 潘愛(ài)民.COM原理與應(yīng)用[M].北京:清華大學(xué)出版社,2001.