【问题标题】:Ask user for partial PIN向用户询问部分 PIN
【发布时间】:2012-08-07 03:37:43
【问题描述】:

我正在为 Web 应用程序开发一个额外的安全模块,它要求用户输入在用户注册时随机生成的 PIN 码。 PIN 以 AES-128 加密存储在数据库中,并通过短信发送给新用户。

当某些情况发生(即“奇怪”访问或异常操作)时,系统会要求用户提供他的 PIN - 我希望用户不要输入整个 PIN 码,而只需输入 2 位数字(例如: 第 1 次和第 6 次)。

2 4 6 2 9 1 8 3    -> entire PIN
^---------^----    -> digits i'm asking

我的问题是:选择要询问的数字是否更安全?我应该随机选择它们(但是拥有部分 PIN 码的最终攻击者可以重试,直到他拥有的数字被请求)还是我应该始终要求每个用户提供相同的数字 - 可能存储使用 PIN 加密的索引,或者生成它们使用 PIN 本身参数化的功能?

谢谢。

【问题讨论】:

  • 只是好奇,鉴于完整的 PIN 已散列,您如何验证这两位数字?
  • 您必须对每个单独的数字进行哈希处理,并且我猜它在 PIN 中的位置很清楚!非常愿意被蛮力强迫。
  • PIN 没有经过哈希处理,而是加密。
  • 在这种情况下,我同意加密胜过被散列

标签: php security


【解决方案1】:

我发现大多数网上银行软件实现这一点的方式是,一旦要求输入两位数,它将继续要求相同,直到用户阻止帐户(由于太多错误尝试)或正确回答。之后再随机抽取 2 位数字供下次使用。

据我所知,这是缓解攻击者的唯一方法,只需重新加载直到他们获得所需的组合。

【讨论】:

  • 哦,很好,我错过了关于重新加载的内容。 +1。但是,清除 cookie 是否会保留数字的选择?
  • @Kerrek - 您不能使用 cookie 来决定数字,因为这根本不安全。您只需在数据库中存储与请求的数字(服务器端)相关的两个数字 - 只有在提供正确的数字时才会改变
  • 我明白了,您希望独立于任何用户会话来执行此操作。这是个好主意。
  • @m.edmonson:+1。成功登录后更改配对对我来说听起来不错。 :-)
【解决方案2】:

如果您有第二次身份验证,more secureway,请务必要求随机数字,但在几次尝试失败后锁定帐户。这样一来,攻击者获得正确数字的机会非常小,但同样的两位数字泄露的影响也得到了缓解。

[编辑:正如@m.edmondson 建议的那样,仅在成功登录后更改配对,而不是之前。]

如果您只是一遍又一遍地要求相同的两位数,那么您还不如只拥有一个两位数的 PIN。

如果用户无意中将自己锁定在外,您始终可以依靠辅助身份验证来恢复帐户。

【讨论】:

  • 谢谢。事实上,每次都要求相同的 2 位数字与拥有 2 位 PIN 码不同。要求提供部分 PIN 码可以防止窃听攻击 - 它可以防止插入完整的代码(并最终防止整个代码被盗)。
  • @geezmo:如果您的系统的每个方面都只需要相同的两位数字,那么我想这与 2 位 PIN 没有什么不同。如果您在不同的地方需要不同的数字组,那就另当别论了。
  • 在我看来,每个用户都需要输入一组不同的数字
  • @geezmo:我理解,但是对于每个用户,如果我理解正确的话,只有两个数字会构成她的整个凭据集。因此,这只增加了一个非常薄的安全层,仅针对完整凭据集的部分(用户现在根本没有理由使用)泄漏的特定威胁模型。
  • 你是对的,基于每个用户更改对不会增加系统强度。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-02
  • 1970-01-01
相关资源
最近更新 更多