首页 百科知识 一次性密码

一次性密码

时间:2022-10-01 百科知识 版权反馈
【摘要】:一次性密码的产生方式主要是以时间差作为服务器与密码产生器的同步条件。因此,采用一次性密码,即使网络上有人截获了此密码,该密码也已经过期。由于一次性密码只能使用一次,所以无须防止窃听。然而,攻击者可以通过侦听大部分的一次性密码来猜测其余的密码,并与合法用户竞赛以完成验证。

由于某些嗅探程序(Sniffer Program)可截获与记录网络上发送的字符,因此,有些人就可以通过窃听(Eavesdrop)网络连接来获得合法用户的登录用户名和密码,从而使得在网络上保护密码变得更加困难。另外,一般的静态密码在安全性上容易被木马窃取,且只要花上一定的时间就可能被蛮力破解。为了解决上述一般密码容易遭到破解的问题,人们提出了一次性密码(One Time Password,OTP)的解决方案

一次性密码(OTP)又称动态密码(Dynamic Password),是指只能使用一次的密码。一次性密码的产生方式主要是以时间差作为服务器与密码产生器的同步条件。在需要登录的时候,就利用密码产生器产生一次性密码,OTP一般分为计次使用与计时使用两种,其中,计次使用的OTP产出后可在不限时间内使用;计时使用的OTP则可设定密码有效时间,从30s~2 min不等,而OTP在进行认证之后即废弃不用,下次认证必须使用新的密码。因此,采用一次性密码,即使网络上有人截获了此密码,该密码也已经过期。目前,创建一次性密码的方法主要有以下几种:

(1)使用密码本(Code Book):在该方法中,用户和系统都统一使用一个相同的密码列表(称为密码本)。列表中的每一个密码只能使用一次。这种方法有几个缺陷。首先,系统和用户双方都要保存一个较长的密码列表。其次,如果用户不按次序使用密码,则系统将需要执行一个长时间的搜索才能找到与用户匹配的密码。

(2)基于初始密码连续升级:在该方法中,用户和系统同意一个初始密码P1,该初始密码仅在第一次访问时有效。在第一次访问的过程中,用户生成一个新的密码P2,并且用P1作为密钥对这个密码进行加密,然后,将P2作为第二次访问的密码。在第二次访问的过程中,用户又生成了一个新的密码P3,用P2进行加密,然后,P3将在第三次访问中使用。也就是说,Pi是用来创建Pi+1的。当然,如果攻击者能够猜测出第一个密码P1,则可以找出所有这一系列的密码了。

(3)使用令牌卡(Token Card):令牌卡是一个内置验证函数和序列号的小卡片或计算器,可用来生成一次性密码。下面是两种卡片的例子:

例1(SECURID卡):该卡片可显示一个数字,每隔30~90s变化一次,显示的数字就是当前时间和特定卡ID的函数,并与远程服务器同步。有些卡片还有一个键盘可以输入个人识别码(Personal Identification Number code,PIN)。此种卡片简单小巧,只是需要服务器始终保持时间同步。

例2(安全网密钥卡):该卡是一个看起来像计算器的小装置。当用户与远程服务器连接时,服务器显示一个数字作为挑战(Challenge),然后用户将该挑战数字与PIN一起输入卡中,卡就会显示一次性密码。当输入错误的PIN超过一定次数时,安全网密钥卡可通过编程设置自我销毁(Self-Destruct)。

1998年,一次性密码系统作为RFC 2289发布(RFC 1938的修订版)。此系统使用标准哈希函数,如:MD4,MD5、SHA-1,在创建一次性密码时,服务器发送一个挑战消息(Challenge Message)给用户,挑战消息的语法为:

OTP-<Algorithm ID><Sequence Integer><Seed>

其中,种子(Seed)包含1~16个仅包括文字与数字的字符。一个OPT密码的例子为:otp-md5 487 dog2。

然后,用户选择一个至少包括10个字符的秘密密码短语(Pass-Phrase),再将种子与该密码短语相连,并传给安全哈希函数N次,其中,N由用户指定,最后得到的摘要即为一次性密码记录,即系统将记录<P0, HN(P0)>。而用户的下一个一次性密码则是通过安全哈希函数N−1次生成的HN−1(P0),其中,P0为种子与密码短语相连后的值,而HN(P0)表示由安全哈希函数对P0进行N次哈希之后得到的摘要。

当用户下一次登录时,输入HN−1(P0),为了验证用户,服务器将密码传输给安全哈希函数一次,由此得到H(HN−1(P0))= HN(P0),然后,将得到的HN(P0)与存储的OPT进行比较,如果结果与先前的OPT相同,则验证成功,然后,系统将HN−1(P0)作为新的一次性密码存储以备以后使用,即,将原来存储的记录<P0, HN(P0)>替换为<P0, HN−1(P0)>,此时,用户的下一个一次性密码则变为HN−2(P0),这样一来,密码短语就可以使用N−1次了。

上述一次性密码系统的安全性依赖于哈希函数的单向性,其中,所使用的种子使得用户可以在不同的机器上使用相同的安全密码短语,由于种子的不同,从而使得用户可以在不同的机器上即使使用相同的安全密码短语,所得到的P0也不会相同。

由于一次性密码只能使用一次,所以无须防止窃听。然而,攻击者可以通过侦听大部分的一次性密码来猜测其余的密码,并与合法用户竞赛以完成验证。由于人类打字的速度远远慢于计算机生成密码的速度,因此,对6个单词的最后一个单词的多重猜测有可能取得成功。由此,需要一些方法来防止上述这种竞赛攻击。一种方法是阻止用户同时启动多个验证会话,即,一旦合法用户开始验证,攻击者就会被阻止直到验证进程的结束。这意味着需要设置超时机制来防止拒绝服务攻击(Denial of Service,DoS攻击)。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