用java socket实现高校信息化中用户动态口令身份认证

用java socket实现高校信息化中用户动态口令身份认证

ID:11177090

大小:35.00 KB

页数:13页

时间:2018-07-10

上传者:xinshengwencai
用java socket实现高校信息化中用户动态口令身份认证_第1页
用java socket实现高校信息化中用户动态口令身份认证_第2页
用java socket实现高校信息化中用户动态口令身份认证_第3页
用java socket实现高校信息化中用户动态口令身份认证_第4页
用java socket实现高校信息化中用户动态口令身份认证_第5页
资源描述:

《用java socket实现高校信息化中用户动态口令身份认证》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

用JavaSocket实现高校信息化中用户动态口令身份认证【摘要】身份认证作为网络应用系统的第一道防线,是最重要的安全服务。在高校信息化过程中,如何保障高校信息资源的安全性,已经受到越来越多的关注。文章基于S/Key一次性口令身份认证系统以及Java套接字,Applet等技术,详细介绍了如何用Java套接字实现高校信息化系统中动态口令身份认证的过程,并相应的给出了一些关键代码。【关键词】身份认证,S/Key系统,一次性口令,高校信息化【中图分类号】G40-057【文献标识码】B【论文编号】1009―8097(2010)01―0120―04一引言1应用背景13 在目前的高校信息化系统中,统一身份认证是很重要的。而如何解决好身份认证是高校信息化系统中一个关键的问题。身份认证主要用于阻止非授权用户对系统的入侵或访问,是信息安全系统的基础。根据所采用手段的不同,可分为基于秘密信息的和基于物理安全性的身份认证两种。基于秘密信息的身份认证用的是静态口令。每个合法用户拥有一个用户名,口令对,用户登录系统或使用某项功能时,需输入自己的用户名与口令,系统即可确认是否为合法。静态口令身份认证方便,简洁,但存在诸多缺点。动态口令身份认证是现在研究较多并且技术相对比较成熟的认证方式,它克服了静态口令技术所固有的许多缺点,特别是对于分布式身份认证来说具有非常高的安全性。2静态口令认证的缺点(1)每次访问系统时都要输入静态口令,易被偷窥泄密。(2)静态口令只能进行系统对用户的单向认证,攻击者可伪装成系统骗取用户口令。(3)其安全性基于用户设置的口令,很多用户为了方便,设定的口令中含个人信息,如姓名、生日等,极易破译。且长期使用同一口令.被破解的可能性极大。(4)在访问不同安全级别的系统时,都要求用户提供口令。用户为方便记忆.往往采用相同的口令,而低安全级别的口令很容易被攻击者获得并用来对高安全级别系统进行攻击。(5)系统中用户的口令以文件形式存储在认证方,攻击者可利用系统存在的漏洞获取口令文件。一旦该文件被攻击者得到,他们就可使用解密程序来破译,从而获取对系统的访问权。13 (6)口令在传输过程中可能被截获。用户连接其在远程主机上的帐户时,由于网上传输的口令没有加密,攻击者可通过各种手段获取用户口令。如被截获的是管理员的口令,那么获取特权级访问就变得很容易,已有许多系统被这种方法侵入。显然,作为目前身份认证最常用手段的静态口令,不能很好的保证其安全性,需要一种经常变化、不易推测、一次性使用的动态口令来实现安全可靠的身份认证,阻止未经授权的非法访问等。3动态口令的提出在80年代初,美国科学家LeslieLamport首次提出了利用散列函数产生一次性口令的思想,即用户每次同服务器进行身份认证时,在网上传输的认证口令都是加密后的密文形式,并且在每次认证时这些密文形式的认证口令都是不同的,也就是说密文口令是一次有效的。这种一次有效的“动态口令”彼此之间无相关性,无法预测,跟踪,截取,破译。这样,无论网上交易,转账,还是访问内部网络等都能对访问者身份进行准确的认证,保证其唯一,合法。本文首先介绍了一种经典的动态口令身份认证系统――S/Key系统,然后介绍了JavaSocket的一些基本知识,最后重点介绍了如何用JavaSocket实现动态口令身份认证,并给出了相应的代码。13 为方便描述,约定符号如下:IDc为用户C的身份标识,A表示认证服务器,W为用户秘密通行短语,N为初始序列号,S表示种子值,Pi表示用户第i次登录的一次性口令,H(x)表示单向哈希函数,Hi(x)表示对x连续进行i次哈希运算,Ek(m)表示用密钥k对信息m进行加密运算,Dk(m)表示用密钥k对信息Ek(m)进行解密运算,即m=Dk(Ek(m))。二S/Key系统[1,2,3]S/Key系统是一种一次一密认证系统,客户端和服务器端没有保留口令及生成口令的全部信息,整个通信过程都是安全的,用户每一次登录系统所用的口令都是不同的,攻击者通过窃听得到的口令无法用于下一次认证,而且用户秘密通行短语从不在网上进行传输,保证了在网络上传送的密码只使用一次,可以有效防止通过窃听进行重放攻击,具有较高的安全性。1注册阶段用户选择自己的秘密通行短语W,服务器为每个用户生成一个种子值S,用户设置一次性口令序列的最大元素个数N,用户输入的S和N通过安全通道提交给认证服务器,认证服务器计算出一次性口令为P0=Hn(W+S)第i次登录的一次性口令:Pi=Hn-i(W+S)数据库中用户C的注册数据内容为:用户IDc,种子值S,初始序列号N,一次性口令P02认证阶段第i次认证过程如下:13 Step1C→A:IDc;认证请求;Step2A→C:N-i,S;发送挑战;Step3C→A:Pi=Hn-i(W+S);计算一次性口令Pi并作为应答;Step4:服务器对收到的Pi再做一次哈希运算H(Pi),并将结果H(Pi)与保存在认证服务器端的该用户上次成功登录的一次性口令Pi-1比较,相同则通过认证,将N-i-1和Pi写入数据库作为新的序列号和动态口令。三JavaSocket,Applet[4]网络应用程序的核心由一对程序组成------一个客户程序和一个服务器程序,当这两个程序执行的时候,创建一个客户端进程和一个服务器进程,并且这两个进程通过对套接字(socket)的读写来互相通信。Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。Java提供了一个丰富的、支持网络的类库,这些类使得应用程序能方便地访问网络资源。Java提供了两种通讯工具。它们是:使用用户报文协议(UDP)的报文和使用传输控制协议/因特网协议(TCP/IP)的Sockets(套接字)。13 Sockets套接字用TCP来进行通讯。套接字模型同其他模型相比,优越性在于其不受客户请求来自何处的影响。只要客户机遵循TCP/IP协议,服务器就会对它的请求提供服务。这意味着客户机可以是任何类型的计算机。客户机不再局限为UNIX、Windows、DOS或Macintosh平台,因此,网上所有遵循TCP/IP协议的计算机可以通过套接字互相通讯。Applet可以翻译为小应用程序,可通过因特网下载并在接收计算机上运行的一小段程序,JavaApplet就是用Java语言编写的这样的一些小应用程序,它们可以直接嵌入到网页中,并能够产生特殊的效果,可以在B/S架构中实现简单的客户端运算功能。用Java编写的应用程序简洁,代码少,对于新手来说它的可读性强。Java与平台无关,为了对出现在I/O和网络操作中的一般问题进行健全的解决,它提供了例外机制,并且它的线程工具提供了一种能够简单的实现强大服务器的方法。由于Java有着丰富的支持网络的类库,用Java进行客户服务器编程变得越来越流行,并且甚至可能变成未来几年中的规范。基于以上原因,本人选择JavaSocket实现动态口令身份认证的双方数据通信,采用流行的B/S架构,客户端采用JavaApplet实现当前动态口令的计算,服务器端采用多线程技术以便支持大量用户的访问。13 四具体实现[5][6][7]由于S/Key系统不能抵抗小数攻击,且在step2存在挑战信息N-i,S传输过程中可能有被非法窃听而泄漏的危险性,故本人参考众多动态口令算法对S/Key系统作了初步的改进,加入了对服务器端的双向认证和对挑战信息的加密。改进后的第i次认证过程如下:Step1C→A:IDc;认证请求;Step2A→C:EK(N-i,S,Pi-1);发送挑战,K=H(W);Step3C→A:DK(N-i,S,Pi-1),Pi=Hn-i-1(W+S);客户端生成K=H(W),解密获得N-i,S,Pi-1并计算一次性口令Pi先判断如果H(Pi)=Pi-1则对服务器认证通过,将Pi发送给服务器作为应答;Step4:服务器对收到的Pi再做一次哈希运算H(Pi),并将结果H(Pi)与保存在认证服务器端的该用户上次成功登录的一次性口令Pi-1比较,相同则通过认证,并更新数据库,将N-i-1和Pi写入数据库作为新的序列号和动态口令。1数据库设计说明:在我们的数据库中,S是认证服务器随机产生的大于1000的种子值,N-i为用户第i次接受认证时的序列号,初始值为用户注册时输入的序列号N,Pi=Hn-i(W+S)为用户第i次接受认证时的认证口令,初始值为P0=Hn(W+S)为了保证step2发送挑战N-i,S13 传输过程中的数据安全性,我们在数据库中加入一项秘密通行短语的散列值H(W)作为密码加密挑战信息,由于散列函数的不可逆性,不会引起秘密通行短语的泄漏。加密算法我们选用DES。2注册阶段该阶段通过两个文件来实现registerform.html:实现注册信息的表单输入关键代码:longseed=(long)(Math.random()*1000)+1000;//随机函数生成种子值Stringinitpasswd=MD5bean.getMD5ofStr(W+S);for(inti=1;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