FreeBSD handbook中文版 10 安全(8) 10.4 DES, MD5 和Crypt 在unix 系统上的每个用户有一个与他们的帐号相关联的密码。看起来这些密码只有用 户和操作系统知道。为了确保这些密码的秘密,他们通过一种叫做one-way hash 的方式来 加密,它们能被很容易地加密,但不能解密。换句话说,以前我们告诉你的通常不是真的: 操作系统通常并不真正知道密码。它只知道密码的加密形式。 加密密码的唯一安全方式是以DES 为基础的数据加密标准。这对于US 用户来说没有什 么问题,但DES 的源代码不允许被输出到US 以外的国家,FreeBSD 必须找到一个既遵守US 法律,又要与其他使用DES 的unix 兼容的方法。 解决方法是分解加密库以至于US 用户可以安装DES 库和使用DES,而国际用户也有一 个加密方法。这就是FreeBSD 为什么使用MD5 来作为默认的加密方法。MD5 被认为要比DES 更安全,所以使用DES 主要是为了兼容性的原因。 10.4.1 重新配置你的Crypt 机制 可以很容易地设置FreeBSD 使用哪种加密方法。检查/etc/master.passwd 文件中的加 密密码是一种方法。用MD5 加密的密码通常要比用DES 加密的密码长,通常以$1$字符作为 起始。DES 密码字符没有任何鉴别特征,但它们要比MD5 密码短,通常是以64 位字符的字 母表来编码的,它不包括$字符,所以通常一个不以$符号开始的很可能是DES 密码。 也可以通过区别库来鉴别密码。DES 库能够鉴别MD5 密码,使用MD5 来检查用哪种方法 加密的密码,然后用DES 加密剩下的。之所以可以这样做,是因为DES 库也包括MD5。但是, 倒过来就不行了,所以MD5 库不能鉴别用DES 加密的密码。 鉴别你当前系统使用的是哪个库也是很容易的。任何使用crypt 的程序是与libcrypt 连接在一起的,每一种类型的库是与适当的执行程序有一个符号连接的。例如,在使用DES 的系统上: % ls -l /usr/lib/libcrypt* lrwxr-xr-x 1 root wheel 13 Mar 19 06:56 libcrypt.a -> libdescrypt.a 第11 页FreeBSD 使用手册 lrwxr-xr-x 1 root wheel 18 Mar 19 06:56 libcrypt.so.2.0 -> libdescrypt.so.2.0 lrwxr-xr-x 1 root wheel 15 Mar 19 06:56 libcrypt_p.a -> libdescrypt_p.a 在使用MD5 库的系统上,同样的连接也会出现,但目标库是libscrypt 而不是 libdescrypt。如果你安装了DES 用的crypt 库libdescrypt,哪个密码格式将被用作新的密 码可以通过在/etc/login.conf 中设置passwd_format 来控制,要么使用DES,要么使用MD5。 看看login.conf 的联机手册了解更多信息。 10.5 S/Key S/key 是基于单向hash 功能的一次性密码管理方式。FreeBSD 为了考虑兼容性,就使 用MD4 hash 函数,但其它系统则使用MD5 和DES-MAC。从1.1.5 版开始,S/key 已经成为