基于网络安全的WEB数字签名技术研究

时间:2022-09-14 11:41:12

基于网络安全的WEB数字签名技术研究

摘要:基于INTERNET提供服务的WEB站点面临着窃听和中间人攻击的威胁,利用公开密钥算法RSA,可通过对随机字符串的签名避免口令在传输过程中被窃听和遭受中间人攻击的危险。

关键词:身份认证;RSA签名;Windows;CryptoAPI

1引言

在以WEB形式提供服务的系统中,用户的身份鉴别至关重要,它是维护系统安全不可或缺的重要环节,决定了系统的后续动作。任何安全系统的实现都需要针对威胁等级和所要保护的信息的重要性,结合自身能力选择恰当的方案。当前流行的是采用用户名和密码(口令)登录的传统方式,其优点是用户易于接受、易于使用、成本低廉、不必再对基础设施进行投入即可得到基本的安全保障,只需简单的软件就可达到目的,因此得到了广泛的应用。

这种方式所面临的威胁主要是网络窃听、中间人攻击。用户密码若以明文在网络上传输极易被恶意攻击者窃取。例如:在共享式非交换网络中,各种网络监控软件可轻易截获网络传输的数据;交换式网络本来被窃听的可能性很小,但随着Dsniff的出现、ARP欺骗威胁的日益现实,也面临着同样的问题。用户密码历来是安全系统被攻击的首选目标,一旦泄漏会直接威胁到系统的正常运转。因此,大多数对安全性要求较高的应用,一般均在传输密码前先对其进行加密(利用DES、Rijndael等算法)。不过,这种方法仍然无法完全避免被窃听的危害,暴力攻击仍然是可能的,对弱口令更是如此。

如果采用了妥善的密码策略,则窃听造成的危害等级就会有明显下降。但是安全系统的安全性与易用性之间的平衡点很难掌握。试想如果被要求每半个月更换一次密码且不能与以前20个密码重复,用户会有怎样的反应呢?而且,更现实、更严重的威胁是中间人攻击。当前已有大量实例显示通过冒险的服务站点骗取用户信息并不难,大多数用户在享受网络的方便、快捷时很少考虑安全问题。屡见不鲜的个人信用卡资料被盗就是最有力的证据。

2公开密钥算法验证方案

公开密钥算法发展至今,已经成为密码学的一个重要组成部分。而最著名、应用最广泛的当属RSA算法,以至于一提公开密钥算法一般都是指RSA算法。RSA算法提供两种密钥――公开密钥和私有密钥。在RSA算法中,用公开密钥加密数据,用私有密钥进行解密实现普通的加密。但是,同样可以使用私有密钥加密而用公开密钥解密。这个特性使得RSA可以用作签名算法。发送方传送文件时,同时传送对文件摘要的RSA签名;接受方用同样的算法计算文件摘要,使用发送方的公开密钥解密签名,比较其是否一致即可鉴别文件是否是伪造的。

可考虑采用公开密钥算法进行数字签名来实现WEB站点的身份验证。用户申请服务时,主机产生一随机字符串发送给用户,用户用自己的私钥对该字符串签名并传回主机,随后主机使用该用户的公钥验证用户身份。

验证服务器给出随机字符串,客户对字符串进行数字签名,验证服务器验证签名的有效性,验证通过,客户得到要求的服务。

由于整个签名过程避免了用户私钥在网络上传输,从而杜绝了窃听的可能。对于中间人攻击,发起攻击的人只能得到用户名、随机字符串及其密文,破译出用户私钥的难度极大,以至于不值得或无法实现。即使有人发起选择密文攻击,由于此方案的特点――验证服务器自己保管用户的公钥,事实上用户的公钥也是保密的,他也无法获得用户私钥。若再加上适当的用户响应时间限制则安全性更好。从而,此方案实现了比传统方式更好的安全性,虽仍不及其他更严格的身份鉴别协议完善,但可以方便地使用ASP、JSP实现,不需投入硬件设施,而且可以直接与所要保护的服务系统整合在一起,更适于要求综合考虑安全性、易用性、成本等因素的中小型网络系统应用。

3利用公开密钥算法RSA建立公/私钥系统

在诸多公开密钥算法中RSA算法被研究得最多,已非常成熟,在世界上许多地方已成为事实上的标准。而且其专利已到期,我们可以毫无障碍地使用。虽然随着技术的发展,它要求模数的位数越来越多(当前要求1024位,推荐1280位),导致加/解密速度缓慢,但对于局域网这样的应用,显然用不着如此之多的位数。因此,采用RSA算法是值得一试的。由于现在许多密码学教材都有关于RSA算法的详细内容,网上对RSA算法的原理及实现也有许多材料,例如:FLINT/C、GNU MP、Miracle等等,这里对RSA算法产生公/私钥的详细步骤不再赘述。

有一个很简便快捷的实现方法,就是利用Windows CryptoAPI函数建立用户公/私钥库。使用Windows CryptoAPI时,先调用CryptAcquireContext()函数连接加密服务程序,再配合CRYPT-EXPORTABLE参数调用CryptGenKey()创建密钥,最后调用CryptExportKey()函数输出密钥。如此可方便地产生自己的密钥库。

4结束语

上面给出的是利用RSA实现WEB站点的身份认证的一个初步构想。为把注意力集中于验证服务的原理上,程序设计中一些实际问题没有包括在内。实际上,在ASP脚本的编写过程中要十分注意安全性,对所有用户输入均应进行有效性验证。密钥在数据库的存储应该先用哈希摘要,再用对称加密算法加密。全部服务页面均应验证页面的上一页属性,以避免非法用户绕过身份检查。

参考文献

[1]王继林,等译.现代密码学理论与实践(英),Wenbo Mao.电子工业出版社,2004.

[2]张潜力编著.网络安全新技术.人民邮电出版社,2004.

[3]赵振江,等译.应用密码学(德),MCHAEL WESLCHENBACH著.电子工业出版社 2004.

上一篇:计算机病毒的手工清除 下一篇:初学者如何正确使用Vista系统