15.4. DES、 Blowfish、 MD5， 以及 Crypt
上一页 | 第 15 章 安全 | 下一页

## 15.4. DES、 Blowfish、 MD5， 以及 Crypt

部分重写、更新来自 Bill Swingle.

UNIX® 系统上的每个用户都有一个与其帐户关联的口令。 很显然， 密码只需要被这个用户和操作系统知道。 为了保证口令的私密性， 采用了一种称为 “单向散列” 的方法来处理口令， 简单地说， 很容易从口令推算出散列值， 反之却很难。 其实， 刚才那句话可能并不十分确切： 因为操作系统本身并不 真的 知道您的口令。 它只知道口令 经过加密的形式。 获取口令对应 “明文” 的唯一办法是采用暴力在口令可能的区间内穷举。

不幸的是，当 UNIX® 刚刚出现时，安全地加密口令的唯一方法基于DES， 数据加密标准 ( the Data Encryption Standard )。 于是这给那些非美国居民带来了问题， 因为 DES 的源代码在当时不能被出口到美国以外的地方， FreeBSD 必须找到符合美国法律，但又要与其他那些使用 DES 的 UNIX® 版本兼容的办法。

解决方案是把加密函数库分割为两个， 于是美国的用户可以安装并使用 DES 函数库， 而国际用户则使用另外一套库提供的一种可以出口的加密算法。 这就是 FreeBSD 为什么使用 MD5 作为它的默认加密算法的原因。 MD5 据信要比 DES 更安全，因此，安装 DES 更多地是出于兼容目的。

### 15.4.1. 识别您采用的加密算法

现在这个库支持 DES、 MD5 和 Blowfish 散列函数。默认情况下， FreeBSD 使用 MD5 来加密口令。

可以很容易地识别 FreeBSD 使用哪种加密方法。 检查 `/etc/master.passwd` 文件中的加密密码是一种方法。 用 MD5 散列加密的密码通常要比用 DES 散列得到的长一些， 并且以 `$1$` 字符开始。 以 `$2a$` 开始的口令是通过 Blowfish 散列函数加密的。 DES 密码字符没有任何可以用于鉴别的特征， 但他们要比 MD5 短， 并且以不包括 `$` 在内的 64 个可显示字符来表示， 因此相对比较短的、没有以美元符号开头的字符串很可能是一个 DES 口令。

新口令所使用的密码格式是由 `/etc/login.conf` 中的 `passwd_format` 来控制的， 可供选择的算法包括 `des`, `md5` 和 `blf`。 请参考 login.conf(5) 联机帮助以获得更进一步的详情。

上一页 | 上一级 | 下一页
15.3. 确保 FreeBSD 的安全 | 起始页 | 15.5. 一次性口令

本文档和其它文档可从这里下载： ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题，请先阅读 文档，如不能解决再联系 <questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.