我的理解是,盐并不是要保密的,它只是为了与任何集中式标准不同,因此您不能开发彩虹表或类似的攻击来破坏使用该算法的所有哈希,因为盐会破坏彩虹桌。我在这里的理解可能并不完全正确,如果我错了,请纠正我。
在一个广泛使用的开源软件中,salt 将广为人知,这使您容易受到攻击,因为现在他们可以简单地攻击您的 hash 的 salted 版本并创建包含 salt 数据的彩虹表。
在我看来,有两种选择可以解决这个问题。首先是在每个新版本的软件中更改盐,但这并不好,因为新版本的软件将不再能够针对旧密码哈希进行测试。
我想到的第二个解决方案是为每个密码存储一个盐;换句话说,每个密码都有不同的盐。缺点是盐必须以某种方式与密码哈希相关联,可能只是将它们粘贴在数据库中的密码旁边。甚至可以使用用户名(但可能不会,用户名可能太短)。
我的问题是,这可以接受吗?将盐直接与其散列的密码一起存储是否有任何额外的风险?在我看来,将盐存储在源代码中没有什么不同,因此将盐与密码一起存储不会造成安全损失。
免责声明:我没有将它用于任何现实生活中的安全系统。事实上,我从未设计过任何类型的密码系统。我只是让自己对安全问题进行了模糊的教育。