所以最近我一直在做大量关于如何保护密码的研究。我相信我了解它的基本原理。因此,我正在尝试编写自己的函数来保护 php 中的密码。
但是当谈到加盐密码时,我有些困惑。我们创建一个随机唯一的 salt 并将其附加到密码,然后对其进行哈希处理,最后将未哈希处理的 salt 和哈希后的密码/salt 组合一起存储在数据库中。如果他获得对数据库和我们散列密码的访问权限,这会增加黑客的搜索空间。
所以这似乎完全是对安全性的过度杀伤,但无论我在哪里看到盐总是附加在密码的前面或后面。因此,查看单个用户的密码,这个唯一的盐不会影响搜索空间吗?尽管由于每个用户都有一个独特的盐,每个用户的整体搜索空间都大大增加了。
创建一个将盐插入密码中可预测的半随机位置(例如用户名/ 2 的长度)的算法不是更安全吗?例如,这是我提出的保护功能的步骤:
Create a random salt
take username length %(mod) password length
insert the salt at the spot determined
hash
示例运行:
random salt = 12345
len("imauserwithalongname") % len("mypass") = 2
valueToHash = my12345pass
现在我们的破解者不知道在没有看到我们的 php/source 的情况下将盐放在哪里,这(如果我错了,请纠正我)比数据库更难获得访问权限。
我也知道安全性应该取决于密钥的安全性而不是算法的保密性,但是我认为基于它添加层没有错,只要整个系统不依赖于算法的保密性。
编辑:这样做会大大增加饼干的搜索空间吗?
如果我们将盐放在一个取决于密码长度的位置,那会不会破坏使用字典攻击的目的,即使是在每个用户的基础上?