包旭東,尤 淳,李勇軍
(西北工業(yè)大學計算機學院,陜西 西安 710129)
BT網(wǎng)絡是一種結構化的P2P網(wǎng)絡,廣泛應用于文件共享與傳輸。為了加強對BT網(wǎng)絡的監(jiān)管,可以賦予網(wǎng)絡中部分節(jié)點管理員的身份,對網(wǎng)絡中的節(jié)點和共享文件進行監(jiān)督。在這個過程中,為了防止惡意節(jié)點發(fā)現(xiàn)這部分節(jié)點的管理員身份,而執(zhí)行一些欺騙的手段,管理員節(jié)點必須對自己的身份保密。此外,管理員之間還需要進行信息的交互,這就要求管理員在不暴露身份的情況下,在網(wǎng)絡中尋找并發(fā)現(xiàn)其它管理員身份的節(jié)點,并與之建立連接。
本文設計和實現(xiàn)了一個隱藏傳輸系統(tǒng)解決上述問題。該系統(tǒng)主要是將身份的驗證信息通過Lehmer code編碼[1]隱藏在正常數(shù)據(jù)塊請求隊列中發(fā)送給其它節(jié)點,這樣如果接收到請求隊列的節(jié)點是管理員身份,那么它就能夠通過已知的算法從隊列中提取驗證信息,并驗證發(fā)送隊列的節(jié)點的身份。如果接收者是普通節(jié)點,那么它將得不到任何額外的信息,只會按照請求隊列發(fā)送相應的數(shù)據(jù)塊給目標節(jié)點。
為了提高開發(fā)效率和質(zhì)量,開發(fā)出擴展方便、易維護的系統(tǒng),在設計過程中使用了插件技術,根據(jù)不同的功能劃分不同的插件模塊,這樣開發(fā)出的系統(tǒng)結構清晰、易維護,模塊之間耦合性低,更新擴展靈活。
本文重點介紹BT網(wǎng)絡隱藏傳輸系統(tǒng)的設計與實現(xiàn)。
構建基于插件技術的BT網(wǎng)絡隱藏傳輸系統(tǒng)主要涉及BitTorrent通信協(xié)議、信息隱藏技術和插件技術三個方面的內(nèi)容。
BT協(xié)議[2]是架構于TCP/IP協(xié)議之上的一個P2P文件傳輸協(xié)議,處于TCP/IP結構的應用層。BT網(wǎng)絡結構如圖1所示,BT用戶通過解析下載到的種子文件,得到Tracker服務器地址和目標文件的Hash值。用戶A連接Tracker服務器,獲得文件上傳者B和C的ID,然后與B和C分別建立連接,雙方通告自己擁有的數(shù)據(jù)塊,最后向目標ID發(fā)送數(shù)據(jù)塊請求隊列,進行數(shù)據(jù)下載。
Figure 1 BT network圖1 BT網(wǎng)絡結構
信息隱藏技術(也叫隱寫術Steganography)[3~5],指的是不讓除預期的接收者以外的任何人知曉信息的傳遞事件或者信息的內(nèi)容。通常是將秘密信息隱藏到看上去普通的信息中進行傳送。
基于Lehmer code的隱藏通道構建[6],首先把要通過隱藏通道傳輸?shù)男畔解析成數(shù)字,將它轉化成階乘數(shù)字系統(tǒng)來表示,表示成M??;然后通過萊曼編碼把原先有序列表中的每個元素移動到其置換后的目標位置上,通過這樣的置換將M!所表示的信息隱藏到新的排列之中。
Figure 2 Conversion process of factorial number
圖2 階乘數(shù)轉換過程圖
新的排列中就隱藏了階乘數(shù)3010!的信息,同樣如果要從隊列中提取隱藏信息,使用轉換過程的逆運算就能夠實現(xiàn)。
插件(Plug-in)是一種遵循一定規(guī)范的應用程序接口編寫出來的程序。簡單來說插件技術就是在軟件的設計開發(fā)過程中根據(jù)功能和需求把軟件劃分成兩個主要部分:主程序和插件程序。主程序主要完成程序的基礎功能以及對插件的管理,插件程序主要實現(xiàn)部分相對獨立的功能,這樣通過對插件的修改和增減來調(diào)整和維護整個軟件,由于插件與主程序是相對獨立的,耦合性很低,所以對插件的調(diào)整對整個程序影響較小。
組件對象模型COM(Component Object Model)[7,8]是一個較好的實現(xiàn)插件的技術,基于COM建立的插件系統(tǒng),具有與語言無關、進程透明、可重用的特性。插件就是一個COM組件,插件程序作為COM組件程序,包含了一個或者多個COM對象,這些對象都實現(xiàn)了相同的COM接口,通過在注冊表的指定位置查找COM組件的CLSID值,來訪問COM對象,調(diào)用插件,使用插件提供的服務。COM允許把相關的一組COM類組織到一個類別組中,組中的所有COM類都實現(xiàn)同一組接口,共享一個類別ID,主程序從COM類分組中搜索需要的插件。具體實現(xiàn)步驟如下:
(1)注冊一個COM組:CATID_Plugin;
(2)插件實現(xiàn)包含ICoPlugin接口的COM類,并注冊到COM組CATID_Plugin中;
(3)主程序啟動組件類別管理器從COM組中列舉各個COM組件,得到COM組件的CLSID;
(4)根據(jù)不同的功能需求決定使用哪個ICoPlugin接口指針調(diào)用LoadFile方法;
(5)程序退出的時候,釋放COM對象,并釋放COM庫所占用的資源。
基于插件技術的BT網(wǎng)絡隱藏傳輸系統(tǒng)主要通過調(diào)整數(shù)據(jù)塊請求隊列來創(chuàng)建隱藏信道完成隱藏傳輸。將待請求的隊列發(fā)送給插件系統(tǒng),由插件系統(tǒng)的密鑰處理模塊生成密鑰,編碼與解碼模塊對請求隊列進行重新編碼,最后使用新的請求隊列與目標節(jié)點進行數(shù)據(jù)交換。如果插件系統(tǒng)中的用戶管理模塊能夠接收到目標節(jié)點的應答密鑰,一個隱藏傳輸信道就成功建立。系統(tǒng)模型如圖3所示。
Figure 3 System model圖3 系統(tǒng)模型圖
系統(tǒng)運行在如圖1所示的BT網(wǎng)絡中,用戶A、B、C為特殊身份用戶,其它節(jié)點為普通用戶,特殊身份用戶希望通過隱藏傳輸系統(tǒng)構建隱藏通道尋找到相同身份者。例如,用戶A所在的節(jié)點u與用戶B所在的節(jié)點v進行基于BT協(xié)議的數(shù)據(jù)交換,節(jié)點u利用編碼模塊對原始的請求隊列進行重新排列,將約定的密鑰隱藏到新生成的請求隊列之中。當節(jié)點v接收到請求隊列之后首先通過解碼模塊將請求隊列中隱藏的信息解析出來,通過密鑰處理模塊對密鑰進行驗證,從而驗證節(jié)點u的真實身份。具體過程如圖4所示。
Figure 4 Structure of node transmission圖4 節(jié)點傳輸結構圖
3.2.1 系統(tǒng)的基礎架構
系統(tǒng)的基礎架構包括一個數(shù)據(jù)傳輸客戶端和一個插件的管理模塊。
(1)數(shù)據(jù)傳輸客戶端主要解析種子文件獲取待下載的文件的一些信息;連接Tracker獲取peer的IP和端口;連接peer進行數(shù)據(jù)上傳和下載;對要發(fā)布的信息提供共享文件制作和生成種子文件。
(2)插件管理模塊主要用于注冊和反注冊插件,正確地找到插件的路徑并初始化插件;啟用和禁用插件,對已經(jīng)注冊的插件可以根據(jù)需要啟用或者禁用;顯示插件的基本信息,如插件的版本、描述、版權等;配置插件的參數(shù),對插件自身的一些參數(shù)進行設置。
3.2.2 插件系統(tǒng)
插件程序主要包括編碼與解碼模塊、密鑰處理模塊和用戶管理模塊。
(1)編解碼模塊主要是通過Lehmer code算法對節(jié)點發(fā)出的請求隊列順序進行重新排列,構建能夠隱藏認證信息的隱藏通道。
(2)密鑰處理模塊根據(jù)通信雙方的ID和密鑰K,通過一個約定好的Hash算法得到一個能夠驗證雙方身份的信息。
(3)用戶管理模塊對編解碼模塊解析出的信息進行比對,判斷對方節(jié)點的身份,如果對方為管理員身份時,將對方節(jié)點的ID存入ID table,同時將生成密鑰的下半部分發(fā)送給源節(jié)點,表明自己的身份。
插件系統(tǒng)的構建以及密鑰處理和編解碼模塊的實現(xiàn)是創(chuàng)建隱藏通道和身份識別的核心技術,是實現(xiàn)系統(tǒng)功能的關鍵。
假設用一個密鑰K來表明特殊節(jié)點的身份,特殊節(jié)點u通過密鑰處理模塊得到身份驗證信息m(由K計算得到),使用編碼模塊將m的前半部分隱藏在要發(fā)送的數(shù)據(jù)塊請求隊列中,發(fā)送攜帶身份驗證信息m/2的請求隊列給節(jié)點v;如果節(jié)點v有相同的身份屬性,那么它就能夠通過解碼模塊將隱藏的信息解析出來并與自己的密鑰進行比對;如果能夠成功匹配那么證明雙方的身份屬性相同,就用明文的方式發(fā)送m的下半部分給對方,使雙方都知道彼此的身份屬性。如果v是個普通的節(jié)點,它不會發(fā)現(xiàn)任何的違規(guī)并與u進行通信,因為任何的請求訂單都是被BitTorrent協(xié)議所允許的。而且,即使v注意到這個請求命令通道并且能夠正確地譯碼,它也不能夠發(fā)現(xiàn)違規(guī),因為它根本不知道密鑰K。身份驗證過程如圖5所示。
Figure 5 Authentication圖5 身份驗證過程
(1)對發(fā)送隊列的編碼算法。
當一個特殊身份用戶u已經(jīng)決定哪些數(shù)據(jù)塊要從鄰居節(jié)點v處請求的時候,將要發(fā)送給v的請求隊列就用算法1來進行編碼轉換。
算法1編碼算法
把信息m(密鑰的上半部分)使用Hash函數(shù)解析成數(shù)字,將它轉化成階乘數(shù)字系統(tǒng)來表示,表示成M!,通過M!以萊曼編碼的形式得到一個新的排列。
算法1的流程如圖6所示。
Figure 6 Algorithm 1 flowchart圖6 算法1流程圖
(2)對接收隊列的解碼算法。
當一個特殊身份用戶接收到相同身份屬性用戶的請求,用算法1的逆運算(算法2)可得到隱藏在隊列中的信息。
算法2解碼算法
將接收隊列Q與順序隊列進行逐位比對,通過查找Q中元素在順序隊列中的位置來還原階乘數(shù)M!。
算法2的流程圖如圖7所示。
Figure 7 Algorithm 2 flowchart圖7 算法2流程圖
通過算法1和算法2可以對要傳遞的驗證信息m進行隱藏傳輸,算法并沒有添加或者減少原來的信息,只是通過調(diào)整P2P網(wǎng)絡中節(jié)點請求數(shù)據(jù)塊的順序來創(chuàng)建隱藏通道,最終達到傳輸隱秘信息的目的。
因為節(jié)點隨機產(chǎn)生的請求隊列與編碼后的隊列是有發(fā)生碰撞的可能性的,為了避免這個問題就要選擇一個隨機的并足夠大的密鑰,才能夠保持偶然碰撞的可能性非常地低:這個偶然碰撞的可能性是2-|K|/2。因此,特殊身份用戶u選擇一個密鑰K的長度至少為6logn。為避免密鑰K發(fā)生碰撞,與v進行通信的時候,把Hash(idu‖idv‖K,logn)作為一個密鑰。其中‖表示串聯(lián)操作,Hash函數(shù)Hash(x,b)將一個bit位x∈{0,1}映射成為一個長度是b的bit串,如果輸入的值x有一個至少是b的信息熵,那么Hash(x,b)被成功猜出來的可能性最多是 2-b,這就保證了低碰撞可能性,詳細論證過程見參考文獻[6]。本文中的Hash函數(shù)使用的是MD5算法,則有m=MD5(idu‖idv‖K)。
基于COM的插件系統(tǒng)包括插件管理器、插件基本接口和插件功能三個要素。這里主要介紹插件結構的實現(xiàn)。
(1)COM插件管理器主要是管理COM組件的裝載與卸載,系統(tǒng)將每個COM插件都注冊到一個固定的COM分組中,主程序在COM分組中搜索出插件 。通過調(diào)用void SpecialReg(GUID ID_SubItem,BOOL bReGISter)函數(shù)將一個COM注冊、反注冊到某一個COM組中。而從COM組中列舉各個COM組件的代碼如下:
Figure 8 Experimental result圖8 實驗結果
ICatInformationPtr pICatInformation(CLSID_StdComponentCategoriesMgr);
IEnumCLSID* pIEnumCLSID=NULL ;
HRESULT hr=pICatInformation→EnumClassesOfCategories(1,
&CATID_RdExcelExportCategory,
0,
NULL,
&pIEnumCLSID) ;
(2)在COM插件中插件基本接口是一個包含基類的接口COM,在這個COM中它只定義接口,不作任何實現(xiàn)。主程序的插件所包含的COM對象都實現(xiàn)了如下COM接口。
Interface ICoPlugin:IUnknown
{
HRESULT LoadQueue([i] ULONG ulinQueueNumber);
ULONG Encode();//算法1實現(xiàn)編碼功能
ULONG Discode();//算法2實現(xiàn)解碼功能
HRESULT Key();/*密鑰處理模塊實現(xiàn)密鑰管理功能*/
}
插件的開發(fā)就是COM組件的開發(fā),是對接口中定義的各個功能的實現(xiàn)與封裝,具體的實現(xiàn)原理與算法上文已經(jīng)介紹,這里不再詳述。
本系統(tǒng)安全性與可行性主要取決于編碼后產(chǎn)生的新隊列與網(wǎng)絡中隨機產(chǎn)生的請求隊列是否會發(fā)生碰撞,如果發(fā)生碰撞,目標節(jié)點會錯誤地判斷源節(jié)點的身份,證明系統(tǒng)設計是有缺欠的。本文通過實驗對系統(tǒng)可行性進行了驗證,實驗網(wǎng)絡中設有2個特殊節(jié)點和100個普通節(jié)點,檢查各節(jié)點在通信過程中是否會發(fā)生請求隊列碰撞的現(xiàn)象。實驗結果如圖8所示。實驗用的密鑰為: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
實驗結果顯示,在這次實驗中發(fā)生碰撞的概率是0%,同時根據(jù)得到的新請求隊列可以看出,34個請求組成的請求隊列發(fā)生碰撞的概率是1/234,這是個小概率事件。說明系統(tǒng)具有相當?shù)陌踩院鸵欢ǖ目尚行浴?/p>
本文通過對萊曼編碼算法在BT網(wǎng)絡數(shù)據(jù)塊交換過程中的應用,采用插件技術設計了一個隱藏傳輸系統(tǒng),并給出了關鍵技術的實現(xiàn)。此系統(tǒng)在BT網(wǎng)絡中通過文件下載就能夠發(fā)現(xiàn)相同身份的密謀者,而且具有良好的擴展性和隱秘性,在Internet中具有一定的應用價值。同時,在BT網(wǎng)絡下可以嘗試更多的信息隱藏算法,而萊曼編碼也可以放到其它的通信協(xié)議中構建隱藏傳輸通道,針對這些問題我們將做進一步的研究。
[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)
附中文參考文獻:
[2] 陳貴海,李振華.對等網(wǎng)絡:結構、應用與設計[M].北京:清華大學出版社,2007.
[7] 梁忠杰,思敏,李婷. COM技術和動態(tài)鏈接庫技術的應用研究[J]. 微計算機應用, 2006,27(6):702-705.
[8] 潘愛民.COM原理與應用[M].北京:清華大學出版社,2001.