8.4. DES, MD5 和 Crypt

Parts rewritten and updated by Bill Swingle , 21 March 2000.

在 unix 系統上的每個用戶有一個與帳號相關聯的密碼。看起來這些密碼只有用 戶和作業系統知道。為了確保這些密碼的秘密,通過一種叫做 one-way hash 的方式來 加密,能被很容易地加密,但不能解密。換句話說,以前告訴大家通常不是真的: 作業系統通常並不真正知道密碼。只知道密碼的加密形式。

加密密碼的唯一安全方式是以 DES 為基礎的資料加密標準。這對於 US 用戶來說沒有什 麼問題,但 DES 的源代碼不允許被輸出到 US 以外的國家,FreeBSD 必須找到一個既遵守US 法律,又要與所有使用 DES 的 unix 相容的方法。

解決方法是分解加密庫以至於 US 用戶可以安裝 DES 庫和使用 DES,而國際用戶也有一 個加密方法。這就是 FreeBSD 為什麼使用 MD5 來作為默認的加密方法。MD5 被認為要比 DES 更安全,所以使用 DES 主要是為了相容性的原因。

8.4.1. 重新配置 Crypt 機制

可以很容易地設置 FreeBSD 使用哪種加密方法。檢查 /etc/master.passwd 文件中的加 密密碼是一種方法。用 MD5 加密的密碼通常要比用 DES 加密的密碼長,通常以$1$字元作為 起始。DES 密碼字元沒有任何鑒別特徵,但要比 MD5 密碼短,通常是以64 位元字元的字 母表來編碼的,不包括$字元,所以通常一個不以$符號開始的很可能是 DES 密碼。 也可以通過區別庫來鑒別密碼。DES 庫能夠鑒別 MD5 密碼,使用 MD5 來檢查用哪種方法 加密的密碼,然後用 DES 加密剩下的。之所以可以這樣做,是因為 DES 庫也包括 MD5。但是, 倒過來就不行了,所以 MD5 庫不能鑒別用 DES 加密的密碼。

鑒別當前系統使用的是哪個庫也是很容易的。任何使用 cryptpplication> 的程式是與 libcrypt 連接在一起的,每一種類型的庫是與適當的執行程式有一個符號連接的。例如,在使用 DES 的系統上:

    % ls -l /usr/lib/libcrypt*
    lrwxr-xr-x  1 root  wheel  13 Mar 19 06:56 libcrypt.a -> libdescrypt.a
    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 的聯機手冊瞭解更多資訊。