SHA 哈希

出自 ArchWiki
(重定向自 SHA 密码哈希

安全散列算法 (SHA) 是一组 哈希函数,常用于各种 目的

SHA 哈希函数在 Arch Linux 中的一些应用示例包括:

SHA 密码哈希

默认情况下,Arch Linux 从 4.1.4.3-3 版本的 shadow 软件包(参见 bug 13591)到 4.14.0 版本(参见 yescrypt)使用 SHA-512 作为密码哈希算法。它取代了较旧的 MD5 哈希函数,后者已被发现存在 碰撞漏洞。有关更多信息,请参见 wikipedia:Secure Hash Algorithms#Comparison of SHA functions

配置

SHA-512 密码哈希可以通过 rounds=N 选项进行配置,以提高 密钥拉伸。例如,rounds=65536 意味着攻击者必须对他们针对 /etc/shadow 密码文件中的哈希进行测试的每个密码计算 65536 个哈希值。

因此,攻击者将被延迟 65536 倍。这也意味着您的计算机每次登录时都必须计算 65536 个哈希值,但即使在较慢的计算机上,这也不到一秒钟。

自从 pam 1.6.0 版本发布以来,可以通过编辑 /etc/login.defs 文件并为 SHA_CRYPT_MAX_ROUNDS 参数设置一个值,或者编辑 /etc/pam.d/passwd 并添加具有适当值的 rounds 来配置 SHA-512 rounds 选项。[1]

如果您不使用 rounds 选项,PAM 将使用与 /etc/login.defs 中注释的 5000 rounds 示例不同的默认值

例如

/etc/pam.d/passwd
password	required	pam_unix.so sha512 shadow nullok rounds=65536
警告: 在上面的示例中显式配置哈希(如 sha512)会覆盖后续 passwd 调用的默认 yescrypt 哈希。

有关 /etc/pam.d/passwd 密码选项的更详细说明,请查看 pam_unix(8) 手册页。

用法

即使您已更改加密设置,您的密码也不会自动重新哈希。要解决此问题,您必须重置所有用户密码,以便可以重新哈希它们。

以 root 用户身份执行以下命令:

# passwd username

其中 username 是您要更改密码的用户的名称。然后重新输入他们当前的密码,它将被重新哈希。

要验证您的密码是否已重新哈希,请以 root 用户身份检查 /etc/shadow 文件。使用 SHA-256 哈希的密码以 $5 开头,使用 SHA-512 哈希的密码以 $6 开头,yescrypt 哈希以 $y 开头。