在迭代中使用多个哈希输出?

时间:2018-02-06 19:05:51

标签: algorithm hash

使用其他哈希算法的输出作为下一个哈希迭代的输入是否存在已知或已知的弱点?

当然不建议使用双重散列,但这与双重散列不同。

示例:

我接受“秘密”输入,并分别用SHA256,SHA384和RIPEMD160散列它。然后我将每个输出组合成一个长字符串,用作SHA512哈希的输入。然后,我反复重复这个过程多次。

在我看来,这样做会大大扩展SHA512输入的长度,并且实际上更加粗暴无比。

此外,我考虑使用第四个哈希函数只是为了生成一个值,然后可以用它来改变组合输入字符串的长度,可能会以不可预测的方式丢弃几个字节,这样输入就不是不变的大小。我不完全确定这会有什么好处。

思想?

1 个答案:

答案 0 :(得分:0)

这个问题的答案在很大程度上取决于攻击情形。

  

当然不建议使用双重散列,但这与双重散列不同。

我想说:不!如果您使用哈希函数存储密码,如果您使用多轮(对第n轮的输出作为输入,则对商店的攻击将更难)圆n + 1)。比特币作为另一个例子使用2遍(见herehere)。有关其他信息,请参阅Why hashing twice?

  

可能以不可预测的方式丢弃几个字节,因此输入不是一个恒定的大小。我不完全确定这会有什么好处。

这抵消了哈希函数的设计方式。您希望该函数使用相同的输入生成相同的输出。解除这种关系基本上会破坏该功能的所有用途。您可以使用随机数生成器。另请参阅:Does the MD5 algorithm always generate the same output for the same string?Is sha-1 hash always the same?

  

在我看来,做[...]基本上使得暴力更加不可行。

引用的陈述是正确的,但推理是有缺陷的。它使暴力更难,因为攻击者必须计算4个函数而不是一个。并且她不能使用彩虹表,因为它们不是为您的设置生成的。

疯狂猜测:如果您使用上述设置来存储和验证密码,请不要这样做。使用PBKDF2或bcrypt。见Password Storage Cheat Sheet