在PBKDF2中,每个密码的盐应该是唯一的,因此使用相同密码的两个用户会得到两个不同的哈希值。
我对盐的想法是用户名和密码的SHA1哈希,因此它对每个用户都是唯一的。
实际上我必须在JavaScript环境中生成PBKDF2哈希。是否保存以显示如何生成salt,因为JavaScript源是纯文本?
答案 0 :(得分:0)
使用用户名作为salt主要是令人满意的,但不能防止多种攻击情形。例如,可以在使用相同算法的两个网站的数据库中比较密码。此外,可以预先生成彩虹表,从而减少折衷后的破解时间。 出于这个原因,应该使用加密PRNG生成盐。如果不可预测的话,让攻击者可以看到随机源的源代码的想法本身就不是问题。有关如何使用javascript生成它,请参阅this question。
答案 1 :(得分:0)
简单地使用随机盐有什么问题?除了你的方法并不需要用散列密码存储盐,我无法想到任何优点。
连接在一起的用户名和密码的哈希应该没问题。由于密码是秘密的,因此用户名和密码的哈希将是不可预测的。但是,正如其他人所提到的,如果有两个网站使用相同的算法,则可能存在安全问题,而使用这些网站的人使用相同的凭据(即查看他们的哈希密码,我们可以告诉他们使用相同的密码每个网站)。添加您网站的域名应该解决这个问题。例如(+是连接):
salt = hash(domain + username + password)
所有这些,我强烈建议使用加密随机数生成器生成盐,因为它是生成盐的标准做法。