假设salt是随机的,高熵,长字符串和散列是sha512
或bcrypt
,
为什么 hash(password + perUserSalt)
被认为不够?
这个问题源于在阅读作者陈述
的PHP的新password hashing API RFC之后哈希(密码+盐)=它不好
答案 0 :(得分:0)
多年前,通常会将这样的密码哈希存储在数据库中,例如:
$hashedPassword = MD5($password . $salt);
硬件变得更快,并且已知的快速哈希函数(如MD5,SHA-1)以及SHA-512可能会被暴力破坏得太快。现在[2012]可以使用通用硬件来计算8 Giga MD5 values,用500,000个单词来强制整个英语词典,你只需要几分之一毫秒!
这就是为什么密钥派生函数像BCrypt和PBKDF2发明的原因。它们具有成本参数并多次重复散列(成本因子决定了迭代次数)。 每次迭代都会使用原始的来计算一个新的哈希值,这就是为什么你必须将盐分别传递给函数并且之前无法连接它的原因:
$hashedPassword = Bcrypt($password, $salt);
链接文章或者想要解释现在单个哈希计算是不够的,或者它希望在将哈希值传递给哈希函数之前显示盐不能与密码连接。