基于BitTorrent协议Have消息的秘密信息传输方法
技术领域
本发明属于计算机网络与信息安全技术领域,特别涉及一种基于BitTorrent协议Have消息的秘密信息传输方法。
背景技术
随着计算机网络通信技术的迅速发展,信息传输的安全性问题日益严峻。传统的加密技术是将秘密信息扰乱,变成杂乱无章的密文,但是却直接暴露了保密通信的存在,容易引起攻击者的关注。信息隐藏技术则是将秘密信息藏于近似正常的数据流之中,从而隐藏了秘密信息传输通道的存在,相较于传统的加密技术,多了一层迷惑攻击者的手段,安全性更高。
P2P网络是一种分布式对等网络环境,非常便于广大网络用户使用网络共享服务,而且近年来涌现了诸多的P2P文件共享应用,如BitTorrent、eMule、BitComet、Vuze,深受网络用户的青睐,因此,P2P网络的信息安全性问题越来越受重视。现有的网络信息隐藏技术的研究主要集中于使用TCP/IP协议的Internet网络,对于使用BT协议的P2P网络的研究相对较少,因此,以P2P网络数据流作为载体的信息隐藏技术值得我们进一步地深入研究。
基于BT协议的P2P网络数据流大体可分为三部分:BT种子文件、BT服务器文件和BT消息文件。基于BT种子文件的网络信息隐藏方法主要是利用大小写不敏感变换和结构冗余复用技术,将秘密信息嵌入到BT种子文件各种关键字的冗余空间中(李自帅,孙兴明,王宝威等人.一种对等网中的隐写方案[C].智能信息隐藏与多媒体信号处理国际会议.2008:20-24.)。BT服务器,又称之为Tacker服务器,用于保存BT种子文件以及记录当前下载者的网络信息,基于Tacker服务器的网络信息隐藏方法主要分为两种:一是利用HTTPGET请求消息中关键字peer_id的冗余空间为载体嵌入秘密信息(J.Desimone,D.Johnson,B.Yuan.CovertChannelintheBitTorrentTrackerProtocol[EB/OL].Accessedfromhttp://scholarworks.rit.edu/other/300,2012.)(J.Desimone,D.Johnson,B.Yuan.基于BitTorrentTracker协议的隐信道[EB/OL].访问地址http://scholarworks.rit.edu/other/300,2012.),二是通过HTTP消息将秘密信息直接写入Tacker服务器(M.Cunche,M.Kaafar,R.Boreli.AsynchronousCovertCommunicationUsingBitTorrentTrackers[C].Proceedingsof2014IEEE11thInternationalConferenceonEmbeddedSoftwareandSystem,2014:827-830.)(M.Cunche,M.Kaafar,R.Boreli.基于BitTorrentTracker服务器的异步隐蔽通信[C].2014年第11届嵌入式软件与系统的IEEE国际会议,2014:827-830.)。基于BT消息的网络信息隐藏方法较少,尽管存在各种不同功能的BT消息,但是大多数都由于缺少足够的冗余空间而被忽视,也有个别例外,例如李子帅等人提出的基于Bitfield消息的信息隐藏算法和基于Piece消息的信息隐藏算法,则是将秘密信息嵌入到Bitfield消息以及Piece消息的冗余空间中(李子帅.基于BitTorrent网络的信息隐藏技术研究[D].湖南:湖南大学,硕士学位论文,2009.)。其中,基于Bitfield消息的信息隐藏算法会引入当前P2P节点所拥有数据块数目异常,导致频繁出现来至其他P2P节点的请求消息;基于Piece消息的信息隐藏算法会引入当前P2P节点所拥有数据块内容异常,导致频繁出现来至其他P2P节点的重传消息。因此,这两种方法都会主动地给正常的P2P通信带来出错异常,隐蔽性较差,而且这两种方法易受到网络复杂环境的干扰,鲁棒性较差。
BT消息文件中有一个具备向已连接节点宣称自己拥有某个数据块功能的消息,称之为Have消息。若数据块大小固定且共享文件越大,共享文件数据块的个数则越多,相应的Have消息的个数也就越多。目前尚未从公开资料中发现基于该消息的信息隐藏方法。
发明内容
发明目的:为了克服现有技术的不足,本发明提供了一种隐蔽性更强,鲁棒性更好的基于BitTorrent协议Have消息排序的信息隐藏方法。
技术方案:本发明提供了一种基于BitTorrent协议Have消息的秘密信息传输方法,以BT协议Have消息的传输通道为基础构建隐信道,根据秘密信息编码调整Have消息序列中Have消息的顺序,从而完成秘密信息的嵌入,使秘密信息随Have消息一起进行传输。
进一步,所述隐信道至少包括:信道加密器、信道编码器、信道解析器、信道监控器和信道校验器;
发送方用所述信道加密器对待发的N组秘密信息明文P进行加密处理,生成N组秘密信息密文S;
所述信道编码器通过二进制信息编码方式,将N组秘密信息密文S嵌入到N组Have消息序列中,使之随着Have消息一起传输;
所述信道解析器对已收的Have消息序列进行反向解码和解密,得出秘密信息明文P;
所述信道监控器具有两个功能,其中,功能一:信道监控器收到一组秘密信息明文P后计算相应的Hash值,并将计算出的结果返回给发送方的信道校验器;功能二:根据接收到的传输信号的明文判断秘密信息传输是否完整,然后做出对应的操作;
信道校验器用于核对信道监控器返回的各组秘密信息的明文所对应的Hash值与发送方计算出的对应的秘密信息明文P的Hash值是否一致,如果一致,则表示秘密信息密文S传输成功,继续传输下一组含有秘密信息密文S的Have消息序列,若不一致,则表示秘密信息密文S传输失败,需重传上一组含有秘密信息密文S的Have消息序列。
进一步,所述信道加密器中采用的加密方法为:用乱序ACSII码表中的字符来替代秘密信息。这种加密算法简单高效,只对秘密信息进行简易的乱序处理,既不会增加密文长度而带来信息传输的负担,也不会因为算法的复杂性而降低信息传输的效率。
进一步,所述信道编码器中采用的编码方法为:
(1)读取N组秘密信息密文S,以字符串的形式进行存储;
(2)依次取出(1)中所述字符串中的每个字符,直至全部取出为止;
(3)根据正常ACSII码表,将(2)中获得的每个字符转换为其所对应的二进制整型数;
(4)利用数据类型转换的方法,将(3)中获得的每个二进制数,从整型转换为字符串型,从而将N组秘密信息密文S用N组二进制字符串进行表示,并将所有转换结果以字符串数组的形式进行存储;
(5)依次取出(4)中获得的字符串数组中每组二进制字符串中的每个字符串变量;其中,每组二进制字符串中包括8个字符;
(6)选择第k个Have消息的索引号index_k为参考值,依次根据(5)中读取的一组二进制字符串中每个变量的值,并结合第k个Have消息的前面8个Have消息的索引号,对应调整第k个Have消息的前面8个Have消息;如果二进制字符串中二进制位为‘1’,则对应位调整为索引号大于第k个Have消息索引号的Have消息,如果二进制字符串中二进制位为‘0’,则对应位调整为索引号小于第k个Have消息索引号的Have消息;当第k个Have消息前面8个Have消息依次调整后完成一组秘密信息密文S的嵌入;
(7)判断本次嵌入秘密信息密文S的次数是否为4的倍数,如果不是4的倍数,重复(5)~(6),取出下一组二进制字符串中的所有字符,在进行(6)时,选择作为参考值的Have消息为本次的后一个;如果是4的倍数,重复(5)~(6),取出下一组二进制字符串中的所有字符,在进行(6)时,选择作为参考值的Have消息回到初始选择的位置;
(8)当N组秘密信息密文S全部取出并嵌入完毕后,继续编码一组代表‘01111110’的Have消息序列,表示密文发送结束,之后停止更改Have消息序列的排序,编码结束。
进一步,所述信道校验器采用的校验方法为:信道校验器根据信道监控器返回的秘密信息明文的Hash值与发送方计算出的对应的秘密信息明文的Hash值进行对比,如果一致,发送方先发送一个嵌入‘01111100’的Have消息序列,后继续发送下一组含有秘密信息密文S的Have消息序列,如果不一致,发送方先发送一个嵌入‘01111101’的Have消息序列,后重传上一组含有秘密信息密文S的Have消息序列。
工作原理:由于Have消息是BT消息文件中有一个具备向已连接节点宣称自己拥有某个数据块功能的消息,数据块大小固定且共享文件越大,共享文件数据块的个数则越多,相应的Have消息的个数也就越多,所以若以Have消息序列为载体嵌入秘密信息,嵌入容量足够大。除此以外,由于数据块Piece下载的随机性,与之对应的Have消息索引号也是随机的,若将秘密信息嵌入到Have消息的排序中,隐蔽性强。由于引入了信息校验机制,即便Have消息受到网络复杂环境的干扰而出错,也会通过该校验机制保证数据传输的准确性,鲁棒性较好。
有益效果:与现有技术相比,本发明在BT协议Have消息排序中引入信息编码技术来构建隐信道,对秘密信息的传输更加简便高效,不仅避免了给现有Have消息信道带来额外的通信负荷,而且引入信息编码位置循环移位机制和信息校验机制,进一步提高了秘密信息传输的隐蔽性和鲁棒性。
附图说明
图1为本发明的提供的方法的流程图;
图2为本发明的建立隐信道的示意图;
图3为本发明的信道加密器所设计的乱序ACSII码表;
图4为本发明中编码方法的流程图;
图5为本发明的信道监控器监控流程图;
图6为本发明的信道校验器的校验流程图。
具体实施方式
下面结合附图对本发明做更进一步的解释。
以客户端软件Vuze4.4为例,进一步阐明本发明的一种基于BitTorrent协议Have消息排序的信息隐藏方法。
图1为本发明信息隐藏方法的总体流程图。以BT协议Have消息的传输通道为基础来构建隐信道,发送方经过加密和编码两道工序,根据N组秘密信息密文S分别调整N组Have消息序列中Have消息的顺序,从而完成N组秘密信息密文S的嵌入,秘密信息随Have消息一起进行传输。接收方则通过反向解码和解密得出N组秘密信息明文P,并将之交由信道监控器进行判断处理。具体操作如下:1)若解码所得信息属于秘密信息类型,则执行功能一,计算这组秘密信息明文的Hash值并将之返回给信道校验器进行比对,信道校验器通过比对接收双方的Hash值是否相同,一方面给出传输成功与否的判断信号,另一方面则做出相应的数据传输操作,发送下一组密文或重传上一组密文。2)若解码所得信息属于传输信号类型,则执行功能二,针对传输的完整性而做出如下三种操作:①传输失败,接收方清除上一组已解析信息,同时等待解析上一组密文的重传数据;②传输成功,接收方保存上一组明文信息,同时等待解析下一组密文;③传输结束,接收方停止解析,整合N组明文信息,得出N组秘密信息明文P。
具体实施步骤如下:
步骤1:建立隐信道:
如图2所示,隐秘通信双方PeerA和PeerB,事先约定一个BT资源的Web服务器网站,用于上传和下载共享文件。PeerA负责利用Vuze客户端生成共享文件的种子文件,即*.torrent文件,并将之上传到Web服务器网站;PeerB负责利用Vuze客户端从Web服务器网站下载该种子文件,并通过种子文件与PeerA建立通信连接。其中,为了确保PeerB找到正确的种子文件,PeerA需将种子文件置顶,并在种子文件命名时,在其尾部添加一串约定好的标识码,如“***#123456$.torrent”。除此以外,为了避免其他普通下载者干扰PeerA和PeerB之间的隐秘通信,PeerA需验证与其建立连接下载者的IP地址是否属于隐秘通信方,如果是隐秘通信方,PeerA和PeerB之间建立隐信道,可以传输秘密信息,如果不是隐秘通信方,PeerA和PeerB之间只进行正常的共享文件传输。由于隐秘通信双方PeerA和PeerB之间的通信,是基于TCP通信为基础的,数据包包头中含有发送方的IP地址,所以很容易对隐秘通信方进行验证。
步骤2:解析Have消息传输通道:
解析Vuze4.4客户端软件的源代码,寻找Have消息传输模块所在位置。Vuze源代码是由Java编程实现,其内核模块所在目录为azureus2\src,该目录又包含com和org这两个子目录,Have消息发送模块位于com目录,对应的函数为sendPendingHaves(),Have消息接收模块位于org目录,对应的函数为decodeAZHave(),Have消息的封装模版位于com目录,对应的源文件为BTHave.java。分析BTHave的程序结构得知,Have消息的形式是一个三元组,分别是:消息长度、消息编号和消息负载。消息长度lenth固定为5个字节,消息编号id固定为4,消息负载则是一个4字节的整型数,即索引号,对应于某个数据块Piece的索引号index,以<lenth,id,index>的形式代表一个Have消息。其中,消息长度length和消息编号id固定不变,实际传输过程中,根据每组需要嵌入的秘密信息密文S和每个Have消息的索引号调整每组Have消息序列中Have消息的先后顺序,从而实现秘密信息密文的嵌入。
步骤3:用信道加密器进行加密:
发送方将待发的秘密信息文件plain_send.txt保存在D盘的根目录下,每个字符即为一组,将秘密信息明文P划分成N组。在Have消息发送模块之前设置信道加密器,对N组秘密信息明文P进行加密处理,生成N组秘密信息密文S,并将之存放在D盘根目录下,名为secret_send.txt的文档中。加密函数xxxEncode()的核心是一个自行设计的乱序ACSII码表,如图3所示,表中各个字符所代表的值不符合常规约定,加密结果则是用乱序ACSII码表中的字符来替代原秘密信息。该加密算法所达到的效果是对秘密信息进行简易的乱序处理,既不会增加密文长度而带来信息传输的负担,也不会因为算法的复杂性而降低信息传输的效率,同时还进一步地提高了其安全性。
步骤4:用信道编码器进行信息嵌入:
在信道加密器和Have消息发送模块之间设置信道编码器,其编码函数为xxxSortHaves(),对应于一种二进制信息编码方式。发送方利用该编码函数将D盘根目录下secret_send.txt文档中的N组秘密信息密文S嵌入到N组Have消息序列中,使之伴随Have消息一起传输,属于时间式信息隐藏方法。如图4所示,编码方法包括如下步骤:
步骤41:依次读取D盘根目录下文档secret_send.txt中的N组秘密信息密文S,以字符串的形式将之分配在变量名为data_s1的存储空间中;
步骤42:依次取出字符串data_s1中的每个字符,直至全部取出为止;
步骤43:根据正常的ACSII码表,将步骤42中依次取出的每个字符转换为其所对应的二进制整型数;
步骤44:利用数据类型转换的方法,将步骤43中转换获得每个二进制数,从整型转换为字符串型,从而将N组秘密信息密文S用N组二进制字符串进行表示,并将所有转换结果以字符串数组的形式依次存放在变量名为data_s2的存储空间中;
步骤45:依次取出字符串数组data_s2中每组二进制字符串中的每个字符串变量,直至全部取出为止;其中,每组二进制字符串中包括8个字符;
步骤46:选择第k个Have消息的索引号index_k为参考值,依次根据步骤45中读取的一组二进制字符串中每个变量的值,并结合第k个Have消息的前面8个Have消息的索引号,对应调整第k个Have消息的前面8个Have消息;如果二进制字符串中二进制位为‘1’,则对应位调整为索引号大于第k个Have消息索引号的Have消息,如果二进制字符串中二进制位为‘0’,则对应位调整为索引号小于第k个Have消息索引号的Have消息;当第k个Have消息前面8个Have消息依次调整后完成一组秘密信息密文S的嵌入;
步骤47:判断本次嵌入秘密信息密文S的次数是否为4的倍数,如果不是4的倍数,重复步骤45~步骤46,取出下一组二进制字符串中的所有字符,在进行步骤46时,选择作为参考值的Have消息为本次的后一个;如果是4的倍数,重复步骤45~步骤46取出下一组二进制字符串中的所有字符,在进行步骤46时,选择作为参考值的Have消息回到初始选择的位置;
步骤48:当N组秘密信息密文S全部取出并嵌入完毕后,继续编码一组代表‘01111110’的Have消息序列,表示密文发送结束,以便接收方停止解码,之后发送方停止更改Have消息的排序,编码结束。
在第一组秘密信息密文S进行嵌入时,可以选择从Have消息序列中第一个Have消息开始嵌入,即选择第九个Have消息的索引号为参考值,根据第一组秘密信息密文S对应的二进制字符串调整Have消息序列中前八个Have消息,从而完成第一组秘密信息密文S的嵌入。后面三组秘密信息密文S进行嵌入时,嵌入的位置依次向后移一位,即选择作为参考值的Have消息位置依次向后移一位;当第五组第一组秘密信息密文S进行嵌入时,嵌入位置回到初始的位置,即从第一个Have消息进行嵌入。
步骤5:用信道解析器进行信息提取:
在Have消息接收模块后设置信道解析器,即为信道加密器和信道编码器的逆向工程,其解析函数为xxxDecode(),接收方利用该解析函数对已收的Have消息序列进行反向解码和解密,最终得出秘密信息的明文或传输信号的明文,将之交由信道监控器进行处理。其中,接收方将秘密信息的明文保存在E盘根目录下plain_recv1.txt文档中,将传输信号的明文保存在E盘根目录下plain_recv2.txt文档中,以便信道监控器做出分类处理。其中,传输信号的明文为预先设置好三组字符串‘01111100’,‘01111101’和‘01111110’;‘01111100’表示传输成功信号,‘01111101’表示传输失败信息,‘01111110’表示传输结束信号。
步骤6:将解析结果发送到信道监控器进行监控并得到最后的秘密信息明文:
在信道解析器后设置信道监控器,根据解码所得明文的差异,做出相应的操作。如图5所示,为实现不同功能,其监控函数有两个,分别是xxxMonitor1()和xxxMonitor2(),即信道监控器具有两种功能。
当信道监控器的输入参数是秘密信息类型plain_recv1.txt文档时,信道监控器利用监控函数xxxMonitor1()实现功能一:信道监控器收到一组秘密信息明文后计算相应的Hash值,并将计算出的Hash值返回给发送方。具体操作步骤如下:信道监控器收到一个秘密信息明文字符,即代表一组秘密信息明文接收完毕;然后采用MD5哈希算法得出每组明文所对应的Hash值;并再综合利用加密函数xxxEncode()和编码函数xxxSortHaves()将每组Hash值返回给秘密信息发送方,利用其信道校验器进行验证。
如图6所示,信道校验器与信道监控器的功能一密切相关,其校验函数为xxxCheck(),作用在于核对接收双方各组明文所对应的Hash值是否一致,如果一致,则表示数据传输成功,继续传输下一组含有秘密信息密文的Have消息,如果不一致,则表示数据传输失败,需重传上一组含有秘密信息密文的Have消息。具体操作步骤如下:信道校验器利用解析函数xxxDecode()得出接收方返回的Hash值明文;然后同时采用MD5哈希算法得出发送方D盘根目录下plain_send.txt文档中每组秘密信息明文所对应的Hash值,并将之存储在D盘根目录下名为hash.txt的文档中;核对接收方返回的秘密信息明文的Hash值与发送方计算出的对应的秘密信息明文的Hash值是否一致,如果一致,发送方先发送一个嵌入‘01111100’的Have消息序列,后继续发送下一组含有秘密信息密文的Have消息,如果不一致,送方先发送一个嵌入‘01111101’的Have消息序列,后重传上一组含有秘密信息密文的Have消息序列。
当信道监控器的输入参数是传输信号类型plain_recv2.txt文档时,信道监控器利用监控函数xxxMonitor2()实现功能二:根据接收到的传输信号的明文判断秘密信息传输是否完整,然后做出相应的操作。具体操作步骤如下:如果接收到的传输信号的明文表示传输成功,接收方将上一组秘密信息明文信息保存在E盘根目录下plain_recv.txt文档中,同时等待解析下一组Have消息序列;如果接收到的传输信号的明文表示传输失败,接收方清除上一组E盘根目录下plain_recv1.txt文档中已解析信息,同时等待解析上一组Have消息序列的重传数据;如果接收到的传输信号的明文表示传输结束,接收方停止解析,整合E盘根目录下plain_recv.txt文档中的N组秘密信息明文,得出最终的秘密信息,至此,关闭接收双方之间的隐信道。
以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。