1

好的,所以我明白为什么在散列之前加盐密码是个好主意。问题是,通常人们建议在密码中附加或附加盐,为什么不两者都做呢?

我的想法是,所以如果黑客先生掌握了数据库并想要获取人 x 的密码,他会想,大多数人建议附加或前置盐,所以让我们这样做.. 他生成了一个彩虹表密码+盐的所有组合,并尝试他的运气。如果这不起作用,他会做同样的事情,但盐 + 密码。

为了让攻击变得更加困难,为什么开发人员不更进一步,做'salt + password + salt',或者'reverse(salt) + password + salt',或者你可能会喜欢并开始切割密码/盐,开始在这里和那里放一些盐等等。

黑客能够找到密码的唯一方法是他是否可以访问源代码(了解在散列之前如何将盐编织到密码中)

进一步说明的是,人们建议在按键拉伸时至少进行 1000 次迭代,为什么不进行 1147、1652 等 :)

第二个注意事项,在查看哈希字符串时,是否可以计算出使用的哈希函数?

4

2 回答 2

7

猜测使用盐的方式比暴力破解密码要容易得多,尤其是在攻击者拥有哈希密码数据库和一个已知匹配项(他自己的密码)的情况下。即使他不知道,他也可以简单地使用他已知的密码和已知的哈希来暴力破解加盐和加盐算法。

哈希算法也是如此。只有几个完整的哈希函数,任何有能力的管理员都有可能使用其中之一。

密码学的前提之一是关于所使用算法的所有信息都被假定为公开的。您不应该依赖攻击者无法破坏您的系统,因为您正在使用一种晦涩的算法对事物进行哈希处理,因为与在这样的受感染数据库上暴力破解密码的费用相比,暴力破解每个哈希算法非常便宜。

如果你将你的程序分发给用户,他们可以通过反汇编或调试来准确地弄清楚它是如何散列的。如果它是一个服务器程序,他们可以用其他一些漏洞闯入,或者他们可以购买/窃取/获取您的软件,或其他任何东西。我什至会说所有好的密码软件都是开源的:即使全世界都知道它是如何工作的,但它仍然无法破解。

您试图依靠的是默默无闻的安全性。许多人和公司已将其用作保护其产品的方法。我能记得的最后一个大事件是赛门铁克 PCAnywhere 软件的源代码被盗。你可能还记得结果如何。这个故事的寓意是,如果没有人知道它是如何工作的,那么它是不安全的,如果每个人都知道它是如何工作的(并且它是加密的),那么它就是安全的。

于 2012-06-27T18:02:34.853 回答
0

对于坚定的黑客来说,逆向工程代码不会太难,一旦发生这种情况,你的每一个密码现在都会被泄露。

您应该使用经过验证的散列技术。举个例子,类似于 bcrypt 算法。当您想对密码进行哈希处理时,请执行以下步骤:

  1. 生成足够强的随机盐(16 - 32 字节)
  2. 设置一个哈希成本(15 - 20)(成本越大,哈希越慢越强)
  3. 计算您将执行的哈希轮数(2^cost)

请执行下列操作:

hash = ""
for(numberOfHashRounds)
{
hash = SHA256(hash + salt + password)
}

然后将哈希与使用的盐和成本一起存储。当您需要验证时,对存储的盐和成本执行相同的操作。随着计算机变得越来越快,您可以提高算法的成本。试着得到它,这样你的哈希计算大约需要 500 毫秒,或者只要你愿意牺牲。

这是安全的,因为破解者必须为每种盐生成一个彩虹表,并执行相同数量的回合。即使使用用于破解的 GPU 阵列,这也需要数十年的时间。

如果您想在此之上添加混淆,请继续,只是不要在此过程中破坏算法的安全性。

于 2012-06-27T19:58:32.267 回答