首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2FA代码的最大尝试?

2FA代码的最大尝试?
EN

Security用户
提问于 2018-05-16 13:43:56
回答 1查看 4.1K关注 0票数 4

我正在建立一个网站,我正在实施两个因素认证(2FA)。第二个因素将是一个随机的6位代码,就像那些来自Authy。本网站将存储非常机密的信息。

在锁定2FA代码之前,我正在考虑限制用户的尝试次数。这是为了防止蛮力。但是,有多少尝试是合理的呢?或者应该有一个临时锁定,因为2FA代码旋转,攻击者将不会从中得到任何东西?

EN

回答 1

Security用户

回答已采纳

发布于 2018-05-16 15:11:49

许多人错误地认为,由于代码经常旋转,所以不受暴力的影响。事实并非如此。如果假设每秒有100次尝试,且代码有效时间为30秒,攻击者在代码旋转之前就有100*30 = 3000猜测,这就有可能使3000 / 10^6 = 0.3%成功。这可能看起来很低,但这只是30秒,攻击者可以再次尝试后续代码。要想获得50%的成功机会,他们只需尝试ln(50%) / ln(99.7%) = 230.7 30秒,即大约2小时。

如果您不确定为什么旋转代码不能解决这一问题,请尝试这样想:攻击者可以猜测每个代码的范围为000000至002999,而代码有可能在此范围内,因此在生成多个代码之后,很有可能最终落入该范围。

如果将次数限制为每5秒1次,则为ln(50%) / ln(99.9994%) 30秒周期,约为40天。这可能仍然不够好的高价值帐户,所以我肯定会建议额外的措施,以防止蛮力。然而,这些措施应该是更难回答的,正如评论中所述,由于第二个因素尝试失败而完全锁定帐户可能允许DoS,一般情况下,用户可能会感到沮丧。如果密码在过去一天左右每分钟通过一定次数的尝试,那么记录每次尝试并警告用户更改密码就足够了。

The Math

代码语言:javascript
复制
Let s be the chance of success for a single 30 second period
Let n be the number of 30 second periods
Let t be the total chance of success over all periods

如果你有s成功的机会,那么你就有失败的机会。如果您多次尝试,您可以将每次尝试获得失败的总机会乘以失败的概率,因此(1 - s)^3是失败的机会与3次尝试的机会,而1 - (1 - s)^3是至少在3次尝试中成功的机会。这使我们能够得出以下公式:

代码语言:javascript
复制
t = 1 - (1 - s)^n

然后,我们可以为n求解给定的st

代码语言:javascript
复制
(1 - s)^n = 1 - t
ln( (1 - s)^n ) = ln(1 - t)
n * ln(1 - s) = ln(1 - t)
n = ln(1 - t) / ln(1 - s)

因此,对于t = 0.5s = 0.003

代码语言:javascript
复制
n = ln(1 - 0.5) / ln(1 - 0.003)
  = ln(0.5) / ln(0.997)
  ≈ 230.7

如果你想知道攻击者需要多长时间才能获得99%的成功机会,每次6次(每5秒1次),s = 6/1000000 = 0.000006t = 0.99,大约767,526次或266.5天。对于1%的机会,以同样的速度t = 0.01,这大约是1675个周期或14个小时。

票数 15
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/185905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档