2021-2022收藏的精品资料毕业论文基于QQ聊天平台的安全通信.doc
《2021-2022收藏的精品资料毕业论文基于QQ聊天平台的安全通信.doc》由会员分享,可在线阅读,更多相关《2021-2022收藏的精品资料毕业论文基于QQ聊天平台的安全通信.doc(15页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、基于QQ聊天平台的安全通信研究数学计算机科学学院摘 要:QQ是中国使用最广泛的即时通信工具,其安全性对于用户安全和网络安全具有重要影响。QQ账号被盗后,其危害和影响是可怕的,用户丢失的大量好友资料和联系方式在短时间内是很难完全找回的。本文将通过对QQ登陆协议的分析性研究,分析其安全性,指出其中存在的安全漏洞,并说明QQ因此可能遭受的攻击,并对此提出改进意见,增强QQ通信的安全性!另外,本文也对QQ盗号也作了相应的研究,并提出了防范的方法。关键词:QQ;登录协议;安全漏洞;改进意见Secure communication based on QQ chat platformSchool of Ma
2、thmatics and Computer ScienceAbstract: QQ is the most widely used instant communication tools in China, Its safety has important influence to user security and network security. QQ account stolen, The harm and influence is terrible, User data lost a lot of friends and contact way in a short period o
3、f time is difficult to completely recovered. This article through to the analysis of the landing of QQ protocol, Analysis of the security, Pointed out the existence of security vulnerabilities, and Indicating the QQ so vulnerable to attack, And proposed improvements, Strengthen the QQ communication
4、security. In addition, This article has also made the corresponding research, handing over to QQ,And put forward the prevention methods.Keywords: QQ; Login agreement; Security vulnerabilities; Improvements第1章 QQ登录协议QQ的登陆协议是腾讯自己开发的一套基于二进制数据的应用层网络协议,QQ登陆协议采用了固定的格式,客户端与服务器发送的报文格式上仅有一点点区别。协议用到的对称加密算法为反馈
5、随机交织填充的TEA(Tiny Encryption Algorithm,一种分组加密算法)变形加密算法,记作 QQTEA ;用到的哈希函数为MD5。QQ登录分为UDP和TCP登录,还支持代理登录。大部分情况下使用UDP登录。UDP登录端口服务器为8000,本地端口一般是从4000开始选择,如果该端口已经被占用,则加1再测试,一直测试到一个没有被占用的端口。TCP登录服务器一般是443端口,本地端口选择方式和UDP一样。登录方式可以在登录设置里自由设置,但是无论哪种方式登录,其登录流程和数据包格式都是一样。QQ登陆主要分成下面6个步骤:(1)Touch包这个数据包是QQ客户端登录时发送的第一个
6、包,它的作用在于测试远程服务器是否能够正常响应(2)获取验证码由于部分QQ号码可能存在异地登录的情况,或因QQ号码被盗发送大量的垃圾信息,或使用了挂机软件或者挂机网站挂机,腾讯服务器检验到这些非正常的QQ使用情况时便会要求输入验证码(3)密码验证这个数据包的作用是将本地QQ的密码发送给服务器端进行验证。(4)验证令牌(Token)1这个数据包主要用于校验前几个数据包的Token数据,如果通过验证,服务器端会返回本次登录的时间和IP地址等相关信息。(5)验证令牌(Token)2(6)获取会话密钥这个数据包是QQ登录流程的最后一个数据包,主要用于向QQ客户端返回会话密钥(Session Key),
7、该会话密钥由服务器端生成。各步骤登录指令分别为 :0x0825、0x0826、0x0826、0x0826、0x0826、0x0828。服务器端客户端En(Key1,Data7)En(Key1,Data5)En(Key1,Data4)RKey,En(RKey,En(M2P,Key0)RKey, En(RKey,Data2)RKey, En(RKey,Data0)En(Key3,SessionKey)En(Key4,Data6)En(Key2,Key2,Key3)En(Key0,Key1,Key2)En(RKey,Data3)En(RKey,Data1) 图 QQ登录协议相关符号说明: RKey:
8、用来表示随机生成的16字节长度的密钥。En(Key,P):表示使用密钥Key对明文P加密,这里是指QQTEA加密。Datai:表示尚不清楚具体意义的数据。(i取正整数)Keyi:表示16字节长度的密钥。(i=0,1,2,3,4)MD5:它是一种哈希函数。M2P:Md5(Md5(QQPassword)。 QQPassword:QQ密码SessionKey:会话密钥。第2章 QQ登录协议的安全性2.1 TEA简介TEA算法是由剑桥大学计算机实验室的 David Wheeler和 Roger Needham 于1994年发明。 TEA是Tiny Encryption Algorithm的缩写。特点是
9、加密速度极快,高速高效,但是抗差分攻击能力差。TEA加密算法是一种分组密码算法,其明文密文块64比特(8字节),密钥长度128比特(16字节)。TEA加密算法的迭代次数可以改变,建议的迭代次数为32轮,两个TEA Feistel周期算为一轮。TEA算法被广泛应用于QQ的数据加密中,QQ采用16轮的TEA算法加密,在这时采取16轮加密而不采取标准的32轮加密为了减少验证服务器的压力。QQ在数据加密前采用了密码学中的常用的填充及交织技术,减少加密数据的相关性,增加破译者的破解难度。TEA算法代码如下:void qq_encipher(unsigned long *const plain, cons
10、t unsigned long *const key, unsigned long *const crypt)/参数为8字节的明文输入和16字节的密钥,输出8字节密文unsigned long left = plain0,right = plain1,a = key0, b = key1,c = key2, d = key3,n = 32, sum = 0,delta = 0x9E3779b9;/ 明文输入被分为左右两部分,密钥分为四部分存入寄存器,n表示加密轮数推荐32。delta是一个常数。while (n- 0) sum += delta;left += (right 5) + b);r
11、ight += (left 5) + d);crypt0 = left ;crypt1 = right ;void decrypt(unsigned long *v, unsigned long *k) /解密过程unsigned long y=v0, z=v1, sum=0xC6EF3720, i;unsigned long delta=0x9e3779b9; /delta黄金分割率。它的作用是使得每轮的加密不同。初始化为0x9e3779b9unsigned long a=k0, b=k1, c=k2, d=k3;for(i=0; i32; i+) /循环入口 z -= (y5) + d);
12、y -= (z5) + b);sum -= delta; /*结束循环*/v0=y;v1=z;2.2 QQTEA算法在本文第一章中提到,协议用到的对称加密算法为反馈随机交织填充的TEA(Tiny Encryption Algorithm,一种分组加密算法)变形加密算法,记作QQTEA。那么这里将主要介绍填充、交织和反馈这三点,如果大家对TEA算法的加密过程感兴趣,可参考相关文献1。(1)填充算法为了适用TEA算法,需要使得明文的字节数是8的倍数。如果明文本身的长度不是8的倍数,那么还要进行填充以使其成为8的倍数。以字节为单位,令N=原始字符串+10+填充字节数n,则N应该是8的倍数。具体的填充
13、方法:第一个字节为:(random()&0xf8)|n,随后填充(n+2)个字节random()&0xff ,后面接原始数据,最后填充7 个字节0x00 。因为使用了不同的随机数,所以填充的结果使得即使对于相同的明文,密文的结果也会不同。如图: 1Byte填充长度(n)+2 明文长度7Byte随机数 填充长度 随机数明文0x00random()&0xf8 n random()&0xf83Byte填充长度(n)=8-(明文长度+2)%8)(2)交织算法消息被分为多个加密单元,每一个加密单元都是8字节,使用TEA进行加密,加密结果与下一个加密单元做异或运算后再作为待加密的明文。(3)反馈加密因为T
14、EA是分组加密算法,所以需要将明文分块。plaini表示明文的第i个分组,cryptedi表示密文的第i个分组,所有分组加密使用的密钥是相同的,设为key。具体的反馈加密过程如下图所示:plaini cryptedi-1key TEAplaini-1 cryptedi当i=1时,cryptedi = E(key, plaini);当i1时,cryptedi = plaini-1 xor E(key, plaini xor cryptedi-1)。在参考文献1中提到要验证一个密钥是否是正确的,那么只需要取明文和密文的最后16Byte(也就是两个分组)就行了。可是根据上面给出的式子,我们就会发现,
15、对于第一个分组,其实并没有进行反馈处理,因此,只需要对前8Byte(即一个分组)出来解密,通过比较也能判断出测试密钥的正确性。2.3 伪随机数生成器在QQ2012客户端程序中使用了伪随机数生成器(PRNC),下面简单介绍伪随机数及其安全性。(1)伪随机数真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。而计算机中的随机函数是按照一定算法模拟产生的,其结果是确定的,是可见的。所以用计算机随机函数所产生的“随机数”并不随机,是伪随机数。(2)伪随机数生成器伪随机数字生成器(PRNG)是一种生成伪随机数的方法。在很多的加密算法
16、以及诸多安全协议中都涉及到了随机数的生成,由此可以看出,一个安全的伪随机数生成器对于密码学来说是至关重要的。因此研究伪随机数的安全性是尤为必要的,但是由于计算机的确定性,那么研究伪随机数的安全性往往是指在多项式时间内不可预测。需要指出的是,QQ2012客户端程序中使用的伪随机数生成器是一种线性同余发生器LCG(Linear congruential generator)。QQ2012 客户端使用的 LCG 来自Microsoft Visual/Quick C/C+ 的rand() 函数。具体的计算方法如下:Xn = (Xn-1 * A + B ) mod M 其中Xn 是序列的第n个数,Xn-
17、1 是序列的第n-1个数,A,B,M都是常数(一般会取质数)。当B=0时,叫做乘同余法。引出一个概念叫seed,它会被作为X0被代入上式中,然后每次调用rand()函数都会用上一次产生的随机值来生成新的随机值。可以看出实际上用rand()函数生成的是一个递推的序列,一切值都来源于最初的 seed。所以当初始的seed取一样的时候,得到的序列都相同。rand()函数原型:int _cdecl rand (void)return(holdrand=holdrand*214013L+2531011L)16)&0x7fff);若是要使用该线性同余发生器LCG来产生随机密钥,那么有两种方法:第一种是每次
18、产生两个字节,另一种是每次产生一个字节。作为一个通用的函数例程,其使用的应该是是第二种方法,具体函数例程如下:int fillrandom (char *buffer, const int size) int i; for(i=0;isize;i+) bufferi=rand()&0xff; 通过上文可以了解到,当选取恰当的A和B时,产生的序列周期是可以达到M的。对于32位的程序来说,这样的周期还是安全的。但是,如果按照上述例程来产生密钥,由于只使用到了8-15的比特位(最低位是第0位),其周期是大大缩短了。这样产生的一个完整周期,它的长度为224。在允许的时间范围内检索完这个序列是绝对有可能
19、的,这样一来便为离线字典攻击提供了机会。第3章 QQ登录协议的漏洞及改进3.1漏洞1-伪随机数生成器攻击上文中已经对伪随机数及QQ2012客户端程序中使用的伪随机数生成器进行了简要介绍,并分析了安全性。由此可知,因为伪随机数生成器的安全漏洞,才让我们能够对其生成的随机密钥进行有效预测。从本文第1章对QQ登录协议的介绍可以了解到,一旦我们预测到了Key0,就可以获得Key1,Key2;获得了Key2,进而就知道了Key3,Key4;通过Key3就能最终获得SessionKey(会话密钥)。所以,我们可以这样理解:对Key0的攻击,实际上就是对于SessionKey。因此,直接研究对QQ登录协议中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2021 2022 收藏 精品 资料 毕业论文 基于 QQ 聊天 平台 安全 通信
限制150内