APP下载

网络论坛口令的安全分析*

2018-05-25张李军张爱丽

通信技术 2018年5期
关键词:加密算法口令解密

杜 薇,张李军,张爱丽

(1.中国电子科技集团公司第三十研究所,四川 成都 610041;2.保密通信重点实验室,四川 成都 610041;3.河南师范大学新联学院,河南 郑州 450000)

0 引 言

网络论坛是互联网上的一种电子信息服务系统,也就是BBS(电子公告牌)。它是一种交互性强、内容丰富、及时性强且非常受欢迎的电子信息服务平台。网络论坛可为其注册用户提供多种服务,如信息交换、聊天和信息共享等。伴随着网络的蓬勃发展,论坛也有了迅猛发展。论坛可以分为综合类论坛和专题类论坛。综合类论坛信息丰富、广泛,包含了很多方面的信息,主要由大规模的网站组成。专题类论坛主要聚焦在某种类型的信息或者资源上。专题类论坛对个人消费和科学研究起着重要作用,每个人都可以根据自己的兴趣爱好找到对应的专题类论坛,如购物论坛、旅游论坛和编程论坛等。随着网络论坛的广泛使用,它的安全性也受到越来越多网络用户的关心。目前,口令是注册用户登陆论坛的最常用途径。因此,它最重要的安全就是用户口令的安全,而时不时发生的口令泄露事件震惊了绝大多数论坛用户。2011年11月,著名的计算机论坛CSDN泄露了大概600万用户的隐私,包括口令、邮件、生日和电话号码等[1]。于此同时,天涯社区超过4 000万用户的用户名和密码也被公布于众[2]。这无疑大大影响了大众对论坛安全的态度。2014年12月25日,官方铁路售票网站12306超过13万用户的账号、邮件和口令被泄露,甚至那些以密文方式存储于数据库中的口令也被泄露[3]。可见,口令的安全性面临着现实的挑战。

论坛是由论坛软件开发的,其中Discuz!和PhpWind是2个大家广泛熟悉的软件。2个论坛前端均采用“PHP”网络编程语言,后端数据库采用SQL或者MYSQL的设计架构。这样的架构有许多优点:多国语言的支持,适配公开或者私有的论坛建设,集成强大的搜索工具等。之所以聚焦于这2类论坛,是因为目前这2类论坛占有超过90%的市场份额。当前,网络论坛的安全性已经引起了很多学者的关注。Horseluke研究了Discunz[4]的加密函数,Bkd指出了PhpWind[5]的加密漏洞,Liu也分析了这个论坛所使用的cookie加密函数[6]。Zhang在2013年给出了phpBB3论坛的详细的安全分析[7]。

不同的论坛开发软件不同,口令的安全也不同。本文主要分析Discuz!和PhpWind论坛的口令安全,包括口令加密、口令破解的复杂性。通过安全性对比,针对加密算法的具体实现和口令的选择策略,提出了一些建议,用于增强论坛用户口令的安全性。

1 口令加密的机制

论坛软件的口令加密机制主要是指用户口令的加密存储。它可以分为两个方面,服务器端口令的加密存储和本地浏览器端口令的加密存储。在服务器端,后端数据库存储用户名和对应的加密后的口令。而本地浏览器端,这些信息也会被加密并保存在cookie里,以方便用户之后直接登录网站。下面将依次分析这2个论坛的口令加密方案。

1.1 Discuz!论坛的口令加密

1.1.1 服务器端口令加密

用户注册论坛时,会按要求提供用户名和口令。对于每一个用户名,Discuz!论坛软件会产生一个长度为6 Byte的随机数,称为salt值,用于口令加密。用户提交口令后,口令会被MD5算法加密2次。首先将用户口令直接作为MD5算法的输入,其次MD5算法的运算结果与salt值级联后,再次作为MD5算法的输入。加密运算表达为:

其中PASS是password对应的密文。

服务器将PASS作为最终的口令存储于数据库,同时将用户名和对应的salt值存放在数据库的“uc_member”表中。其中,“uc_member”表隶属于一个专用系统管理软件“UCenter”。当用户登录后,数据库会根据用户名检索对应的salt值,计算MD5(MD5(logging password)||salt)得到登录所用口令的密文结果。如果计算得到的结果与存储在数据库中的PASS数据匹配,用户则可以成功登录论坛。在注册和登录阶段的口令处理过程如图1所示。

图1 口令的加密与存储

需要注意的是,在Discuz!软件中,本身也有一个所谓的“password”存放在“members”表中,计算方式为:

即password是对一个随机数的MD5的杂凑值,但这个password对论坛用户毫无用处。它的存在只是为了保持与上一个Discuz!版本的兼容性。实际上,真正验证用户的口令依旧在“UCenter”界面实现。

