包旭東,尤 淳,李勇軍
(西北工業大學計算機學院,陜西 西安 710129)
BT網絡是一種結構化的P2P網絡,廣泛應用于文件共享與傳輸。為了加強對BT網絡的監管,可以賦予網絡中部分節點管理員的身份,對網絡中的節點和共享文件進行監督。在這個過程中,為了防止惡意節點發現這部分節點的管理員身份,而執行一些欺騙的手段,管理員節點必須對自己的身份保密。此外,管理員之間還需要進行信息的交互,這就要求管理員在不暴露身份的情況下,在網絡中尋找并發現其它管理員身份的節點,并與之建立連接。
本文設計和實現了一個隱藏傳輸系統解決上述問題。該系統主要是將身份的驗證信息通過Lehmer code編碼[1]隱藏在正常數據塊請求隊列中發送給其它節點,這樣如果接收到請求隊列的節點是管理員身份,那么它就能夠通過已知的算法從隊列中提取驗證信息,并驗證發送隊列的節點的身份。如果接收者是普通節點,那么它將得不到任何額外的信息,只會按照請求隊列發送相應的數據塊給目標節點。
為了提高開發效率和質量,開發出擴展方便、易維護的系統,在設計過程中使用了插件技術,根據不同的功能劃分不同的插件模塊,這樣開發出的系統結構清晰、易維護,模塊之間耦合性低,更新擴展靈活。
本文重點介紹BT網絡隱藏傳輸系統的設計與實現。
構建基于插件技術的BT網絡隱藏傳輸系統主要涉及BitTorrent通信協議、信息隱藏技術和插件技術三個方面的內容。
BT協議[2]是架構于TCP/IP協議之上的一個P2P文件傳輸協議,處于TCP/IP結構的應用層。BT網絡結構如圖1所示,BT用戶通過解析下載到的種子文件,得到Tracker服務器地址和目標文件的Hash值。用戶A連接Tracker服務器,獲得文件上傳者B和C的ID,然后與B和C分別建立連接,雙方通告自己擁有的數據塊,最后向目標ID發送數據塊請求隊列,進行數據下載。

Figure 1 BT network圖1 BT網絡結構
信息隱藏技術(也叫隱寫術Steganography)[3~5],指的是不讓除預期的接收者以外的任何人知曉信息的傳遞事件或者信息的內容。通常是將秘密信息隱藏到看上去普通的信息中進行傳送。
基于Lehmer code的隱藏通道構建[6],首先把要通過隱藏通道傳輸的信息m解析成數字,將它轉化成階乘數字系統來表示,表示成M!;然后通過萊曼編碼把原先有序列表中的每個元素移動到其置換后的目標位置上,通過這樣的置換將M!所表示的信息隱藏到新的排列之中。

Figure 2 Conversion process of factorial number
圖2 階乘數轉換過程圖
新的排列中就隱藏了階乘數3010!的信息,同樣如果要從隊列中提取隱藏信息,使用轉換過程的逆運算就能夠實現。
插件(Plug-in)是一種遵循一定規范的應用程序接口編寫出來的程序。簡單來說插件技術就是在軟件的設計開發過程中根據功能和需求把軟件劃分成兩個主要部分:主程序和插件程序。主程序主要完成程序的基礎功能以及對插件的管理,插件程序主要實現部分相對獨立的功能,這樣通過對插件的修改和增減來調整和維護整個軟件,由于插件與主程序是相對獨立的,耦合性很低,所以對插件的調整對整個程序影響較小。
組件對象模型COM(Component Object Model)[7,8]是一個較好的實現插件的技術,基于COM建立的插件系統,具有與語言無關、進程透明、可重用的特性。插件就是一個COM組件,插件程序作為COM組件程序,包含了一個或者多個COM對象,這些對象都實現了相同的COM接口,通過在注冊表的指定位置查找COM組件的CLSID值,來訪問COM對象,調用插件,使用插件提供的服務。COM允許把相關的一組COM類組織到一個類別組中,組中的所有COM類都實現同一組接口,共享一個類別ID,主程序從COM類分組中搜索需要的插件。具體實現步驟如下:
(1)注冊一個COM組:CATID_Plugin;
(2)插件實現包含ICoPlugin接口的COM類,并注冊到COM組CATID_Plugin中;
(3)主程序啟動組件類別管理器從COM組中列舉各個COM組件,得到COM組件的CLSID;
(4)根據不同的功能需求決定使用哪個ICoPlugin接口指針調用LoadFile方法;
(5)程序退出的時候,釋放COM對象,并釋放COM庫所占用的資源。
基于插件技術的BT網絡隱藏傳輸系統主要通過調整數據塊請求隊列來創建隱藏信道完成隱藏傳輸。將待請求的隊列發送給插件系統,由插件系統的密鑰處理模塊生成密鑰,編碼與解碼模塊對請求隊列進行重新編碼,最后使用新的請求隊列與目標節點進行數據交換。如果插件系統中的用戶管理模塊能夠接收到目標節點的應答密鑰,一個隱藏傳輸信道就成功建立。系統模型如圖3所示。

