我们有以下哈希函数来映射4位数密码。
h(abcd)=(d + c ^ 2 + b ^ 3 + a ^ 4)mod 100,其中a,b,c,d = {0 ... 9}。
如果服务器存储了unhashed vs hashed版本的密码,有人找到密码的成功概率是多少?
我知道我们总共有10 ^ 4个可能的4位数字未加密的密码。因此,如果在NOT-hashed列表上运行穷举搜索,那么成功概率将为1/10 ^ 4 = 1/10000。
但是我怎么知道密码存储密码的可能性是多少?许多密码将散列为相同的值。我没有看到一种新兴的模式。
答案 0 :(得分:1)
首先,阅读Thomas Pornin's canonical answer to "How to securely hash passwords?"
其次,退出使用自定义哈希函数并开始使用PBKDF2,bcrypt或scrypt,并具有足够多的迭代/工作因子。
请注意,对于4位数的PIN,没有可能的工作因素足够高,因为离线攻击者的计算能力可能要高出几个数量级,因此如果您希望用户等待不到一个小时,任何攻击者都会在很短的时间内完成整个列表,并找到100%的密码。
所以,第三,退出使用4位密码,并开始使用长而复杂的密码 - 甚至更长的数字密码。
ETA:对于100%的离线攻击 - 他们会在正常使用的时间范围内立即找到所有密码。