1.1.2 安全提问的加密

除用户口令外,用户注册Discuz!论坛时,也需要对指定的安全提问做出回答。用户忘记口令时,可以根据当时注册时所留安全提问的答案找回口令。若用户的答案正确,可以重置用户口令。通过研究Discuz!论坛的源代码可以发现,这些安全提问的答案也是采用MD5算法加密。

加密运算流程如下:

其中ID是安全问题的ID,substr表示截取MD5杂凑值的第16~24位。

下面给出一个安全提问的答案加密过程的实例。

假设注册时论坛给出3个安全提问,用户选择对第3个安全提问进行回答,且答案为“1v1.name”。

假设安全提问如下:

根据加密函数,加密过程如下:首先计算第3个安全提问对应的ID=7的MD5的杂凑值,结果是8f14e45fceea167a5a36dedd4bea2543;其次,将对应的安全提问的答案与杂凑值拼接,为1v1.name8f14e 45fceea167a5a36dedd4bea2543;再次,计算其MD5的杂凑值,为f5d8e00a4ebc9ead 4611c04706ae05fd;最后,截取其杂凑结果的第16~24位,结果为“4611c047”,即Answer的值。

1.1.3 本地cookie口令加密

通过浏览器首次登录过论坛后,Discuz!论坛会借助加密函数“authcode”加密用户的个人信息(如用户名、口令、单位等),并将其对应的密文存放于本地浏览器的cookie中。这大大方便了用户的后续登录,因为浏览器会直接读取密文,解密用户名、口令,验证其正确性。如果解密后的信息正确,用户不需要再次输入用户名和口令就可以直接登录。现在给出本地cookie口令加密的原理。

本地cookie加密的过程分成3个阶段:密钥产生、类似RC4算法的加密和解密以及时效性和数据完整性校验,如图2所示。

图2 本地cookie加密的过程

密钥产生阶段(详见图3)描述了加密(或解密)密钥和完整性密钥的产生。加密密钥与RC4算法一起用于加密(或解密)用户的个人信息,而完整性密钥用于解密过程中,对数据进行完整性校验。首先,由全局变量“Discuz_auth_key”产生初始密钥,然后初始密钥再分解成3个子密钥,即Key_a、Key_b和Key_c。从图3可知,由这些子密钥可以得到加密密钥和完整性密钥。

图3 密钥产生的过程

密钥产生后,浏览器使用RC4算法加密(或解密)用户登录信息。加密时,密文存储于cookie中;解密时,对解密后的信息进行时效性检查和数据完整性验证。

这个验证过程可以被描述为如下几个情况:

(1)substr(result,0,10)==0;

(2)(substr(result,0,10)-time)0;

(3)substr(result,10,16)==substr(md5(substr(resu lt,26)||Key_b),0,16);

只要满足前两个情况中的一个就足够了。第一条表示数据的时效性是永久的,第二个条件表示cookie解密必须在cookie产生后,第三条则是通过检验“Key_b”的完整性来防止cookie被篡改。

1.2 PhpWind论坛的口令加密

1.2.1 服务器端口令加密

PhpWind论坛的每一个口令都仅采用一个简单的MD5算法加密:PASS=MD5(password)。所有的口令经过MD5运算后会被存储到数据库中。注意,这里没有引入随机数技术(即没有像Discuz!论坛里使用的salt值),而且MD5加密也仅仅执行了一次而已。

1.2.2 本地cookie口令加密

PhpWind论坛的cookie口令加密方式与Discuz!论坛类似,包含两个阶段。首先,它采用一个名为“PwdCode”的函数计算用户口令的MD5值。其次,通过一个名为“StrCode”的函数将此杂凑值编码为base64放入cookie中。第一阶段的明文包含浏览器的全局信息、用户口令以及一个称为安全认证参数的杂凑字符串。

整个加密过程可以由如下的伪代码描述:

PwdCode(password){

return MD5(Global[sever]||password||Global[hash]);

}

StrCode (string){

Key=substr(md5(Global[server]||Global[ha sh]),8,18);

Keylen=strlen(key);

Strlen=strlen(string);

for(i=0;i

K=i% keylen;

Code=string[i]^key[k];

}

return base64(code);

}

其中Global[server]和Global[hash]是用户浏览器的2个全局参数。

2 加密安全分析和对比

本节将从2个方面对口令加密的安全性进行分析:加密算法的强度和口令破解的复杂度。

2.1 加密算法的强度

这2个论坛采用的核心算法都是MD5加密算法,但是在具体实现上又有所不同。众所周知,理论上广泛应用的MD5杂凑算法具有抗碰撞和不可逆性。即已知一个杂凑值,想要反向计算出原本的输入消息(也就是用户的口令)是困难的。另外,几乎无法找到2个不同的消息经过同一个杂凑运算后能得到相等的杂凑值。然而,实际中如果用教科书版本的方式来实现MD5算法,想要从MD5杂凑值反向计算出口令也是可能的。