Figure 3 System model圖3 系統模型圖
系統運行在如圖1所示的BT網絡中,用戶A、B、C為特殊身份用戶,其它節點為普通用戶,特殊身份用戶希望通過隱藏傳輸系統構建隱藏通道尋找到相同身份者。例如,用戶A所在的節點u與用戶B所在的節點v進行基于BT協議的數據交換,節點u利用編碼模塊對原始的請求隊列進行重新排列,將約定的密鑰隱藏到新生成的請求隊列之中。當節點v接收到請求隊列之后首先通過解碼模塊將請求隊列中隱藏的信息解析出來,通過密鑰處理模塊對密鑰進行驗證,從而驗證節點u的真實身份。具體過程如圖4所示。

Figure 4 Structure of node transmission圖4 節點傳輸結構圖
3.2.1 系統的基礎架構
系統的基礎架構包括一個數據傳輸客戶端和一個插件的管理模塊。
(1)數據傳輸客戶端主要解析種子文件獲取待下載的文件的一些信息;連接Tracker獲取peer的IP和端口;連接peer進行數據上傳和下載;對要發布的信息提供共享文件制作和生成種子文件。
(2)插件管理模塊主要用于注冊和反注冊插件,正確地找到插件的路徑并初始化插件;啟用和禁用插件,對已經注冊的插件可以根據需要啟用或者禁用;顯示插件的基本信息,如插件的版本、描述、版權等;配置插件的參數,對插件自身的一些參數進行設置。
3.2.2 插件系統
插件程序主要包括編碼與解碼模塊、密鑰處理模塊和用戶管理模塊。
(1)編解碼模塊主要是通過Lehmer code算法對節點發出的請求隊列順序進行重新排列,構建能夠隱藏認證信息的隱藏通道。
(2)密鑰處理模塊根據通信雙方的ID和密鑰K,通過一個約定好的Hash算法得到一個能夠驗證雙方身份的信息。
(3)用戶管理模塊對編解碼模塊解析出的信息進行比對,判斷對方節點的身份,如果對方為管理員身份時,將對方節點的ID存入ID table,同時將生成密鑰的下半部分發送給源節點,表明自己的身份。
插件系統的構建以及密鑰處理和編解碼模塊的實現是創建隱藏通道和身份識別的核心技術,是實現系統功能的關鍵。
假設用一個密鑰K來表明特殊節點的身份,特殊節點u通過密鑰處理模塊得到身份驗證信息m(由K計算得到),使用編碼模塊將m的前半部分隱藏在要發送的數據塊請求隊列中,發送攜帶身份驗證信息m/2的請求隊列給節點v;如果節點v有相同的身份屬性,那么它就能夠通過解碼模塊將隱藏的信息解析出來并與自己的密鑰進行比對;如果能夠成功匹配那么證明雙方的身份屬性相同,就用明文的方式發送m的下半部分給對方,使雙方都知道彼此的身份屬性。如果v是個普通的節點,它不會發現任何的違規并與u進行通信,因為任何的請求訂單都是被BitTorrent協議所允許的。而且,即使v注意到這個請求命令通道并且能夠正確地譯碼,它也不能夠發現違規,因為它根本不知道密鑰K。身份驗證過程如圖5所示。

Figure 5 Authentication圖5 身份驗證過程
(1)對發送隊列的編碼算法。
當一個特殊身份用戶u已經決定哪些數據塊要從鄰居節點v處請求的時候,將要發送給v的請求隊列就用算法1來進行編碼轉換。
算法1編碼算法
把信息m(密鑰的上半部分)使用Hash函數解析成數字,將它轉化成階乘數字系統來表示,表示成M!,通過M!以萊曼編碼的形式得到一個新的排列。
算法1的流程如圖6所示。

