基于混合字符串加密的动态口令研究
2012-11-21王奇志
王奇志,方 莉
(安庆职业技术学院电子信息系,安徽 安庆 246005)
基于混合字符串加密的动态口令研究
王奇志,方 莉
(安庆职业技术学院电子信息系,安徽 安庆 246005)
未经加密处理的敏感信息在数据传输过程中很容易被截获破解,如果直接加密敏感信息,仍然不能避免攻击者使用伪造数据包方式的攻击。提出对包含敏感信息的随机混合字符串进行加密保护的改进方案,从而有效保护敏感信息在传输过程中的安全。该方案只需通过简单编程即可实现,能够为Web应用中敏感信息的传输保护提供参考。
动态口令;网络嗅探;MD5;随机混合字符串
目前,我国绝大多数中小企业建立了网站并接入Internet,许多企业在获得信息的同时,将企业的敏感数据提供给有访问权限的用户访问,这种授权访问一般基于口令认证。由于Internet上普遍采用超文本传输协议(Hyper Text Transfer Protocol,HTTP)作为Web服务器与本地浏览器之间的传输协议,而该协议采用数据明文传送方式,这给诸如登录账号和密码之类的敏感数据带来极大的安全隐患[1]。针对使用HTTP协议明文传输敏感信息带来的安全问题,目前采取了如下解决方案:①采用安全的超文本传输协议协议(Hyper Text Transfer Protocol Secure,HTTPS)来保证敏感信息在传输过程中的安全。由于经HTTPS协议传送的数据都需要经过二进制加密处理,而这种加密解密处理针对网站上所有页面,因此必然会带来服务器计算和网络传输往返上的巨大开销[2]。②敏感数据首先经过MD5加密算法[3]处理,然后在Internet通过HTTP协议传输,但是这种保护作用也十分有限[4]。为此,笔者进行了基于混合字符串加密的动态口令研究。
1 混合字符串加密的动态口令方案设计
混合字符串加密的动态口令方案的设计思想可以描述为如下过程:
1)服务端在每个客户首次连接时分配一个唯一动态附加随机字符串S,字符串在服务端必须有一定的存活时间。
2)该字符串同时被保存在客户端登录页面的F2字段中。
3)客户端用户填写密码等敏感信息单击提交按钮后,通过JavaScript编程完成如下的处理步骤:①取得用户填写的敏感字段F1(如口令)的值S1;②取得动态随机字符串字段F2的值S2;③将S1与S2按一定的规律混合得到字符串S3;④清除字段F1的值和字段F2的值;⑤使用MD5加密算法加密S3得到加密摘要M1;⑥向服务器提交加密摘要M1。
4)在Internet上传输的数据包中包含的是加密摘要M1。
5)服务端接收到客户端提交的加密摘要M1后,按以下的流程完成验证:①根据用户名(未加密)从数据库取得的对应口令P1;②将P1与动态附加随机字符串S按相同的规律混合得到字符串P2;③使用MD5加密算法加密P2得到加密摘要M2;④比较M1与M1是否相等,若相等则表示验证通过,否则表示验证未通过;⑤如果验证通过则删除S,如果验证没有通过则重新生成S并跳转到登录页面。
2 实现JavaScript加密混合字符串的技术要点
2.1在客户端和服务端都要有MD5加密模块
在客户端对用户敏感数据(如密码)加密处理,可以采用由Johnson用JAVASCRIPT编写的一个MD5加密函数库MD5.JS;在服务端进行MD5加密处理,应根据开发动态网站后台编程语言的不同选用合适的MD5加密模块。
2.2在服务端需要一个随机字符串生成函数
附加字符串必须由服务端负责生成,因而要在服务端设计一个随机字符串生成函数,且该随机字符串生成函数有较高的运行效率。
2.3附加字符串应在服务端和客户端保持同步性
每个连接用户都有唯一的一个附件随机字符串,该字符串在服务端生成并保存,同时还应通过一定方法将该字符串发送到客户端。以下是采用ASP.NET作为服务端编程语言时保证附加字符串在服务端和客户端同步性的处理方法。
1)后台代码 在后台代码(login.aspx.cs)中作如下处理:
……
protected void Page_Load(object sender,EventArgs e)
{
if (!Page.IsPostBack || Session[“addStr”]==null)
{ //通过调用MyClass.getRandomizer()方法获得一个附加字符串保存的Session中
Session[“addStr”] = MyClass.getRandomizer(6,true,false,true,true);
{
{
……
2)页面代码 在页面代码(login.aspx)中作如下处理:
……
在以上代码中,通过“<%=Session[“addStr”]%>”的方式将服务端的生成字符串传递到客户端。
2.4确保客户端提交的表单只包含加密信息
考虑到合法用户提交的数据包有可能被入侵者截获,因而合法用户通过键盘输入的敏感字段应在提交前删除,从而确保网络上传输的敏感信息均经过加密处理。下面是处理的关键代码:
……
var UserPassword=document.getElementById(“txtPassword”).value + document.getElementById“txtAddString”).value;
……
3 实例分析
当1个合法用户首次访问登录页面时,服务器随机生成的字符串是“16HKhx”,则客户端MD5加密的对象是“wqz12316HKhx”,假设此时有入侵者通过抓包工具IPTOOL获得了合法用户提交的数据包(见图1)。在图1中黑色方框内有“UID=wqz&PWD=2605b9cc3b00330587068a44d1a80b6f”这样的敏感数据,由此可以推测出被攻击用户的账号是“wqz”,与密码相关的敏感信息是“2605b9cc3b00330587068a44d1a80b6f”,它其实是混合字符串“wqz12316HKhx”进行MD5加密处理后的一个32位的摘要,入侵者拿到该摘要后面临2种选择,其一是将“2605b9cc3b00330587068a44d1a80b6f”提交到“http://www.cmd5.com”类似的网站进行暴力破解,但这种成功率几乎为零,因为该字符串(wqz12316HKhx)含有较多的字符数(超过6个字符就很难被暴力破解);其二是伪造包含了“UID=wqz&PWD=2605b9cc3b00330587068a44d1a80b6f”敏感信息的数据包直接提交到服务器。由于服务器对每个用户的首次连接时生成的附加随机字符串都不一样,入侵用户连接服务器时获得的附加字符串可能是“w4tg”,此时能在服务器通过验证的是“wqz123w4tg”这个字符串的MD5加密的32位摘要“926f823383aa66ce449c174353a9f911”,而入侵者提交非法截获的摘要“2605b9cc3b00330587068a44d1a80b6f”不能通过验证,因此入侵者很难通过上述方式完成最终的入侵。
图1 敏感数据抓包截图
4 结 语
访问中小企业网站时,其身份认证通常是通过HTTP协议传输账号和密码,若账号和密码之类的敏感信息不作加密处理,则在传输过程中很容易被入侵者截获数据包而泄漏敏感信息。虽然采用MD5加密算法处理敏感信息在一定程度上可以防止敏感信息泄漏,但不能防御入侵者采取伪造数据包的方式进行入侵。针对上述情况,采取加密敏感信息和一个随机字符串组成的混合字符串的改进方案,该方案只需通过简单编程即可实现,从而有效解决一般Web应用中身份验证时的敏感信息泄漏问题。
[1]于杰,朱有忠.简单实用的网络嗅探器的设计与实现[J].吉林大学学报(信息科学版),2010,28(4):423-427.
[2]夏阳,陆余良.基于网络攻击的安全防范策略[J].安徽大学学报(自然科学版),2002,26(2):57-61.
[3]吴维元,肖柳林,李荣辉.Web服务数据传输通道的安全性分析[J].网络安全技术与应用,2008(2):85-86,70.
[4]田新广,段洣毅,程学旗,等.基于shell命令和多重行为模式挖掘的用户伪装攻击检测[J].计算机学报,2010,33(4):697-705.
[5]王康进.基于AJAX的轻量级Web客户端开发平台研究与实现[D].济南:济南大学,2007.
[编辑] 李启栋
10.3969/j.issn.1673-1409(N).2012.06.039
TP393.08
A
1673-1409(2012)06-N117-03