付茂洺
(中国民航飞行学院计算机学院,四川 广汉618307)
伴随着开放式网络系统的飞速发展,譬如银行结算系统等关系国计民生的大型网络系统的普及应用,认证用户身份和保证用户使用时的安全,正日益受到各方面的挑战。在不与网络连接的个人计算机中,资源和个人信息可以通过物理保护来实现。在分时计算环境中,操作系统管理所有资源,并保护用户信息不被其他未授权的用户使用。这时操作系统需要认证每一个用户,以保证每个用户的权限,操作系统在用户登录时完成这项工作。
传统的做法是采取用户名加口令来验证用户的身份,但是,口令很容易被窃取、字典攻击以及暴力攻击,在网络应用系统中,存在着较大的安全隐患[1,2]。并且上述认证方式仅能完成服务器对用户的单向认证。本文提出基于强身份认证系统的机制,提出了一种基于SOAP的双向身份认证系统,具有良好的安全性、兼容性和广泛适用性。
目前,比较成熟的身份认证机制有两类:一是基于隐藏信息的单因素身份认证;二是基于物理安全的双因素身份认证。基于隐藏信息的单因素身份认证主要方法有:基于用户名口令的身份认证、基于Kerberos的认证机制、基于数字证书、数字签名机制以及基于Challenge/Response的认证机制。基于物理安全的身份认证方法有:基于生物特征(指纹、虹膜)和基于智能卡等方法。基于用户名和口令的机制最大缺点就是简单。在Web环境下,最典型的论证有:H1TrP Basic和HTrP Digest认证。基于Kerberos和基于数字证书或数字签名机制的用户论证形式虽然很安全,并且在功能上能够实现双向身份认证,但是,该机制要求通信双方进行多次交互,在并发数据处理中消耗大量的硬件资源,且实现起来比较复杂[3]。例如,在基于数字证书的身份验证中,要求将用户的数字证书验证转换为应用系统访问控制机制并以此控制的用户身份。通过硬件的投入,可以建立更安全的双因素身份认证机制。上述两类身份认证机制在安全上完全达到ASP甚至JSP应用服务平台的要求。但由于消耗大量的硬件资源,并且要增加实现的复杂度和难度,在特殊用户有特别需求的情况下可以考虑应用这一方案;可是在一般情况下产出没有达到投入的目的,也就没必要实施这一方案。
认证的机制可为3类:自主访问认证、强制访问认证以及基于角色的访问认证。自主访问认证机制只有用户名和密码被服务器系统校验,且允许服务器对访问资源的用户设置访问控制权限。自主访问控制是基于用户的,因此具有很高的灵活性,这使得该策略适合各类操作系统和应用程序,特别是商业和工业领域。但是,该机制以明文形式来保存密码,在网上传输时极容易被不法用户窃听或截取,目前流行的解决办法是辅加一次性口令(OTP)机制。由此,改进后的自主访问认证实现了的用户口令无需在网上传输。由于其具有一次性的特点,它对于重放攻击也有很好的隔阻作用。强制访问认证机制通常运用密码学中的多种加密手段来保护相互交换的信息,在目前的认证协议中,Kerberos协议是比较完善的协议,主要用于在两个通信实体间建立共享会话密钥,其交换的过程依赖认证服务器。目前,该认证协议较为普及。基于角色的访问认证将用户的控制转换成对角色的控制,从而使授权管理更为方便实用,效率更高。同时,角色和角色之间也可以继承权限,各个角色的权限划分更为清楚、明确,降低了权限管理的复杂性。
目前的网络应用系统,多采用3层B/S结构或C/S结构来构建,如网络购物和网银系统等。在系统服务器端,由应用系统完成业务逻辑处理,而数据的存储和管理由数据库服务器来完成;在系统客户端,安装网页浏览器或专用客户端程序,从而实现基于客户端业务逻辑处理。以3层B/S架构的应用系统为例,来实现增强型身份认证系统的结构(图1)。
图1 系统逻辑结构图System architecture drawing
在增强型身份认证系统的应用服务器端,部署认证服务器端程序,同时也包括了认证服务器其他功能;在客户端,用户执行从认证服务器下载的客户端程序,包括基本认证客户端功能;在数据服务器端,存储用户列表,并优化存储结构。
当用户向服务器提出注册请求时,需要输入用户名UID和口令PWD。接着用户生成一个随机数R,计算A=H(UID,PWD⊕R)(H 为一个单向的散列函数)。用户将UID,A,R以及与服务器共享的密钥k存储起来,作为下一次身份认证使用。
首先用户向服务器提出认证请求,然后进行类似于TCP协议的3次握手的认证过程。
认证过程:
a.用户输入用户名,经加密后发送给服务器提出认证请求。
贵州省某磷复肥企业负责人告诉记者,目前开磷集团和瓮福集团的融合在技术层面是可以实现的,比如磷石膏的处理技术已经成熟,但是是否能真正实现生态效益和经济效益双丰收,在何光亮面前仍有较大阻碍。他说:“两家企业都是国有老牌企业,负债率都比较高,而且企业包袱重,所以首先要解决资金问题。如果资金瓶颈无法解决,后续很多想法是难以落地的。另外是市场的问题,磷石膏绿色建材的发展思路固然很好,但是目前市场不成熟,有待开发。”
b.服务器经解密后,若此用户在用户列表则合法。然后服务器计算M=H(UID,k),将R和M 加密后传送给用户。
c.用户计算H(UID,k),并与M 比较。若相等说明服务器合法,继续执行;否则用户终止与服务器对话,重新登陆。
d.用户再计算A=H(UID,PWD⊕R);生成一个新的随机数R1,并计算B=H(UID,PWD⊕R1),B就成为下一次身份认证的校验符;同时,将A,B,R1加密发送到服务器。
e.服务器用接收的A与存储的A比较,若相等则通过验证;并把存储的校验符和随机数更新(A=B,R=R1),以便下一次身份认证使用。
上述的认证流程实现了一个完整的双向身份认证。通过该论证流程,可以使整个系统更加安全和有效地解决通信双方的身份认证这一问题。它也是一个全新的、具有很强实践意义的实施方案。
根据上述的认证过程分析,本文设计了基于SOAP的强身份认证方案的实现,通过在SOAP头中加入〈Auth〉标记,实现了使用SOAP消息传递身份认证信息的目的。
SOAP(Simple Object Access Protocol,简单对象访问协议)是在混乱的“通信战争”(CORBA对DCOM、DCOM对RMI、信息方案对RPC方案等)中诞生。它并没有试图去解决所有的问题,只是定义了一个简单的基于XML的通信格式。但就是这个简单的目标,再加上其强大的扩展机制,SOAP实现了人们一直追求的目标,成为一种综合各种计算机技术的通信协议。自从出现了SOAP,几乎所有主要的软件开发商都推出了与之相关的实现产品。这也是本文选择它的一个重要原因。
一个从客户端(Client)发出的请求建立认证过程的SOAP消息如下:
服务器端(Server)接收到来自客户端(Client)发出的认证请求后,对来自客户端的加密用户名〈user〉username〈/user〉进行解密,并查询该用户名,若存在该用户名,便生成该用户名的四元组:用户名U,校验码A,密钥k和随机值R,计算M=H(UID,k),将响应消息(M和R作为入口参数)发回给客户端:
客户端接收到计算H(UID,k),与M 比较,若相等说明服务器合法,然后计算A=H(UID,PWD⊕R);生成一个随机数R1,并计算B=H(UID,PWD⊕R1),B就为下一次身份认证的校验符;将A,B,R1加密发送到服务器。
服务器根据客户机的请求经验证后,更新检验码A和随机值R。至此,服务器和客户机完成了双向的身份认证。
Web Services的接口函数接收通过XML消息传来的指令。然后根据客户端ID等更新数据库。以下将更新的用户信息封装成XML格式[4]。
XML技术是SOAP的基础,XML语言包含的功能非常多,利用国际标准XML建模工具XML Schema,可以实现将上述的XML实例文档转变为结构化的Schema文档[5]。
增强型身份认证系统中,采用以上身份论证协议,在客户端和服务器端产生惟一的一对有效的随机数,它对于防范当前流行的网络重放攻击特别有效;利用客户端和服务器端的3次握手协议,建立真正的双向身份论证。它相对于基于用户名、口令的身份认证系统,可以更加有效地解决网络应用系统中通信双方的身份认证问题。即使在分布式环境下,该系统在身份论证方面,仍然能取得较佳的安全效果[6]。
[1]AVRIAL J R.The B-Book:Assigning Programs to Meaning[M].Cambridge University Press,1996:21-37.
[2]Altera Corporation.Nios development board reference manual,stratix professional edition[EB/OL].(2008-05-30)[2008-08-20].http://www.altera.com.cn/products/ip/processors/ipm-index.jsp.
[3]丁德胜,许建真,沈丽珍,等.基于强身份认证的网络应用单点登录系统研究[J].计算机工程,2006,32(7):163-164.
[4]柴晓路,梁宇路.Web Service技术、架构和应用[M].北京:电子工业出版社,2003:42-67.
[5]余浩,朱成,丁鹏.SOA实践[M].北京:电子工业出版社,2009:34-38.
[6]华蓓,蒋凡,史杏荣,等.计算机安全[M].北京:人民邮电出版社,2003:137-153.