2.2 口令破解的复杂度

下面将仔细分析Discuz!和PhpWind论坛中2种MD5加密方案的具体实现。

例1:直接使用MD5算法来加密口令。

直接使用MD5算法来加密口令,即PASS=MD5(password)。这个方案就是PhpWind论坛使用的方案。虽然理论上MD5算法是一个安全的杂凑算法,但实际中未必如此。如果数据库泄露,用户的口令也会随之暴露,因为已知某个口令的MD5杂凑值可对其进行字典攻击[8-9],即不需要花费太多的努力就能在可接受的时间内确定口令的明文。此外,现在已经存在了大量可以通过互联网免费下载的压缩字典,名为“彩虹表”[10]。如果一个黑客设法获得了存储于论坛数据库存储的口令杂凑值,再从互联网下载彩虹表,通过查询彩虹表已有的口令和口令的杂凑值就可以破解MD5杂凑值,从而恢复出对应的口令明文[11]。目前,基于GPU的高性能计算的发展也大大提升了破解口令的效率,几乎可以瞬间破解一个长度小于8 Byte仅包含十进制数的口令[12]。

如今,可以利用GPU并行计算的优势来提高口令恢复的速度。在NVIDIA GPU上的实际测试结果为,每秒钟破解24亿个明文。表1为按照这个速度估算破解一个普通长度且同时包含小写字母和数字的口令的时间。

表1 破解速率的评估

通过表1可以看出,破解一个长度为8 Byte的包含数字和小写字母的口令,只需要不到20 min,即20 min内可以计算出口令明文的所有排列组合,从而破解口令。

例2:使用salt值的MD5算法

Discuz!论坛采用MD5(MD5(logging password)||salt)方式加密用户口令。这种MD5加密方式大大提高了安全度。目前,破解MD5杂凑值采用的最广泛方法是彩虹表攻击。它的主要思路是预先计算通用的口令的杂凑值。进行破解时,只需要将所获取的论坛数据库中的杂凑值与彩虹表中的杂凑值进行比较。如果匹配,则对应的口令被恢复。根据杂凑函数的特性,碰撞几乎是不可能的。也就是说,对2个不同的口令进行同一个杂凑函数运算,几乎不可能得到2个相同的杂凑值。因此,有salt的MD5算法可以阻碍上述的字典攻击。要破解不含salt的MD5算法,彩虹表需要260 GB的容量。引入了salt后,salt取值的可能性有900 000种(salt=random(100000,999999)),因此彩虹表的容量会迅速增长到900 000×260 GB=234 PB(1 PB=106 GB),而这种级别容量远高于当前的存储容量。即便满足了容量,搜索效率也非常低下,无法满足破解的要求。

当然,现实中也不可能建立一个涵盖所有口令杂凑值的彩虹表。黑客只有在容量与口令破解的成功率之间权衡。黑客往往从社会科学中选择通用的口令来构造彩虹表。现在也有一些网站提供含有salt值的彩虹表,但破解的效率不尽如人意。例如,在一个真实的测试中,一个普遍的口令“admin888”并没有被成功恢复。毕竟,这种攻击方法并不能保证100%的成功率。需要注意的是,论坛中安全提问的加密过程,并没有使用有salt的MD5加密算法。因此,破解安全提问比破解例1更为简单。虽然例1直接使用MD5运算得到了杂凑值,但安全提问一般都有一个具体的方向,答案的范围也非常有限。因此,答案对应的杂凑值的可能性也不会很多,大大提高了破解的速度。

通过以上口令加密的分析,可以得出一个结论:Discuz!论坛的口令安全优于PhpWind论坛。但是,尽管Discuz!论坛引入salt值改善了口令安全,但是由于其salt的取值范围有限,安全性也不能得到保证。

3 口令安全的增强

将从两个方面提出两点关于提高口令安全性的建议:改善加密算法的实现方式和优化口令的选择策略。

3.1 选择带salt值的MD5加密算法

如前面指出的,salt值大大增加了从杂凑值恢复口令的复杂度。目前,Discuz!论坛的salt值长度为6 Byte,且仅包含十进制的数字。因此,将来可以将salt值的取值范围扩大为支持任意可打印的字符。这样将salt取值由900 000增加到了956=7.35×1 011,以让广泛流行的彩虹表完全失效。

3.2 优化口令的选择策略

