如果我了解密码哈希和存储的基础知识,我们需要的是:
我们使用 PHP以“中等”成本使用 1、2、3 和 4 对密码进行哈希处理crypt()
。CRYPT_BLOWFISH
我们有一个新的需求:我们需要能够比较哈希值,因为我们注意到低级别的欺诈/垃圾邮件/诈骗者使用相同的密码。我们不需要知道滥用者的密码,而只需要知道个人资料使用与先前识别的滥用者相同的密码。
所以我们正在考虑在我们的数据库中有 2 个字段:
- 密码A:用于登录程序(此字段将使用 1、2、3 和 4)
crypt($password, '$2y$06$' . $uniqueSalt);
- 密码B:用于“比较”(此字段将我们使用 1、2 和 4)
crypt(md5(md5($password) . $globalSaltA) . $globalSaltB, '$2y$10$' . $globalSaltC);
全局盐 A 和 B 将仅存储在应用程序代码中。
为了弥补密码 B 的缺失点 3,我们增加了高得多的“成本”。
在评论之后,我明白如果攻击者在服务器上获得完全访问权限(数据库 + 代码),这种策略是多么不安全。但是,如果攻击者只获取数据库,我们就可以了。
检测信用卡欺诈的公司对信用卡号码也有同样的问题。他们无法存储它们,但需要比较它们。
那么你会建议什么策略/解决方案?