資訊與網路安全技術 第 十三章 用戶認證系統  上一頁      下一頁

 

13-3 帳戶密碼的加密與雜湊

內容:

  • 13-3-1 密碼處理:單向加密

  • 13-3-2 密碼處理:單向雜湊函數

  • 13-3-3 密碼處理:一次密碼

  • 13-3-4 密碼安全與破解

         將使用者所輸入的密碼經過特殊處理之後,再儲存於系統檔案裡;至於密碼處理並不侷限於隱密性功能而已,也可以作為系統與使用者之間的認證工具,通常我們將處理過的密碼稱為『共享密鑰』或『主密鑰』。又隨著主密鑰可能扮演的角色,也會牽涉到密碼的處理技巧;譬如,若主密鑰扮演加密鑰匙的功能時,則必須依照所採用的加密演算法,去決定主密鑰的長度,以下介紹幾種密碼的處理技巧。

13-3-1 密碼處理: 單向加密

所謂『單向加密演算法』(One-way Encryption係利用加密技巧來達到雜湊演算法的功能;做法是將密碼當作加密鑰匙,以某一固定的數值(大多取 0)作為明文輸入,如此連續加密多次所輸出的密文既是主密鑰。如Unix 就是採用 DES 加密演算法處理密碼的隱密工作,它將使用者所輸入的密碼作為加密鑰匙(8 7 位元的 ASCII 字元,即 56 個位元),並以 64 位元的 “0” 作為明文,連續重複加密 25 次後所得到的密文,作為密碼的儲存(或主密鑰,如圖 13-6 (a))。經過 25 次加密處理之後,要破解密文的確非常困難,但是經過 25 次運算相對耗費許多系統時間;另一種改進方法是加入『鹽』(Salt)的做法(如圖 13-6 (b) 所示),將『鹽』當作明文的輸入,再以密碼為加密鑰匙計算出儲存密碼;如果針對每一個使用者給予不同數值的『鹽』,想破解它可就不容易,如此,可以減少重複計算的次數,以提高系統效益。

13-6 單向加密法的密碼處理

13-3-2 密碼處理: 單向雜湊函數

除了利用加密方法來達到隱密性功能外,採用『單向雜湊函數』(One-way Hash Function也是很普遍的方法;最常見的演算法是 MD4MD5 SHA-1 等方法。簡單的做法是將密碼直接經過演算法計算後,所得到的雜湊碼作為密文儲存(或主密鑰);也可以將密碼加入『鹽』之後,再經過雜湊演算法處理,如圖 13-7 (a) (b) 所示。

13-7 單向雜湊演算法的密碼處理

13-3-3 密碼處理: 一次密碼

許多 Internet 網路應用(如 TelnetFTP)是延伸 Unix/Linux 系統而來。早期 Unix 系統是被設計成多人使用環境,使用者可於系統的主控台或終端機上登入。隨著網路的普及,使用者也可以透過網路登入系統(遠端登入)。在這種情況之下,使用者所登入的電腦(終端機或工作站)並不處理密碼,而祇將密碼以明文方式傳送給系統主機,如此說來,處理密碼完全是主機的工作,不需要與工作站協議如何處理密碼,所以工作站與主機之間就沒有完整的認證協定可依循。

如此說來,某些網路應用上還是需要以明文方式傳遞密碼,盜取者想要竊取密碼是一件容易的事。更何況目前無線網路風行,攻擊者並不需要網路連線,只要一台訊號接收器便可輕易收集到所希望的密碼。為了克服密碼明文傳送的方法,唯有將密碼使用的次數減到最低,所謂的『一次密碼』(One-time Password,顧名思義,每一個密碼祇使用一次。

13-8 一次密碼的運作程序

13-8 為一次密碼產生的方法;使用者擁有一張小卡片或計算機,其中內建了一個預先程式化的認證函數、以及持有者的序號。當使用者欲登入系統時必須使用這張卡片,當輸入卡片的密碼之後,才會輸出一個當次使用的密碼,此密碼的產生是依據時間與一個秘密函數或序號進行某一種運算。使用者由卡片密碼與所計算出來的數字組合成為一個通行的密碼,然而這些計算方式必須與主機的計算方式相同,如此一來,主機與使用者之間每次認證時便可採用不同的密碼(運作方式如圖 13-8 的訊號次序)。這種密碼產生器的內部演算法是不會公開的,目前使用較普遍的是 Security Dynamics 公司所發行的 SecureID 卡。

另一種做法是類似密碼簿的方法。使用者持有一個 IC 卡,卡內建有一序列的密碼順序,係由主機系統下載而來的,所以主機與 IC 卡儲存相同的密碼序列。當使用者登入系統時,便依照密碼系列的順序來選擇密碼(電腦會自動選取),選用過的密碼便將其刪除;使用者也是利用卡片的密碼與選用的密碼組合成一個祇使用一次的通行密碼,目前使用較普遍的密碼簿是 Bellcore 公司所發行的 S/Key 卡片。

13-3-4 密碼安全與破解

密碼是進入系統最基本的檢視工具,無論採用電子數位憑證、或者其它實體的物件來認證身份(如生物檢測或IC 卡),都需要輸入密碼來配合;並且密碼也是產生使用者『主密鑰』的主要依據,由此可見密碼的重要性。一般密碼是由使用者隨意選出,當然不會輕易告訴他人,但是使用者在使用密碼時,常犯有下列幾點錯誤:

  • 輸入密碼時,被它人窺視出密碼內容。

  • 將密碼儲存於某一個檔案內。

  • 密碼是由有意義的數字(如生日、結婚紀念日)所組成。

  • 被他人詐取密碼。

  • 怕自己忘記密碼,而將密碼書寫於紙上。

  • 為了使用方便,不常變更密碼。

針對目前許多應用程式都是架設在網頁系統上,入侵者只要植入一個偽裝的程式在瀏覽器上,一旦使用者執行該程式時,入侵程式會出現要求輸入密碼,一般使用者會誤認為是應用程式所要求輸入的,便在不知覺的情況下輸入密碼;該入侵程式蒐集到密碼之後,也暗地裡傳回攻擊者手上,此攻擊法又稱為『社交攻擊法』(Social Attack。類似社交攻擊法來取得密碼的技巧不勝枚舉,總而言之,防範密碼被破解的最根本方法,除了提高使用者自己的警覺心外,別無它法,終究不能完全依賴系統的防護。接下來,介紹幾種系統防範密碼被破解的方法。

【(A)線上密碼猜測】

除非安全性較高的系統,否則一般系統都不會刻意將使用者的『帳戶名稱』隱藏起來;再說,如果系統故意隱藏帳戶名稱,攻擊者欲盜取得該訊息也不是困難的事;由此可見,唯有密碼才是真正的防護線。攻擊者會試著利用帳戶名稱,再嘗試各種可能出現的密碼來進入系統;當然,攻擊者還未猜測密碼之前,會先蒐集使用者的各種訊息,譬如,出生日期、結婚日期、子女出生日期、子女名字、配偶生日、等等,再依照該使用者的個性猜測可能使用的密碼。雖然這種方法不是非常聰明,但它的成功率確是非常的高,這種方法又稱為『字典攻擊法』(Dictionary Attack

一般系統為了防範線上密碼猜測,都會限制密碼的輸入次數,也會限制密碼最短的字元數;如果使用者連續輸入幾次(一般都設定 3 次)錯誤的密碼,系統便會自動關閉該使用者(帳戶名稱)的登入。關閉之後,如果僅限制再登入的時間間隔,只要入侵者有夠耐心的話,還是有可能入侵成功;因此,許多系統要求管理員重新開啟帳戶之後,使用者才可以再登入。當然,系統管理員可詢問使用者是否有從事不正常登入的事實,從中可以判斷出是否有被入侵的現象。

【(B)離線密碼猜測】

無論如何,使用者的密碼還是必須儲存於系統之內,雖然儲存的密碼都會經過特殊處理(加密或雜湊演算),但這些處理技術大多是公開的;攻擊者只要取得密碼檔案,再用已知的處理方法,要尋找出原來密碼明文也並非不可能。再說,一般主機的系統檔案也無法完全隱藏,攻擊者欲找出密碼檔案的儲存位置並不難。也就是說,離線密碼猜測是攻擊者由密碼密文,以及處理密碼的演算法中,猜測出密碼明文的方法。雖然密碼是不定長度並且可能是一些無意義的字串,但如果配合社交攻擊法的猜測密碼明文,也是一種值得嘗試的攻擊法。

雖然克服離線密碼猜測最根本的關鍵在於密碼的處理過程,但隨著應用系統的特性,對於密碼的處理方式也有不同的做法,以下介紹幾種密碼處理方法。

主講人:粘添壽博士

 

資訊與網路安全技術