通过真实的口令破解经验,可以提出至少2条策略来优化口令选择。首先,应该将口令设置为强口令。强口令是指长度不小于10 Byte,避免使用普通的数字、英文字母以及这样的组合,如“12345678”“666666”和“birthday”等。其次,对于不同的账户应该设置不同的密码,有效避免某个论坛用户名和密码被泄露后,其他论坛的账户也被泄露。

4 工作展望

主要分析了2个论坛数据库中口令的加密方法,发现浏览器本地cookie加密的核心加密算法类似RC4算法,而RC4算法存在安全漏洞,如RC4的WEP(一个在无线网络中的加密协议)已经被攻破[13]。今后的研究中会进一步分析这2个算法的异同,并研究破解RC4的方法是否也会破解这个算法。

发现PhpWind论坛使用的cookie加密函数仅仅是一个异或函数,而这是一个安全性非常弱的加密方法。因为异或很容易遭受密钥重用攻击,即如果E(A)=A xor K,aE(B)=B xor K,那么E(A) xor E(B)=A xor B。因为(A xor K) xor (B xor K)=A xor B xor K xor K=A xor B,因此K为重复使用的密钥。因此,很可能解密cookie的密文时,甚至不需要知道加密密钥。这是未来研究的领域。

5 结 语

本文研究了两个常用网络论坛的口令安全性,仔细分析了服务器端口令加密的方案,包括其使用的密码算法本身的安全强度和具体实现的方法。研究指出,PhpWind论坛的口令并不安全,其口令可以通过MD5杂凑值被瞬间破解;Discuz!论坛的口令安全优于PhpWind论坛。考虑到可实现的攻击,提出了增强口令安全和优化口令选择策略的意见。最后,指出2个论坛所使用的cookie加密的不足,可能导致其遭受到安全攻击。

参考文献:

[1] 国内最大程序员网站600余万用户信息遭泄露[EB/OL].(2011-12-22)[2018-01-09].https://news.qq.com/a/20111222/000057.htm.6 million CSDN User's Privacy are Leaked[EB/OL].(2011-12-22)[2018-01-09].https://news.qq.com/a/20111222/000057.htm.

[2] 天涯承认部分用户密码泄露 据称涉及4000万人[EB/OL].(2011-12-26)[2018-01-09].https://news.qq.com/a/20111226/000061.htm.40 Million User's Passwords of TianYa Commnity are Leaked[EB/OL].(2011-12-26)[2018-01-09].https://news.qq.com/a/20111226/000061.htm.

[3] 超十三万条12306用户数据泄露[EB/OL].(2014-12-26)[2018-01-09].http://news.sina.com.cn/o/2014-12-26/035931328946.shtml.Over 130,000 user data leaks in 12306 [EB/OL].(2014-12-26)[2018-01-09].http://news.sina.com.cn/o/2014-12-26/035931328946.shtml.

[4] Horseluke.The Analysis of RC4 Encription Algorithm in Discuz Forum[EB/OL].(2011-11-08)[2018-01-09].http://bbs.phpchina.com/forum.php?mod=redirect&goto=findpost&ptid=113075&pid=1452503.

[5] Bkd.The Encryption Hole of PhpWind Forum[EB/OL].(2011-11-01)[2018-01-09].http://atim.cn/index.php.

[6] LIU Qing-yan.The Password and Coookie Encryption in PhpWind Forum[EB/OL].(2010-10-01)[2018-01-09].http://qing.weibo.com/discovery.html.

[7] ZHANG Li-jun,JIA Fan.The Security Analysis of PhpBB Forum[C].Proceddings of 2013 Fifth International Conference on Multimedia Information Networking and Security,2013:50-53.

[8] Passware Company Software.Passware Kit Enterprise and Passware Kit Forensic[Z].http://www.lostpassword.com/index.htm.

[9] Elcomsoft Company Software.Disk Decryptor Forensic[Z].http://www.elcomsoft.com.

[10] Oechslin P.Making a Faster Cryptanalytic Time-memory Trade-off[C].CRYPTO 2003,2003:617-630.

[11] Cmd5 Organize.MD5 Plaintext Recovery Online[EB/OL].(2013-01-01)[2018-01-09].http://www.cmd5.com.

[12] Tzeng S,Wei L Y.Parallel White Noise Generation on a GPU via Cryptographic Hash[C].Proceedings of the 2008 Symposium on Interactive 3D Graphics and Games,2008:79-88.

[13] Klein A.Attacks on the RC4 Stream Cipher[J].Designs,Codes,and Cryptography,2008,48(03):269-286.

猜你喜欢

加密算法口令解密
基于DES加密算法的改进研究
炫词解密
解密“一包三改”
炫词解密
高矮胖瘦
DES加密算法的实现
基于整数矩阵乘法的图像加密算法
口 令
好玩的“反口令”游戏
基于小波变换和混沌映射的图像加密算法