我正在为一个web应用程序开发一个额外的安全模块,它要求用户输入在用户注册时随机生成的PIN码。PIN被AES-128加密存储在db中,并通过sms发送给新用户。
当某些情况发生时,用户将被要求提供他的PIN (即,“奇怪的”访问,或不寻常的操作)-我希望用户不要输入整个PIN码,而是只输入2个数字(例如:1和6)。
2 4 6 2 9 1 8 3 -> entire PIN
^---------^---- -> digits i'm asking我的问题是:选择要询问的数字是更安全的方式吗?我应该随机选择它们(但是拥有PIN的一部分的最终攻击者可以重试,直到他拥有的数字被请求),或者我应该总是要求每个用户提供相同的数字-也许可以用pin加密存储他们的索引,或者使用PIN本身参数化的函数生成它们?
谢谢。
发布于 2011-09-19 22:47:48
我发现大多数网上银行软件实现这一点的方式是,一旦它被要求提供两位数,它就会一直要求相同的,直到用户阻止帐户(因为有太多的错误尝试)或正确回答为止。在此之后,将为下一次随机选择另外2个数字。
据我所知,这是减轻攻击者攻击的唯一方法,只是简单地重新加载,直到他们得到他们想要的组合。
发布于 2011-09-19 22:47:38
如果你有第二次,more secure way的身份验证,那么请要求随机数字,但在几次失败尝试后锁定帐户。这样,攻击者拥有正确数字的机会非常小,但同样的两个数字泄漏的影响也得到了缓解。
编辑:正如@m.edmondson建议的那样,仅在成功登录后更改配对,而不是在登录之前。
如果你一次又一次地要求相同的两位数,你可能只需要一个两位数的PIN。
如果用户无意中将自己锁定,您始终可以依靠二次身份验证来恢复帐户。
https://stackoverflow.com/questions/7472732
复制相似问题