基于.NET Remoting口令系统的设计

2012-04-29 13:46方俊
计算机时代 2012年4期
关键词:身份认证

摘要: 由于B/S模式下客户机对服务器的验证困难,提出了使用Remoting程序对网站的真伪进行验证。方案实现了客户端和服务器端的相互认证、服务器端敏感信息的安全存储和每次认证产生不同的会话密钥,安全分析表明,所提的方案能有效防范钓鱼网站等的常见攻击,增加了系统的安全性。方案使用.NET进行实现,证明是可行的。

关键词: 身份认证; 一次性口令; Hash函数; 远程访问

中图分类号:TP309文献标识码:A 文章编号:1006-8228(2012)04-09-03

Password Authentication System Design Based On .NET Remoting

Fang Jun

(College of International Education, Zhejiang Yuexiu University Of Foreign Languages, Shaoxing, Zhejiang 312000, China)

Abstract: In the condition of the B/S mode, the authentication server is difficult by a client. This paper puts forward to use Remoting program to verify the authenticity of Web site. The program realizes mutual authentication between the client and the server, also realizes server sensitive information safe storage. Every time authentication can produce different session keys. Safety analysis shows that the proposed scheme can effectively prevent phishing against common attack and increase the system security. The scheme is achieved by using .NET, It proved to be feasible.

Key words: Authentication; One-time password; Hash function; Remote access

0 引言

目前所使用的一次性口令认证方案大部分都是基于C/S的。一些基于B/S的方案都存在着不验证服务器真实性的漏洞。目前国内流行的一次性口令技术是使用动态口令牌,包括硬件令牌、短信密码、手机令牌。这些动态口令牌无需在PC端安装软件,也无需和PC机连接,动态口令是根据专门算法,基于事件同步和基于挑战/应答模式而生成。用这种方式构建的安全系统难以抵制钓鱼网站的攻击[1]。随着因特网应用的不断深入以及电子商务和网上银行的发展和普及,设计更加完善的适用于Web应用的一次性口令认证方案具有重要的意义。

基于Web开发的系统,都是构建在HTTP协议之上的Web应用。基于Web的应用系统,浏览器中显示的内容都必须到服务器下载,因此相对于C/S的一次性口令认证方案来说,Web应用有其自己的特点。由于B/S模式下客户机对服务器的验证困难,因此,基于浏览器的Web应用给网络钓鱼攻击者带来了可趁之机。一旦遭受到网络钓鱼攻击,则用户输入的个人信息将全部被攻击者获取。本文通过在客户端安装一个简单的Remoting程序来验证网站的真实性。在确定网站的真实性之后再输入密码,实现网站对用户的认证,这样可以有效地避免口令的泄密。该方案实现了每次认证都会产生不同的会话密钥。

1 符号约定及方案描述

符号约定。

ID:用户的身份标识;

PW:用户口令;

Se:服务器选择的种子;

R:随机数,其中Ru为客户端产生的随机数,Rs为服务端产生的随机数;

//:联结运算符;

⊕:异或运算符;

H(x):安全哈希函数,H2(x)对x连续进行2次哈希运算;

U→S:x:客户端向服务器端发送消息x。

方案描述。

本方案包括注册和登录认证两个阶段。

⑴ 注册过程

