精華區beta FreeBSD 關於我們 聯絡資訊
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'.