`

QQ网站登录的RSA加密传输缺陷分析

 
阅读更多
来源:http://huaidan.org/archives/1493.html
QQ网站登录处没有使用https进行加密,而是采用了RSA非对称加密来保护传输过程中的
密码以及敏感信息的安全性。 QQ是在javascript中实现整个过程的。这个想法非常新
颖,详细可以参考云舒写过的 《RSA非对称加密的一些非常规应用》,地址为
http://www.icylife.net/yunshu/show.php?id=471

这个原理简单描述为下:
1. 在server端生成一对RSA密钥,包括public key 和 private key
2. public key传输给客户端浏览器, 客户端浏览器用public key加密敏感数据,比如
密码;加密后的密文传回给server,然后server用 private key解密。
3. 注意private key只保存在server端,而public key则分发给所有人。 由于
private key只有server知道,所以密文即使被截获了,也无法解开。

这个解决方案其实还是非常好的,至少他防住了大部分的攻击,但是为什么说它是无法
替代https,是有缺陷的呢?

因为这个方案无法防止中间人攻击 (man-in-the-middle)。

攻击过程如下:
1. 攻击者通过MIM(比如arp欺骗等)劫持server与客户端浏览器之间的http包
2. 攻击者生成一对伪造的RSA密钥: fake public key/fake private key
3. 攻击者将js文件中的public key替换为fake public key,并传输给客户端浏览器
4. 客户端浏览器用 fake public key加密敏感数据,比如密码,并将加密后的数据传
输给攻击者
5. 攻击者用fake private key解密,获得明文密码等
6. 攻击者用server的public key加密明文数据,并传送给server

整个过程中不会出现任何提示,而用户的明文数据则被窃取了!

而luoluo则提出来一个更邪恶的想法(顺便在这里祝luoluo今天生日快乐!),他提出
可以直接将加密的介质修改。

比如,如果是用js在做加密,则修改js,如果是用flash或java applert做加密,则替
换flash或applet。

那么为什么说https是不可替代的呢? 因为当实施中间人攻击的时候,浏览器会提示证
书已改变(具体参考云舒的关于https安全性的文章),这种机制是内建在浏览器里
的,攻击者无力改变它。所以这种报警是非常有意义的。

而如果像QQ一样使用js进行RSA加密传输,实施中间人攻击的时候,是不会有任何提示
的,一切都会在用户不知情的情况下发生。

这种情况和以前windows的RDP中间人攻击情况一样: 当使用3389端口的rdp协议登录时
候,证书改变的时候没有任何提示。

而相对设计比较安全的ssh协议,ssl协议等,则都会针对证书改变做出提示,防止中间
人攻击。

所 以,QQ的这个方案只能保护传输过程中一般的sniffer攻击,但是考虑到当今网络环
境下,大部分的sniffer都是基于arp欺骗的,所以这种保护 机制其实是非常脆弱的。
它只能对抗目前已知的arp sniffer软件,而对专门开发的替换关键字的软件,则无法
有效防御。一旦这种专门针对QQ网站登录的sniffer软件被开发出来并且提供下载,灾
难 就不远了。

不过这个方案还是有积极意义的,除去不能抵抗中间人攻击的缺陷外,其他方面都比较
完美,特别是成本低廉。如果与https结合使用来防止中间人攻击的话,整个方案就更
完美了。

之前曾与朋友戏言QQ是否会因为我这一篇文章而多花费几百万的经费去购买https证书
和https硬件加速服务器,现在让我们拭目以待,看看QQ是否是真正的用户至上。

希望QQ能越做越好。
分享到:
评论

相关推荐

    C# 用RSA加密实现Web登录密码加密传输(网页口令传输加密)

    八成网站登录口令“裸身待缚” 电商类全军覆没,在用户口令传输过程中,仍然存在很多隐患。一般而言,用户在登录网站,输入用户名和密码之后,从用户电脑传输到网站服务器,会经过口令传输、口令存储认证等过程。而...

    易语言 rsa加密 易语言 rsa加密易语言 rsa加密

    易语言 rsa加密 易语言 rsa加密易语言 rsa加密

    rsa加密前后端交互.前端加密后端解密

    在前后端交互中,RSA加密常用于保障数据传输的安全性,防止数据在传输过程中被窃取或篡改。以下是对RSA加密及其在前后端交互中应用的详细解释。 首先,RSA是由Ron Rivest、Adi Shamir和Leonard Adleman三位科学家在...

    Java RSA加密前后端实现

    项目中提到的"rsaLogin"可能是一个具体的登录功能模块,该模块利用RSA加密技术处理用户的登录请求。在登录过程中,用户输入的密码可能被前端用公钥加密,然后发送到服务器。服务器接收到加密的密码后,使用私钥进行...

    RSA加密登录示例

    RSA加密是一种非对称加密算法,它在网络...在给定的"rsa加密登录示例"压缩包中,可能包含了实现这些步骤所需的代码、配置文件和示例。通过研究这些文件,你可以更好地理解如何在实际项目中应用RSA加密进行安全登录。

    rsa.zip_QT RSA加密算法_Qt rsa加密_qt rsa加密步骤_rsa_rsa算法 qt

    在本项目中,"rsa.zip_QT RSA加密算法_Qt rsa加密_qt rsa加密步骤_rsa_rsa算法 qt",开发者已经实现了RSA加密算法,并结合Qt创建了一个具有图形界面的应用,使得加密过程更为直观易用。 首先,我们来深入理解RSA...

    C# RSA加密解密

    **C# RSA加密解密详解** 在信息安全领域,加密技术是一种至关重要的手段,用于保护数据的隐私和安全性。RSA(Rivest-Shamir-Adleman)算法是一种非对称加密算法,广泛应用于网络通信、数据存储等领域。C#作为.NET...

    RSA加密解密工具,用于文件的加密和解密* RSA加密解密:私钥解密,公钥加密

    9. **应用场景**:RSA加密解密工具常用于网络通信中的数据保护、软件激活、数字证书、电子邮件安全等领域,确保信息在传输过程中不被窃取或篡改。 总之,通过使用这个RSA加密解密工具并遵循操作指南,用户可以有效...

    C++写的实现RSA加密

    C++实现RSA加密 在这里,我们将详细介绍C++实现RSA加密的知识点。 标题分析 该标题表明了这个项目的主要内容是使用C++语言实现RSA加密算法。RSA加密是一种常用的非对称加密算法,广泛应用于数据加密和身份验证等...

    C#百度最新登录源码2015-07-04 添加Rsa加密

    本资源“C#百度最新登录源码2015-07-04 添加Rsa加密”是一个特定时期的C#代码示例,旨在帮助开发者实现对百度账号的模拟登录,并且包含了Rsa加密技术的集成,这样就无需依赖JavaScript文件进行加密操作。 首先,让...

    java js RSA加密支持超长加密

    RSA加密是一种非对称加密算法,它基于两个不同的密钥:公钥和私钥。在Java和JavaScript中实现RSA加密,对于处理较长的数据至关重要,因为这两种语言的标准库默认的RSA加密只能处理相对较小的块。这里我们将深入探讨...

    RSA加密示例

    RSA加密算法是信息安全领域的重要组成部分,其基于数学原理的非对称加密方式为数据传输和网络安全提供了坚实的保障。尽管该算法在信息安全领域应用广泛,但对于初学者而言,复杂的代码和抽象的数学概念往往构成理解...

    pb_rsa.zip_PB做加密解密_RSA PB_pb 加密_rsa pb_rsa加密

    用PowerBuilder实现RSA加密算法

    RSA加密登录java实现

    本文将深入探讨如何使用Java实现RSA加密登录。 首先,RSA算法基于两个密钥:公钥和私钥。公钥用于加密,而私钥用于解密。在登录场景中,服务器通常持有私钥,客户端(如用户端应用)持有公钥。登录时,客户端使用...

    unity工具类RSA加密和解密

    在Unity引擎中,RSA(Rivest-Shamir-Adleman)是一种广泛使用的非对称加密算法,常用于安全传输数据、数字签名等场景。本文将深入探讨RSA加密和解密的基础知识以及如何在Unity中实现这一功能。 首先,RSA加密的核心...

    RSA.zip_RSA 加密解密_rsa_rsa加密算法_rsa加密解密_rsa加密解密算法

    RSA算法是一种非对称加密算法,它在信息安全领域有着广泛的应用,例如数字签名、数据加密等。本资源提供了RSA加密解密的源码,适用于学习和理解RSA算法的工作原理及其实现。 首先,RSA算法的核心原理基于大数的因式...

    rsa加密算法(Delphi实现).zip

    RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。1987年首次公布,当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏...

    RSA.rar_RSA加密文件_RSA加密解密和_rsa加密算法_对称 加密文件_对称加密

    RSA算法是一种广泛应用于网络安全的公钥加密技术,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。它在信息安全领域扮演着至关重要的角色,特别是在数据传输、数字签名和身份验证等方面。 ...

    RSA加密算法解析加实例分析

    RSA算法在信息安全领域有着重要的地位,广泛应用于网络数据传输、电子邮件加密、数字签名等多个领域。 RSA加密算法的特点在于它使用一对密钥:公钥和私钥。公钥负责加密数据,可以对外公开,而私钥用于解密数据,...

    C#RSA加密DEMO

    在IT行业中,加密技术是确保数据安全的重要手段之一,特别是在网络传输和存储敏感信息时。C# 是一种广泛使用的编程语言,它提供了丰富的库来支持各种加密算法,其中包括RSA(Rivest-Shamir-Adleman)加密。RSA是一种...

Global site tag (gtag.js) - Google Analytics