我的理解是,盐并不需要保密,它只需要与任何中央标准不同即可,以便无法开发彩虹表或类似攻击来破解使用该算法的所有哈希值,因为盐可以破坏彩虹表。不过如果我有所错误,请指正。
在广泛使用的开源软件中,盐可能会被广为人知,这会使你面临攻击的风险,因为现在攻击者可以简单地攻击加过盐的哈希值,并创建包括盐数据的彩虹表。
我认为,有两种方法可以解决这个问题。第一种是在每个新版本的软件中更改盐,但这样做并不好,因为新版本的软件将不能再对旧密码哈希进行测试。
我想到的第二个解决方案是为每个密码存储一个盐;换句话说,每个密码都有一个不同的盐。缺点是必须以某种方式将盐与密码哈希关联起来,可能只需将其直接附在数据库中的密码旁边即可。也许使用用户名也可以(但这可能不行,因为用户名可能太短)。
我的问题是,这可行吗?将盐直接存储在其哈希密码旁边是否会有任何额外风险?在我看来,将盐存储在源代码中并没有什么不同,因此通过与密码一起存储盐并不会导致安全损失。
免责声明:我没有使用这个方案设计任何真实的安全系统。事实上,我从未设计过任何类型的密码系统。我只是让自己对安全问题保持模糊的了解。