简述“一次性密码”身份验证

时间:2022-06-25 05:07:37

简述“一次性密码”身份验证

摘要:密码的安全和管理是对企业IT管理员很重要的一个问题。用户往往创建非常简单的密码,如何才能减少此类安全问题呢?该文介绍使用基于标准的技术以及C来开发一次性密码概念。使用基于标准的OTP解决方案是一个比较优秀的选择。

关键词:Web;Web一次性密码;OTP

中图分类号:TP393文献标识码:A文章编号:1009-3044(2010)20-5426-02

Brief "one-time Password" Authentication

LIU Zhao-qian, LI Jin

(Biological Engine College Yancheng, Yancheng 224051, China)

Abstract: The password management is very important IT managers an issue. Users often create very simple PWD, how can reduce these security problems? This article describes the use c to develop a one-time PWD concept. Use of OTP is a more excellent choice.

Key words: Web; one-time password; OTP

1 密码

态密码通常只在需要时才进行更改,由于密码缓存在计算机硬盘上并存储在服务器上,因此它们很容易被破解。一次性密码会在用户每次登录时发生更改。密码有两种方式:与时间同步或与计数器同步。

与时间同步的OTP已得到广泛部署,但可能出现时钟偏差问题。即,如果身份验证服务器和用户令牌的时间不同,则无法生成预期的OTP值,并且用户身份验证将失败。使用与时间同步的OTP时,用户通常必须在特定时间段内输入该密码,否则会将其视为过期且必须生成另一密码。

与计数器同步的OTP将同步客户端设备与服务器之间的计数器。每次请求设备的OTP值时,计数器都会增加。就像使用与时间同步的OTP一样,当用户想要登录时,他必须输入设备上当前显示的OTP。用于应对复杂情况的OTP是一种特殊情况,它们通常还会使用硬件设备。但是,用户必须提供一个已知值才能生成OTP。此类OTP目前广泛应用,用于为信用卡和借记卡增加身份验证。

2 OTP解决方案

为构建OTP解决方案,需要创建一个基于标准的OTP身份验证Web 服务,该服务由 SQL提供支持且集成到 中。创建一个OTP生成器,通过将其安装到每台客户端计算机上,用户就可运行它来生成新的OTP。当收到Web浏览器提示时,OTP插件模块从IIS得到通知,并且随后调用Web 服务来检验身份验证请求。Web 服务在 SQL表中查找用户的密钥和计数器值、检验OTP计算,并响应身份验证为成功还是失败。图1显示了解决方案的体系结构。

IIS模块提供了OTP身份验证服务,并且该模块使用一个名为Service的Web服务来检验OTP值。该Web 服务包含一个位于AppData中的SQL数据库,在Test项目中包括了用于测试该解决方案的网页。

3 OTP客户端

OTP生成器客户端应用是一个独立的工具,它允许用户获取OTP身份验证值。为计算OTP,该客户端组件使用与身份验证Web 服务共享的 DLL。用户将运行此工具来创建下一个OTP,然后将该值手动键入到Web 浏览器的表格中。使用 C 来完成所有工作。这个基于哈希的OTP解决方案有两个输入值:密钥和计数。但是,OTP解决方案还具有与实现程序相关的元数据,包括执行身份验证时用户必须键入的密钥的长度和预期OTP值的长度。

程序将生成长度为六个字符的OTP。特定用户每次进行身份验证尝试时,计数值都会增加。OTP解决方案的安全性依赖于永不重复使用的计数值;这一点由OTP服务器保证。密钥哈希消息身份验证代码是基于密钥的一种加密哈希。OTP的首个计算步骤是接受计数值,并将其编码为HMAC计算的输入消息。实际使用时,消息是设为计数器值的 8 字节缓冲区。接下来的两个步骤。使用用户密钥计算上述消息的 HMAC,通过对 HMAC 结果进行十进制编码,从而将此结果转换为OTP值。

建立一个OTP网站。首页是Default,其中还包含用于显示当前已通过身份验证的用户名的 Test文件,以及显示Test页面如何从Page.User属性检索已通过身份验证的用户名的Test文件。还包括Web.config文件以及引用了IISModule 文件的VS项目解决方案。