Figure 6 Algorithm 1 flowchart圖6 算法1流程圖
(2)對接收隊列的解碼算法。
當一個特殊身份用戶接收到相同身份屬性用戶的請求,用算法1的逆運算(算法2)可得到隱藏在隊列中的信息。
算法2解碼算法
將接收隊列Q與順序隊列進行逐位比對,通過查找Q中元素在順序隊列中的位置來還原階乘數M!。
算法2的流程圖如圖7所示。

Figure 7 Algorithm 2 flowchart圖7 算法2流程圖
通過算法1和算法2可以對要傳遞的驗證信息m進行隱藏傳輸,算法并沒有添加或者減少原來的信息,只是通過調整P2P網絡中節點請求數據塊的順序來創建隱藏通道,最終達到傳輸隱秘信息的目的。
因為節點隨機產生的請求隊列與編碼后的隊列是有發生碰撞的可能性的,為了避免這個問題就要選擇一個隨機的并足夠大的密鑰,才能夠保持偶然碰撞的可能性非常地低:這個偶然碰撞的可能性是2-|K|/2。因此,特殊身份用戶u選擇一個密鑰K的長度至少為6logn。為避免密鑰K發生碰撞,與v進行通信的時候,把Hash(idu‖idv‖K,logn)作為一個密鑰。其中‖表示串聯操作,Hash函數Hash(x,b)將一個bit位x∈{0,1}映射成為一個長度是b的bit串,如果輸入的值x有一個至少是b的信息熵,那么Hash(x,b)被成功猜出來的可能性最多是 2-b,這就保證了低碰撞可能性,詳細論證過程見參考文獻[6]。本文中的Hash函數使用的是MD5算法,則有m=MD5(idu‖idv‖K)。
基于COM的插件系統包括插件管理器、插件基本接口和插件功能三個要素。這里主要介紹插件結構的實現。
(1)COM插件管理器主要是管理COM組件的裝載與卸載,系統將每個COM插件都注冊到一個固定的COM分組中,主程序在COM分組中搜索出插件 。通過調用void SpecialReg(GUID ID_SubItem,BOOL bReGISter)函數將一個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中它只定義接口,不作任何實現。主程序的插件所包含的COM對象都實現了如下COM接口。
Interface ICoPlugin:IUnknown
{
HRESULT LoadQueue([i] ULONG ulinQueueNumber);
ULONG Encode();//算法1實現編碼功能
ULONG Discode();//算法2實現解碼功能
HRESULT Key();/*密鑰處理模塊實現密鑰管理功能*/
}
插件的開發就是COM組件的開發,是對接口中定義的各個功能的實現與封裝,具體的實現原理與算法上文已經介紹,這里不再詳述。
本系統安全性與可行性主要取決于編碼后產生的新隊列與網絡中隨機產生的請求隊列是否會發生碰撞,如果發生碰撞,目標節點會錯誤地判斷源節點的身份,證明系統設計是有缺欠的。本文通過實驗對系統可行性進行了驗證,實驗網絡中設有2個特殊節點和100個普通節點,檢查各節點在通信過程中是否會發生請求隊列碰撞的現象。實驗結果如圖8所示。實驗用的密鑰為:i am a key。
得到MD5值:
md5:4e83c3530fc2796a8d2b88db7426c22d
得到的階乘數:
(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)!
編碼后的數列:
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
實驗結果顯示,在這次實驗中發生碰撞的概率是0%,同時根據得到的新請求隊列可以看出,34個請求組成的請求隊列發生碰撞的概率是1/234,這是個小概率事件。說明系統具有相當的安全性和一定的可行性。
本文通過對萊曼編碼算法在BT網絡數據塊交換過程中的應用,采用插件技術設計了一個隱藏傳輸系統,并給出了關鍵技術的實現。此系統在BT網絡中通過文件下載就能夠發現相同身份的密謀者,而且具有良好的擴展性和隱秘性,在Internet中具有一定的應用價值。同時,在BT網絡下可以嘗試更多的信息隱藏算法,而萊曼編碼也可以放到其它的通信協議中構建隱藏傳輸通道,針對這些問題我們將做進一步的研究。
[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] 陳貴海,李振華.對等網絡:結構、應用與設計[M].北京:清華大學出版社,2007.
[7] 梁忠杰,思敏,李婷. COM技術和動態鏈接庫技術的應用研究[J]. 微計算機應用, 2006,27(6):702-705.
[8] 潘愛民.COM原理與應用[M].北京:清華大學出版社,2001.