用户在安全的环境下请求注册,用户选择ID、PW,服务器选择Se;计算H(ID)、H2(PW//Se)、Se⊕H(ID,PW)、H(Se//ID//PW),在服务器端存储H(ID)、H2(PW//Se)、Se⊕H(ID,PW)、H(Se//ID//PW);客户端安装Remoting程序,完成注册。

⑵ 认证过程

本方案的身份认证过程如图1所示。

图1身份认证过程

① 用户在页面中输入ID点击登录,页面中的Javascript代码计算H(ID)、Ru和H(ID//Ru),将H(ID//Ru) 保存在客户端的临时文件中。

U→S:H(ID)、H(ID//Ru),认证请求。

② 服务器端查找H(ID),若该H(ID)不存在,服务器端断开与客户端的会话;否则,服务器端查找数据表中对应的Se⊕H(ID//PW)、H(Se//ID//PW),计算随机数Rs、C2=Rs⊕H(Se//ID//PW),令C1=Se⊕H(ID//PW),通过Cookie将C1、C2保存到客户端,并将H(ID//Ru)保存在服务器端的临时文件中。

③ 用户在页面中点击按钮启动客户端Remoting程序,读取服务器端保存的H(ID//Ru)并与客户端所保存的信息比较,若一致,服务器为真,弹出提示信息,用户可以进一步输入口令,同时删除客户端和服务端的H(ID//Ru)信息;否则,提示用户不能在页面上输入口令。

④ 用户在页面输入PW,页面中的Javascript代码计算H(ID,PW),从客户端Cookie中读取C1、C2;计算Se= C1⊕H(ID,PW),Rs = C2⊕H(Se//ID//PW);计算认证依据H(PW//Se);

U→S:C3 。C3=Rs⊕H(PW//Se)。

⑤ 服务器端收到C3后,计算H(Rs⊕C3),将得到的H2(PW//Se)与服务器端保存的H2(PW//Se)比较,一致说明用户合法,否则为非法用户。认证过程结束。

⑥ 在接下去的服务器端和客户端的相互通信中,使用双方共有的Rs值作为会话密钥进行加密通信。

2 基于.NET的一次性口令方案的实现

IC卡认证、生物认证都需要专用终端认证设备的配合。CA认证虽然是目前最好的认证方法,但必须以完整的CA体系为基础,需第三方公证,技术复杂、成本高,因而应用范围受到很大限制。而一次性口令的优点是无需第三方公证。

2.1 系统环境与体系结构

系统使用VS2008开发工具,编程语言使用C#,使用Internet信息服务器(IIS)作为Web服务器,客户端使用IE6.0或更高版本的浏览器。

系统采用三层体系结构,即表示层、逻辑层、数据层,如图2所示。表示层是为客户提供应用服务的图形界面,并提供具有交互功能的用户操作界面,将用户向服务器提交的访问反馈结果以Web页的形式返回给客户端浏览器。客户端使用了嵌入在HTML页中的JavaScript代码实现Hash运算、异或运算和随机数的生成。逻辑层处理并封装了基于Web的应用模块,控制系统的流转。数据层负责定义、维护、访问、更新数据,满足服务对数据的请求。

图2三层结构模型

页面间数据传递使用Querystring 方法,这种方法将要传递的数据附加在网页地址(URL)后面进行传递。使用Querystring 方法的优点是实现简单,不使用服务器资源;缺点是传递的值会显示在浏览器的地址栏上。Cookie可以在页面之间传递少量信息,它存储在客户端的文本文件中。

2.2 .NET Remoting技术概述[2]

在.NET平台上,为了使Windows程序运行在一个应用程序域中的进程与另外一个应用域中的进程通信,可以使用Remoting。Remoting是一种分布式编程的技术,主要用于管理跨应用程序域的同步和异步RPC会话。在默认情况下,Remoting可使用 HTTP/TCP 协议进行信息通讯,并使用 XML 编码的SOAP 或二进制消息格式进行数据交换。Remoting 提供了非常灵活和可扩展的编程框架,并且可以管理对象的状态。Remoting跟Web服务不同,它并不依赖于IIS,用户可以自己开发并部署宿主服务器,只需要服务器支持Framework。.NET Remoting的体系结构如图3所示。

图3.NET Remoting体系结构

Remoting程序包括远程服务对象的创建、主应用程序和客户端应用程序。远程服务对象提供了服务器端所需的功能,此处实现的功能是根据H(ID)读取服务器端的H(ID//Ru)。接下来创建一个主应用程序,其中创建一个使用端口的HttpChannel对象,注册通道,然后在Remoting平台上注册远程服务类,最后生成可执行文件。客户端应用程序是一个标准的Remoting应用程序,主要功能是获取客户端临时文件中的H(ID//Ru)值;连接远程主机,获取服务器端的H(ID//Ru),并与客户端的值比较,若一致,服务器为真,否则服务器为假。

2.3 “异或”运算

C#程序语言的“异或”运算将参数强制转换为相应的数据类型(二进制),随后查看两个表达式的二进制表示形式的值,并执行按位“异或”运算。然后再将结果的二进制码转换回字符。此时,可能会出现无法显示的“控制字符”。因此,本文采用图4所示步骤进行“异或”运算,对字符先进行Reed-Solomon编码[3],再将二进制的编码形式变为十进制整数,将两个十进制数进行“异或”运算,最后将结果反变换成字符。

图4“异或”运算示意图

2.4 Cookie值的读取

Cookie的格式实际上是一段纯文本信息,由服务器随着网页一起发送到客户端,并保存在客户端硬盘指定的目录中。可以使用嵌入在HTML中的Javascript代码读取Cookie值,例如,设Cookie的值为C1,(C1是包含32个字符的字符串)则其代码如下。

var cookieString = new String(document.cookie);

var cookieHeader = "C1=";

//indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。

var beginPosition = cookieString.indexOf(cookieHeader) ;

if (beginPosition != -1)

{

returnC1 = cookieString.substring(beginPosition+3, beginPosition +35);

}

2.5 登录界面

本方案基本不改变用户登录系统的使用习惯,只是在用户输入密码前加入验证服务器的步骤,如果返回验证成功的窗体则用户可以在页面继续输入密码。该窗口与Windows的三种对话框是完全不同的,对话框的用户界面是脚本编写者不能修改的,且现在浏览器均不支持windows.open()方法的titlebar属性[2],即该窗体无法通过脚本的方式创建,如图5(c)所示。

(a)(b)(c)

图5用户登录界面和服务器验证成功时弹出的提示窗体

点击页面中的“验证服务器”按钮,则网页中的Javascript代码即可启动Remoting程序。启动Remoting程序的Javascript代码如下:

//启动Remoting程序

function exec ()

{

var command=document.getElementsByName("path")[0].value//path为Remoting程序的路径

var wsh = new ActiveXObject('WScript.Shell');

//创建客户端程序执行对象

if (wsh) wsh.Run(command);

//调用Run命令执行exe程序,参数是一个exe文件的路径

}

3 安全性分析

重放和小数攻击。浏览器和服务器之间传递的用于验证的H(PW//Se) 数据用随机数Rs“异或”加密保护,每次传递的值均不相同。认证依据H(PW//Se) 不在网上直接传输,因此本方案能抵御重放攻击。同时,由于本方案非序列口令,因此本方案可屏蔽小数攻击。

冒充(冒充合法用户)攻击。当攻击者截获了用户登录时的信息H(ID),登录服务器返回C1、C2值。由于用户口令不在网上传输,也不在任何系统中保存,攻击者无法计算H(ID//PW)获取Se和Rs,因此,就无法计算认证依据H(PW//Se),也无法从C3获得该值,冒充失败。

攻击者冒充服务器。用户登录假冒的网站后,可能输入用户标识ID。此时用户启动Remoting程序,该程序将与真实的服务器建立通道读取H(ID//Ru),并从客户端读取H(ID//Ru)进行比较,但此时真实的服务器端并无H(ID//Ru)值存在,Remoting程序无法完成对网站的验证,攻击者无法冒充服务器。因此本文所提的方案可以有效地防止钓鱼网站的攻击。

如果攻击者窃听了认证过程中的C3,攻击者使服务器崩溃,则服务器重启后恢复到认证前状态,攻击者可重放C3登录系统。但在其后的通信中必须使用会话密钥Rs进行加密通信,而攻击者无法获得Rs值,而且每次认证产生的随机数Rs值不同,通信无法继续。因此本方案可以抵御服务器崩溃攻击和会话劫持攻击。

在本方案中,口令等敏感数据,既不在网络上传输也不存储于任何地方,服务器端只存储认证依据H(PW//Se)的哈希值。由于认证过程中网上传输的信息均有随机数Ru、Rs参与,没有明文信息在网络上传输,并且在合法的通信连接建立以后进行加密通信,因此,攻击者无法实施中间人攻击。

4 结束语

本文方案使用Remoting程序实现了B/S模式下对网站真伪的鉴别,每次登录服务器时网上传输的认证值均不同、实现了客户和服务器的双向认证,有效地防止了网络钓鱼等常见攻击。本方案的计算开销小,只需对认证依据H(PW//Se)进行一次哈希运算并与服务器端的H2(PW//Se)比对;且用户名和密码不在系统存储,用户的身份得到了保护,提高了系统的安全性。由于认证时只进行简单哈希计算和“异或”运算,避免了目前一些方案在认证时使用的幂指数运算,减少了系统的开销。

参考文献:

[1] 王贵智.网银动态口令牌应用的安全性[J].中国金融电脑, 2010.11:29~31

[2] Christian N, Bill E, Jay G著. C# 高级编程 [M]. 清华大学出版社,2006.

[3] 方俊, 赵英良. 基于RBF神经网络的一次性口令认证方案[J]. 计算机工程,2011.37(9):157~159

猜你喜欢
身份认证
基于标识的动态口令系统
云电子身份管理与认证系统中的关键技术优化改进
校园网云盘系统存在的安全问题及对策
基于指纹身份认证的固定通信台站干部跟班管理系统设计
基于PKI与基于IBC的认证技术比较
基于PKI技术的企业级云存储出错数据证明的研究
信息系统身份认证的分析与研究
Kerberos身份认证协议的改进
基于USB存储设备的透明监控系统
基于鼠标行为的电子商务中用户异常行为检测