http://www.fanqiang.com/a5/b1/20010430/123100_b.html
FreeBSD 的DES, MD5, 以及 Crypt
不詳 (2001-04-30 12:31:00)
Contributed by Garrett Wollman
24 September 1995.
緣起
為了保護 在 UNIX 系統 password 的安全性,在傳統上 password 用了許
多方法去擾亂,使其不被容易的顯露出來。由貝爾實驗室第七版的 Unix開始,
password 用了"one-way hash fuction" 弗K。這仍N是說,
passowrd 被上述的方法轉換使原來的 password 不能被解出,
除非使用暴力方法搜尋所有可能的 password。不幸地,唯一可以由 AT&T
得到的安全的方法是 DES (Data Encryption Standard)。
這對商業版的販售商的影響不大,然而對 FreeBSD 這種原始碼自由公開的作業系統
卻是一個很嚴重的問題,因為許多國家的政府限制 DES 和其他弗K軟體出口。
因此, FreeBSD 小組面對一個兩難問題:我們如何提供在美國以外的所有
UNIX 系統的相容性而不會違法?我們決定採用雙軌制:
我們希望將發行的版本只包含一個非正式的 password 擾亂器,
並提供一個分開來的附巨&w(DES-based password hash)。
這個將 password 擾亂的函式從 C 的函式庫分離到另一個函式庫叫`libcrypt'
而其中 C 的函式叫`crypt'。在 FreeBSD 1.x 和一些2.0的試用版中,
這個非正規的擾亂器使用了一個由 Nate Williams所寫不安全的函式;
往後的的版本中這個函數被使用由 RSA Data Security公司的
MD5 one-way hash fuction 的機制所替代。因為以上這兩個函式都沒有弗K的功能,
所以可以由美國輸出或是輸入到一些國家。
在這期間,DES-based 密碼 hash 函式依然在進行中,首先一個在美國
以外發展的`crypt' 函式被輸入,因此美國版與非美國版有了一致性。
然後,弗K方面的函式庫被修改並拆成兩個,一為 DES `libcrypt'
只包含 one-way password hash,另一個函式庫 `libcipher'
包含真正的弗K函式,這些函式庫之所以被分離出來
,是為了可以容易的取得編譯函式庫的出口執照。
了解你的 `crypt' 方法
分辦 DES-based 或 MD5-based hash 函式所產生的密碼字串是很容易的。
MD5 密碼字串的啟始字元總是`$1$'. 而 DES 密碼字串則沒有任何特殊的字元,
但是這些字串比 MD5所產生的較短,而且被編成64個不包含`$' 的字元,
因此比較短且不含錢字號 的字串就很有可能是 DES 的密碼。
在大部分程式中,要決定你的系統是使用那一個函式庫是相當容易的。
除了那些像是靜態連結的`init'((對那些程式而言,唯一的方法
是用一個已知的密碼去試看看並自己去看)用`crypt' 的程式
靠`libcrypt'所連結的,每一個函式庫都連結到適當的地方。
舉個例子,在使用 DES 的系統中:
$ cd /usr/lib
$ ls -l /usr/lib/libcrypt*
lrwxr-xr-x 1 bin bin 13 Sep 5 12:50 libcrypt.a -> libdescrypt.a
lrwxr-xr-x 1 bin bin 18 Sep 5 12:50 libcrypt.so.2.0 -> libdescrypt.so.2.0
lrwxr-xr-x 1 bin bin 15 Sep 5 12:50 libcrypt_p.a -> libdescrypt_p.a
在一個使用植基於 MD5 函式庫的系統,一樣有連結存在,但是它是連
結到`libscrypt' 而不是`libdescrypt'.