IISOTP插件模块是该网站的一个组件。该模块与IIS交互,并将用户重定向到可在其中输入用户名和OTP的窗体。当用户提交用户名和OTP时,该模块会检验输入并将用户重定向到相应的成功或失败页面。该模块还会将用户的身份验证状态与用户会话关联起来。

为实现可维护性和可支持性,要能够对该模块进行管理。插件模块是身份验证Web 服务的客户端。OTP模块实现了IModule 接口。第一个是Init,使用此方法来注册Request。具体实现方式为使用以下几个帮助函数:一个函数用于确定调用方是否已通过身份验证,还有几个函数用于在调用方尚未通过身份验证时对其执行身份验证。

OTP模块包括一个内置登录窗体。如果调用方已通过身份验证,则模块无需执行进一步操作。如果调用方未通过身份验证,则会调用 IsAuthentit。如果两个条件都得到确认,则此方法将返回真。如果请求是身份验证请求,则调用Authentte。从请求上下文中检索用户名和OTP值,并将其传递给身份验证Web 服务的Verify方法。如果确认成功,则会将新的加密身份验证cookie附加到响应中。然后,将该响应重定向到默认页面。要演示这一效果,可先保存用户请求的原始页面,并在身份验证成功之后将用户重定向到该页面。

4 身份验证服务

身份验证Web 服务负责执行实际的OTP身份验证,其方法是确定提供的OTP值是否表明命名用户已拥有密钥。

由于重用底层加密库,实现OTP身份验证Web服务将非常简单。该重用形式为对本机HmacDll的GenOTP导出的P/Invoke调用。

Web 服务提供一个Web方法VerifyOtp。该方法首先加载与身份验证请求中指定的用户名相对应的 SQL数据库行。如果 SQL无法找到匹配行,该方法将返回假。如果在 SQL Server中找到相应用户名,该方法将把以下数据项传给本机GenOTP:请求中指定的OTP值、用户密钥以及计数器值。

如果在计数器范围内找到匹配的OTP值,则将把新的计数器值写回数据库。在 SQL数据库可用于存储用户名及对应的OTP密钥或种子值。还可扩展该构架以包含登录信息。该数据库由 用户、密码和计数列组成。

5 完整的体系结构

启动客户端应用、生成OTP、然后导航至身份验证Web应用。当OTP模块检测到请求尚未通过身份验证时,它将生成窗体。当用户单击提交时,Web浏览器窗体将把请求发送到服务器。OTP模块调用Web服务来检验用户的身份验证数据。如果成功,Web服务器将针对请求页面调用处理程序。如图2所示。

要运行代码示例,需要IIS、SQL。假设OTP示例代码解决方案文件位于OTP\Otp。使用IIS来安装IIS模块。向IIS_IUSRS帐户或配置Wedata的读写权限。然后,为OTPTest添加网站。

还应将模块DLL添加到全局程序集缓存中。要向GAC注册OTP模块,使用命令:gacutil,用IIS,打开控制台树中计算机。双击模块图标,然后单击操作窗格中的增加管理模块,选择OTPModule。如果将DLL放入GAC中,可能需要重启IIS。

必须在IIS中设置一个网站。为Web 服务创建一个网站。执行测试来确保正确加载OTP模块。要获得OTP代码文本框的值,以管理员身份打开运行Client获得OTP值。将OTP值键入OTP代码文本框,然后提交。如果身份验证成功,会转到默认页面。单击默认页面的Text链接进入演示页面,该页面将显示当前通过身份验证的用户的名称。

一次性密码是优先于标准密码的选择。由于用户对于密码的使用非常随意,因此必须强化身份验证过程。通过使用IIS插件模块模型,可利用硬件令牌和质询创建基于标准的OTP解决方案以及更加可靠且可立即投入生产运行的OTP解决方案。广泛的OTP应用使和在线型的应用密码的保密性得到很大的增强。

参考文献:

[1] 考夫曼 2.0数据库入门经典[M].4版.北京:清华大学出版社,2006.

[2] 耶姆塞.C/C++/C#程序员实用大全:C/C++/C#最佳编程指南[M].张春晖,译.北京:水利水电出版社,2002.

[3] 郑耀东网络数据库开发实例精解[M].北京:清华大学出版社,2006.

上一篇:SQL Server 2005 Mobile同步技术初探 下一篇:基于异构系统应用集成安全策略的研究与实践