我对RSA,SecurID和类似的2因子系统非常着迷。
我看过很多文章,包括这篇:https://security.stackexchange.com/questions/9584/can-the-numbers-on-rsa-securid-tokens-be-predicted
我的问题是,因为RSA的算法使用“种子”,因此生成的数字是“序列”。
如果当服务器请求时,我在安全设备上生成一个令牌,而不是使用该令牌,那么我将再次按下按钮生成另一个令牌呢?这不会导致在设备和服务器上运行的系列中出现“错配”吗?
如果逻辑只依赖于时钟和设备的串行,那就更容易了,但是由于涉及种子和随机数,我想知道如果跳过一两个令牌会发生什么?
谢谢。
发布于 2014-06-16 17:55:58
据我所知,SecurID令牌不使用“滚动计数器”--令牌是由设备串行和当前时间生成的。另外:在我所见过的SecurID令牌(诚然是有限的)中,用户不会按下按钮来生成令牌;相反,令牌在屏幕上总是可见的。因此,生成的令牌不会(按顺序)与服务器不同步,除了令牌端存在时钟漂移的可能性(通常服务器使用NTP,因此它们的时钟漂移可以忽略不计)。
然而,时钟漂移问题的典型解决方案是在服务器上存储一个“漂移”参数,在每个令牌的基础上。这个漂移参数可以手动更新(为了最大的安全性,也可以是最大的痛苦),或者可以检查服务器端周围的间隔。例如,如果我现在登录,您可以检查服务器当前的60秒间隔、前一个间隔和下一个时间间隔是否有效,如果上一个/下一个时间间隔有效,则存储该漂移以获取令牌。
另一方面,有一种算法受到您所描述的问题的困扰:基于HMAC的一次性口令算法。它使用一个滚动计数器,该计数器应该在服务器和令牌上同步。因此,如果您有一个基于HOTP的身份验证器,并且多次按下令牌生成按钮,则会导致它不同步,服务器管理员需要手动干预。
类似的解决方案可以像上面所示:检查计数器的下几个值,例如counter+1、counter+2、counter+3等,并将其存储为“漂移”参数。根据检查的距离,如果重复按下令牌,它最终可能会失去同步。
时代版是修复HOTP的一个变种,它使用的是“时间计数器”而不是真正的计数器。这是Google身份验证所使用的。在这里,您仍然存在时钟漂移问题,与上面的解决方案相同。
发布于 2014-06-16 18:32:41
如果您对OTP系统感兴趣,那么您应该阅读描述基于HMAC的OTP算法的RFC 4226和描述基于时间的OTP算法的RFC 6238,因为当今大多数OTP解决方案都使用这两种算法。
如果你也有兴趣在两个因素认证领域的最新发展,那么你应该访问FIDO联盟的网站,看看他们的规格。
https://stackoverflow.com/questions/24249218
复制相似问题