使用一次性密码解决方案更安全地验证身份
2009-02-09 10:20:21 来源:WEB开发网特定用户(或从技术角度讲,具有特定密钥)每次进行身份验证尝试时,计数值都会增加。OTP 解决方案的安全性依赖于永不重复使用的计数值;这一点由 OTP 服务器保证。实际使用时,计数是 64 位无符号整数。如前所述,另一种部署方法是使用与服务器之间的时间同步。
密钥哈希消息身份验证代码 (HMAC) 是基于密钥的一种加密哈希。或换句话说,HMAC 接受任意消息和密钥,并将消息映射成固定长度的摘要值(如 20 字节),从而确保只有具有相同密钥的人才能从相同的消息生成相同的摘要值。
HMAC-OTP 的首个计算步骤是接受计数值,并将其编码为 HMAC 计算的输入消息。实际使用时,消息是设为计数器值的 8 字节缓冲区。图 2 描述了这一步骤以及接下来的两个步骤。下一计算步骤是使用用户密钥计算上述消息的 HMAC。请注意,我在该实现中对字节顺序进行了编址以确保它与 RFC 兼容。
图 2一次性密码流程
随后,通过对 20 字节的 HMAC 结果进行十进制编码,从而将此结果转换为 OTP 值。其中包含两个实践要求:第一,我需要保留尽可能多的 HMAC 计算位,最多为 OTP 结果的长度(在本例中为六位数),因为丢失位会把计算暴露给加密攻击。第二,我需要创建与尽可能多的输入设备类型兼容的 OTP。这一兼容要求正是我采用十进制编码的原因所在。(这种强身份验证实现甚至与拨号式电话兼容!)
示例网站
我的目标是确保所设计的站点能正确地显示用户是否使用 OTP 实现成功登录。为便于测试,此 OTP 解决方案包含一个示例网站。该网站的首页是 Default.htm,此登录页面用于向通过身份验证的用户展示 OTP 模块如何保护非 ASP.NET 页面。其中还包含用于显示当前已通过身份验证的用户名的 Test.aspx 文件,以及显示 Test.aspx 页面如何从 System.Web.UI.Page.User 属性检索已通过身份验证的用户名的 Test.aspx.cs 文件。该解决方案还包括一个 web.config 文件(其中包含对 OtpModule 的引用)以及引用了 IISModule.dll 文件的 Visual Studio 项目解决方案。
更多精彩
赞助商链接