好的,所以我理解为什么在散列之前输入密码是个好主意。 问题是,通常人们建议将盐附加或添加到密码中,为什么不同时使用?
我的想法是,如果黑客先生抓住了数据库并希望获得人x的密码, 他认为自己很好,大多数人都建议添加或添加盐,所以让我们这样做.. 他用密码+盐的所有组合生成彩虹表,并试试运气。如果这不起作用,他会做同样的但是盐+密码。
为了使攻击变得更加困难,为什么开发人员不再采取进一步做“盐+密码+盐”,或“反向(盐)+密码+盐”,或者你可能很喜欢开始切断密码/盐,开始在这里和那里放点盐等。
黑客能够找到密码的唯一方法是,他是否可以访问源代码(了解在散列之前如何将盐编织到密码中)
另外需要注意的是,人们建议在进行按键拉伸时至少进行1000次迭代,为什么不进行1147,1652等呢?)
第二个注意事项,当查看哈希字符串时,是否可以计算出使用的哈希函数?
答案 0 :(得分:7)
更容易猜测应用盐的方式比使用密码更容易,特别是在攻击者拥有散列密码数据库和一个已知匹配(他自己的密码)的情况下。即使他不了解它,他也可以简单地使用他已知的密码和已知的哈希来强制盐和盐算法。
哈希算法也是如此。只有少数完整的哈希函数,任何有能力的管理员都可能会使用其中一个。
密码学的一个前提是所有关于所用算法的信息都被认为是公开的。您不应该依赖攻击者来破坏您的系统,因为您使用的是一种模糊的算法来处理事务,因为与在这样的受损数据库上强制使用密码的代价相比,强制每个哈希算法非常便宜。 / p>
如果您将程序分发给用户,他们可以通过反汇编或调试来确切地弄清楚它是如何散列的。如果它是服务器程序,他们可能会遇到其他一些漏洞,或者他们可以购买/窃取/获取您的软件,或者其他什么。我甚至会说所有好的加密软件都是开源的:即使整个世界都知道它是如何工作的,它仍然不会破碎。
你所依赖的是默默无闻的安全感。很多人和公司都将此作为保护其产品的一种方法。我记得的最后一件大事是赛门铁克PCAnywhere软件的源代码被盗。你可能还记得那是怎么回事。故事的道德是,如果没有人知道它是如何工作的话就不安全,如果每个人都知道它是如何工作的话它是安全的(并且它的密码学声音很好)。
答案 1 :(得分:0)
对于受到威慑的黑客来说,对代码进行逆向工程并不会太难,一旦发生这种情况,您的每一个密码现在都会受到损害。
您应该使用经过验证的散列技术。举例来说,类似于bcrypt算法。如果要哈希密码,请执行以下步骤:
执行以下操作:
hash = ""
for(numberOfHashRounds)
{
hash = SHA256(hash + salt + password)
}
然后将哈希值与使用的盐和成本一起存储。当您需要验证时,请对存储的盐和成本执行相同操作。随着计算机变得更快,您可以提高算法的成本。尝试并获得它,这样你的哈希计算需要大约500毫秒,或者只要你愿意牺牲它。
这是安全的,因为饼干必须为每种盐生成彩虹表,并执行相同数量的轮次。即使使用GPU阵列破解也需要几十年的时间。
如果你想在此基础上添加模糊处理,请继续,不要在此过程中破坏算法的安全性。