原文:https://wiki.archlinux.org/index.php/SHA_password_hashes
水平不行,将就着看,欢迎指正!
翻译:
SHA密码散列算法
目录
1.为什么应该使用SHA-2?
2.需要修改的文件
2.1修改/etc/pam.d/passwd
2.2修改/etc/default/passwd
2.3修改/etc/login.defs
3.收尾阶段
1.为什么应当使用SHA-2?
在linux发行版中,登陆密码通常用MD5算法散列,并保存在/etc/shadow文件中。而碰撞漏洞严重损坏了MD5散列函数的安全性。这并不意味着MD5密码散列不安全,但推荐使用一个更加安全、健壮且没有已知弱点的算法(例如SHA),以减少漏洞。
下列教程使用sha512散列函数,NSA推荐在Red Hat Enterprise Linux 5 中使用该函数。另外,SHA-2包含3个附加散列函数,分别为244,256和384位。
警告:超小型终端fgetty不支持sha512密码散列。在fgetty中启用sha512会将你锁住。Arch Linux的默认tty管理器agetty和小型tty管理器mingetty都支持sha512。
2.需要修改的文件
注意:要修改本节提到的文件,你必须具有root权限。
2.1.修改/etc/pam.d/passwd
/etc/pam.d/passwd默认应该如下所示:
#%PAM-1.0
#password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
#password required pam_unix.so md5 shadow use_authtok
password required pam_unix.so md5 shadow nullok
用文本编辑器打开/etc/pam.d/passwd,将未注释行中的md5替换成sha512。在未注释行末尾加上rounds选项。
round=N选项有助于提升key strengthening(不知道怎么翻译了,囧...)。rounds的值比哈希(散列)函数的选择对安全性的影响要大。例如,rounds=65536意味着:要从/etc/shadow中的哈希值中获取一个密码,攻击者必须计算65536个散列值。因此攻击者将被延迟65536倍。这同样意味着每次登陆时你的电脑必须计算65536个哈希值,但即使在慢速电脑上这不需要1秒钟。如果你不使用rounds选项,glibc将把sha512的rounds值设置为默认值5000。此外,rounds默认值可以在sha512-crypt.c中找到。
注意:对/etc/pam.d/passwd中密码选项更详细的解释,请查看pam man page。
进行上述更改之后,你的/etc/pam.d/passwd应如下所示:
#%PAM-1.0
#password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
#password required pam_unix.so md5 shadow use_authtok
password required pam_unix.so sha512 shadow nullok rounds=65536
2.2.修改/etc/default/passwd
默认的/etc/default/passwd文件应该如下所示:
# This file contains some information for
# the passwd (1) command and other tools
# creating or modifying passwords.
# Define default crypt hash
# CRYPT={des,md5,blowfish}
CRYPT=des
# Use another crypt hash for group passwowrds.
# This is used by gpasswd, fallback is the CRYPT entry.
# GROUP_CRYPT=des
# We can override the default for a special service
# by appending the service name (FILES, YP, NISPLUS, LDAP)
# for local files, use a more secure hash. We
# don't need to be portable here:
CRYPT_FILES=blowfish
# sometimes we need to specify special options for
# a hash (variable is prepended by the name of the
# crypt hash).
BLOWFISH_CRYPT_FILES=5
# For NIS, we should always use DES:
CRYPT_YP=des
上例种的第七行,将
CRYPT=des
修改为
CRYPT=sha512
注意:不清楚使用/etc/shadow机制之后是否仍然需要作如此修改。
2.3.修改/etc/login.defs
根据man手册中的passwd页,当使用/etc/shadow机制来保存密码时,需要修改/etc/login.defs文件。添加如下行至该文件:
ENCRYPT_METHOD SHA512
3.收尾阶段
即使你改变了加密策略,密码不也不会被自动重新散列。未解决此问题,你必须重新设置所有用户的密码,以便重新散列。
以root权限执行以下命令:
# passwd <username>
<username>是要修改密码的用户名。然后重新输入新的密码,该密码将用SHA-2函数重新散列!
以root权限查看/etc/shadow文件,以验证密码确实已被散列。用sha256散列的密码应该是以$5开头的,而用sha512散列的密码会以$6开头。