SHA 哈希
安全散列算法 (SHA) 是一组 哈希函数,常用于各种 目的。
SHA 哈希函数在 Arch Linux 中的一些应用示例包括:
- 验证 Arch Linux ISO 和 软件包 的完整性,
- 使用 git 锁定软件版本,
- 保护和验证加密密钥,例如 磁盘加密,
- 文件系统的数据完整性和资源管理,例如 btrfs,以及
- 密码验证,在 Security#Password hashes 和本文中针对 SHA 哈希进行了介绍。
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
开头。