基于插件技术的BT网络隐藏传输系统*
2015-07-10包旭东李勇军
包旭东,尤 淳,李勇军
(西北工业大学计算机学院,陕西 西安 710129)
1 引言
BT网络是一种结构化的P2P网络,广泛应用于文件共享与传输。为了加强对BT网络的监管,可以赋予网络中部分节点管理员的身份,对网络中的节点和共享文件进行监督。在这个过程中,为了防止恶意节点发现这部分节点的管理员身份,而执行一些欺骗的手段,管理员节点必须对自己的身份保密。此外,管理员之间还需要进行信息的交互,这就要求管理员在不暴露身份的情况下,在网络中寻找并发现其它管理员身份的节点,并与之建立连接。
本文设计和实现了一个隐藏传输系统解决上述问题。该系统主要是将身份的验证信息通过Lehmer code编码[1]隐藏在正常数据块请求队列中发送给其它节点,这样如果接收到请求队列的节点是管理员身份,那么它就能够通过已知的算法从队列中提取验证信息,并验证发送队列的节点的身份。如果接收者是普通节点,那么它将得不到任何额外的信息,只会按照请求队列发送相应的数据块给目标节点。
为了提高开发效率和质量,开发出扩展方便、易维护的系统,在设计过程中使用了插件技术,根据不同的功能划分不同的插件模块,这样开发出的系统结构清晰、易维护,模块之间耦合性低,更新扩展灵活。
本文重点介绍BT网络隐藏传输系统的设计与实现。
2 基本原理
构建基于插件技术的BT网络隐藏传输系统主要涉及BitTorrent通信协议、信息隐藏技术和插件技术三个方面的内容。
2.1 BT协议
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网络结构
2.2 信息隐藏算法
信息隐藏技术(也叫隐写术Steganography)[3~5],指的是不让除预期的接收者以外的任何人知晓信息的传递事件或者信息的内容。通常是将秘密信息隐藏到看上去普通的信息中进行传送。
基于Lehmer code的隐藏通道构建[6],首先把要通过隐藏通道传输的信息m解析成数字,将它转化成阶乘数字系统来表示,表示成M!;然后通过莱曼编码把原先有序列表中的每个元素移动到其置换后的目标位置上,通过这样的置换将M!所表示的信息隐藏到新的排列之中。
Figure 2 Conversion process of factorial number
图2 阶乘数转换过程图
新的排列中就隐藏了阶乘数3010!的信息,同样如果要从队列中提取隐藏信息,使用转换过程的逆运算就能够实现。
2.3 基于COM的插件技术
插件(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库所占用的资源。
3 系统设计
3.1 系统模型
基于插件技术的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 系统的功能描述
3.2.1 系统的基础架构
系统的基础架构包括一个数据传输客户端和一个插件的管理模块。
(1)数据传输客户端主要解析种子文件获取待下载的文件的一些信息;连接Tracker获取peer的IP和端口;连接peer进行数据上传和下载;对要发布的信息提供共享文件制作和生成种子文件。
(2)插件管理模块主要用于注册和反注册插件,正确地找到插件的路径并初始化插件;启用和禁用插件,对已经注册的插件可以根据需要启用或者禁用;显示插件的基本信息,如插件的版本、描述、版权等;配置插件的参数,对插件自身的一些参数进行设置。
3.2.2 插件系统
插件程序主要包括编码与解码模块、密钥处理模块和用户管理模块。
(1)编解码模块主要是通过Lehmer code算法对节点发出的请求队列顺序进行重新排列,构建能够隐藏认证信息的隐藏通道。
(2)密钥处理模块根据通信双方的ID和密钥K,通过一个约定好的Hash算法得到一个能够验证双方身份的信息。
(3)用户管理模块对编解码模块解析出的信息进行比对,判断对方节点的身份,如果对方为管理员身份时,将对方节点的ID存入ID table,同时将生成密钥的下半部分发送给源节点,表明自己的身份。
4 关键技术的实现
插件系统的构建以及密钥处理和编解码模块的实现是创建隐藏通道和身份识别的核心技术,是实现系统功能的关键。
假设用一个密钥K来表明特殊节点的身份,特殊节点u通过密钥处理模块得到身份验证信息m(由K计算得到),使用编码模块将m的前半部分隐藏在要发送的数据块请求队列中,发送携带身份验证信息m/2的请求队列给节点v;如果节点v有相同的身份属性,那么它就能够通过解码模块将隐藏的信息解析出来并与自己的密钥进行比对;如果能够成功匹配那么证明双方的身份属性相同,就用明文的方式发送m的下半部分给对方,使双方都知道彼此的身份属性。如果v是个普通的节点,它不会发现任何的违规并与u进行通信,因为任何的请求订单都是被BitTorrent协议所允许的。而且,即使v注意到这个请求命令通道并且能够正确地译码,它也不能够发现违规,因为它根本不知道密钥K。身份验证过程如图5所示。
Figure 5 Authentication图5 身份验证过程
4.1 编解码模块实现
(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网络中节点请求数据块的顺序来创建隐藏通道,最终达到传输隐秘信息的目的。
4.2 密钥处理模块
因为节点随机产生的请求队列与编码后的队列是有发生碰撞的可能性的,为了避免这个问题就要选择一个随机的并足够大的密钥,才能够保持偶然碰撞的可能性非常地低:这个偶然碰撞的可能性是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)。
4.3 基于COM的插件系统
基于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组件的开发,是对接口中定义的各个功能的实现与封装,具体的实现原理与算法上文已经介绍,这里不再详述。
5 实验验证
本系统安全性与可行性主要取决于编码后产生的新队列与网络中随机产生的请求队列是否会发生碰撞,如果发生碰撞,目标节点会错误地判断源节点的身份,证明系统设计是有缺欠的。本文通过实验对系统可行性进行了验证,实验网络中设有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,这是个小概率事件。说明系统具有相当的安全性和一定的可行性。
6 结束语
本文通过对莱曼编码算法在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.