我正在为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本身参数化的功能?
感谢。
答案 0 :(得分:3)
我发现大多数网上银行软件的实现方式是,一旦要求两个数字,它将继续要求相同,直到用户阻止帐户(来自太多错误的尝试)或正确回答。在此之后,下一次随机选择另外2位数字。
据我所知,这是缓解攻击者只需重新加载的唯一方法,直到他们得到他们想要的组合。
答案 1 :(得分:1)
如果您具有辅助more secure way身份验证,则请求随机数字,但在尝试几次失败后锁定帐户。这样,攻击者拥有正确数字的可能性非常小,但同样的两位数泄漏的影响也会减轻。
[编辑:正如@ m.edmondson建议的那样,只有在成功登录后才更改对,而不是之前。]
如果您只是反复询问相同的两位数字,您可能只需要两位数的PIN码。
如果用户无意中将自己锁定,您可以随时使用辅助身份验证来恢复帐户。