很多哈希迭代:每次都添加盐吗?
我已经使用了无盐的md5 /
sha1很长时间了,但是由于这种方法并不真正安全(随着时间的流逝,它变得越来越不安全),我决定改用盐腌的sha512。此外,我想通过使用许多迭代(例如100)来减慢哈希的生成。
我的问题是我应该在每次迭代中添加盐还是在开始时仅添加一次。这是两个可能的代码:
// some nice big salt$salt = hash($algorithm, $salt);
// apply $algorithm $runs times for slowdown
while ($runs--) {
$string = hash($algorithm, $string . $salt, $raw);
}
return $string;
// add some nice big salt$string .= hash($algorithm, $salt);
// apply $algorithm $runs times for slowdown
while ($runs--) {
$string = hash($algorithm, $string, $raw);
}
return $string;
我首先想使用第二个版本(添加一次),但是随后发现每次添加盐的一些脚本。
因此,我想知道是否每次都添加它会增加哈希值的强度。例如,攻击者是否有可能找到某种聪明的方法来创建100timesSha512函数,而该方法比仅执行sha512
100次要快得多?
回答:
简而言之:是的。以第一个示例为例…如果在不添加原始数据的情况下将其反馈给自身,则哈希函数可能会失去熵(我现在似乎找不到引用,我会继续寻找)。
根据记录,我多次支持哈希。
花费500毫秒才能生成的哈希对于您的服务器而言并不太慢(考虑到生成哈希通常不会完成绝大多数请求)。但是,花费这么长时间的哈希将显着增加生成彩虹表所需的时间…
是的,它确实暴露了DOS漏洞,但是它还可以防止暴力攻击(或至少使攻击速度过慢)。绝对需要权衡,但从某些方面来说,收益会超过风险。
整个过程的参考(更像是概述):重点加强
至于退化的碰撞,到目前为止,我唯一能找到的就是这种讨论。
有很多结果。如果您想要更多,请使用Google hash stretching
…那里有大量的有用信息…
以上是 很多哈希迭代:每次都添加盐吗? 的全部内容, 来源链接: utcz.com/qa/400115.html