运行多次使用sha512哈希函数的好处

Benefits of running sha512 hash function several times

我在出版物上看到过这段代码。生成11次hash有什么好处?因为熵,它比一个更安全吗?

var hash = sha512(salt+":"+user+":"+passwd);
for(i = 0; i < 10; i++)
    hash = sha512(salt+":"+user+":"+passwd);

在攻击者获得对包含散列密码的数据库的访问权的情况下更安全。

对其进行多次哈希处理将使攻击者的速度减慢一个与哈希迭代次数成线性关系的因子,同时尝试使用暴力攻击从哈希中猜测普通密码。

从这个角度来看,我会说 10 是一个相当小的数字,如果您担心这种情况(攻击者获得密码数据库的访问权限),我想迭代次数比 10 次更好(比如说 1000)。

编辑:我刚刚注意到在问题中重复哈希总是使用原始密码,而不是像下面的代码那样一遍又一遍地哈希它

var hash = sha512(salt+":"+user+":"+passwd);
for(i = 0; i < 10; i++)
    hash = sha512(salt+":"+user+":"+hash);

我的回复是指这种情况(一遍又一遍地散列哈希)而不是问题中提到的代码。

此示例中的最终散列值并不比散列一次更安全(甚至也没有任何不同)。从提供的代码中我能看到的唯一效果是它需要更长的时间。

关于重复散列的一些链接、评论和其他答案,这仅在后续散列函数应用于前一个散列的 output 时才有意义。提问者的例子只是简单地对相同的数据进行哈希处理,产生相同的结果。

此代码可能更有效:

var hash = sha512(salt+":"+user+":"+passwd);
for(i = 0; i < 10; i++)
    hash = sha512(salt+":"+user+":"+passwd+":"+hash);