2007年11月25日星期日

网站登录的加密传输安全

  刚才看到了两篇文章,分别是“QQ网站登录的RSA加密传输缺陷分析”和“RSA非对称加密的一些非常规应用”,我这里谈一下我的一些看法。

  我以前曾经写过一篇文章“网站的安全登录认证设计”,对于QQ登录使用RSA进行加密传输,的确是一种低成本的替代SSL的方法,因为SSL本身需要数字证书颁发机构(CA)的介入,还需要一定费用,因此对于安全程度不高的系统使用RSA加密进行“网络传输”上的加密安全也是一种选择。

  然而,不使用SSL带来的后果就是安全性的降低,相当于网站自己当CA,自己颁发数字证书。数字证书颁发机构(CA)在互联网安全生态链中扮演一个非常重要的角色,因为CA充当可信任的第三方在验证申请者的真实身份后才颁发SSL证书。因此,CA从一定程度上保护了最终用户的信息安全,并预防了网站自己“内鬼”从中窃取用户信息的可能性。因此,使用RSA并不能完全替代SSL的作用。

  不过如果黑客通过arp欺骗的方法伪造的RSA密钥的话,我觉得也不一定能窃取用户的密码。因为用户验证密码并非将客户端用户的密码传到服务器上进行验证,通常情况下只要客户端用户密码的“消息摘要算法(Hash function)”和服务器端的一致即可,因此,验证的方法可以这样进行:客户端将用户密码的HASH数值(MD5或者SHA1)使用服务器端生成的公钥进行RSA加密,并传输到服务器端,服务器端接收到以后,使用私钥进行解谜,解密出HASH码后和数据库中计算出的HASH码进行比较,从而进行认证。

  这样,即使黑客使用arp欺骗窃取了用户传输的数据,也仅仅窃取了用户密码的HASH值,并不是用户的密码明文,而从密码的HASH值反推用户密码则是十分困难的,详见“密码学基础”一文,因此得到的数据也没有多大用处。

  总的来说,增强QQ登录密码的安全强度的方法还有很多种,最安全的方法可以使用类似网上银行的USB Key进行登录验证,那样的安全性就基本达到了相当高的程度了,不过使用成本也达到很高的程度了。