pbkdf2 是如何工作的?

pbkdf2 是如何工作的?

我试图用 grub 密码进行保护grub2-mkpasswd-pbkdf2,它可以与 centos 7 一起使用,但我无法理解它的一些内容。

每次我使用此命令时,它都会为一个唯一字符串(如 1234)提供不同的哈希密码。

结果就像

grub.pbkdf2.sha512.10000.5A9xxx
grub.pbkdf2.sha512.10000.E18xxx

我的问题是:

当将这些散列密码复制到 10_unix 文件中以及更新 grub 后,这两个散列密码如何工作,以及登录过程如何将我的纯密码与 10_unix 文件中的散列文本进行比较?

我的意思是,它似乎不像 md5() 这样,每次我们使用它时,一个唯一字符串的结果都是相同的。

答案1

PBKDF2是一个盐腌的密码哈希,这意味着除了密码之外,哈希函数还将另一个字符串(salt)作为输入,该字符串是在设置或修改密码时随机生成的。这里的想法是,攻击者无法预先计算与常见密码相对应的哈希值,因为它们也需要盐。此外,如果多个帐户碰巧具有相同的密码,则这种情况并不明显,因为哈希值是随机的。盐作为密码散列的一部分存储,并且为了将明文密码与散列密码进行比较,从散列中读取要使用的正确盐。

与“原始”加密哈希函数(如 MD5 或 SHA-256)相比,PBKDF2 也是迭代的,这意味着它在循环中多次运行底层哈希(至少数千次)。这只是为了使哈希慢点进行计算,增加了通过暴力猜测与哈希值匹配的密码的成本。

在 的情况下grub,哈希的格式似乎是

grub.pbkdf2.sha512。[迭代][盐][哈希]

系统使用的密码哈希值(/etc/shadow,请参阅地穴手册页)也被迭代和加盐,就像任何正确的密码散列一样。

PBKDF2 仅是 CPU 密集型的,并且不使用大量内存。这意味着在 GPU 上进行计算相对便宜。 bcrypt (1999)、scrypt (2009) 和 Argon2 (2015) 等较新的算法也考虑到了这一点,通常建议在新实现中使用 Argon2。

有关密码哈希的更多信息,请参阅 如何安全地散列密码?2018 年,存储密码的推荐哈希是什么:bcrypt、scrypt、Argon2?关于安全。SE。

相关内容