双哈希安全

时间:2009-08-04 02:48:41

标签: security password-encryption

我的第一个问题是,我听说过将字符串哈希2次(例如sha1(sha1(密码))),因为第二个哈希有一个固定的长度,是真的吗?

我的第二个问题是哪个更安全? (var1和var2是2个字符串):

  1. sha1(var1 + sha1(var2))
  2. sha1(var1 + var2)
  3. 如果是第一个,是否值得性能成本?

8 个答案:

答案 0 :(得分:10)

通过对字符串进行两次散列,会增加冲突的风险,这在安全方面是不好的。

不是有无限量的输入导致2 128 可能的输出,你将有2个 128 可能的输入,导致可能小于2 128 < / sup>输出。

在散列之前使用盐和胡椒至少可以使输入无限可能。散列两次会增加脚本的运行时间,并增加冲突的风险,除非您保持无限输入的来源。

答案 1 :(得分:2)

  • sha1(var1 + sha1(var2))
  • sha1(var1 + var2)

两者都不安全。不要重新发明轮子。 HMAC就是为此而设计的;特别是,它采取步骤(填充等)来避免某些散列算法中某些弱点与上述“简单”实现相互影响的问题。

此外,双重哈希对提高安全性没有用。考虑:充其量,您将从一个random-ish值映射到另一个random-ish值。但是,如果存在冲突,则来自第二个哈希值的两个结果值相等,您通过最终的冲突丢失安全性。也就是说,你永远不能以这种方式摆脱碰撞,但你可以获得一次碰撞。

那就是说,现有的preimage攻击可能不能对抗双重哈希......但是!他们可能仍然有效。我没资格说出哪一个,如果你在这里问这个,你可能也不是。当然,碰撞攻击对于今天的MD5来说都是实用的,不受双重散列的阻碍。

最好坚持使用经过数十年分析的成熟算法,因为使用加密技术,制作看起来安全但不安全的东西太容易了。

答案 2 :(得分:0)

我怀疑这会增加任何安全性。它会增加脚本的运行时间,但不会为哈希添加很多安全性。请记住,当有人试图破坏你的哈希时,他们不需要找到var1和var2的确切值,他们只需找到一个导致相同哈希的值。

答案 3 :(得分:0)

我不是密码学方面的专家,但据我所知,除了减慢过程速度之外,你不会多次散列值。因此,如果你散列1000次,你会使攻击(例如字典攻击)慢1000倍,但在散列一次或两次的情况下这是无关紧要的。

答案 4 :(得分:0)

只使用一种盐就可以轻松解决。

有许多大型表包含大量这些哈希值,因此可以毫不费力地解决没有盐的单个哈希值。

添加第二个哈希也无济于事,因为这些表已经存在并且保存了值。

添加到密码中的动态盐将有助于多个哈希值。多个哈希值并没有真正增加它。

答案 5 :(得分:0)

我对此的感觉是你正在建造一个带钢门的砖墙,但其他墙壁都是用胶合板制成的。换句话说,您可以在哈希密码中注入尽可能多的安全性,但仍然有更容易的方法来破解您的系统。我认为采取广泛的安全方法更好,而不是过多地担心这样的事情。

答案 6 :(得分:0)

var1 + var2在预期的情况下是否会相同?我的意思是,在这种情况下,第一个命题应该没问题,因为你会避免散列碰撞。关于值得付出代价,这是一个你应该回答的问题。避免碰撞是值得的。

关于sha算法,它应该真正地加扰结果。因此,多次应用它不应该有更好的结果,也不应用于“更随机”的输入应该会产生更好的结果。

答案 7 :(得分:0)

多次散列字符串会使字典攻击时攻击者的任务变得复杂,使其“暴长”的时间更长。你的第一个问题并不清楚,但是多个哈希值的安全性并不低,因为第二个哈希值具有固定的长度。

但是比多哈希更重要的是,使用salt对于提高安全性至关重要。

关于你的第二个问题,我会说说两个中哪一个是最安全的并不是很直接的,我认为选择2就足够了。

相关问题