【发布时间】: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 没有经过哈希处理,而是加密。
-
在这种情况下,我同意加密胜过被散列