軟件保護思想催生USB Key
基於USB Key的身份認證技術是一種比普通的“用戶名+口令”方法更安全,而又比生物特征身份識別技術更低廉的解決日益嚴峻的身份識別問題的方法。本文介紹了在Linux環境下建立這一身份認證系統的原理和方法。
全球信息安全解決方案提供商賽孚耐信息技術公司(SafeNet Inc.)今年3月底發布了《2004年度全球密碼調查報告》,結果顯示:50%的員工仍將他們的密碼記錄下來;超過三分之一的被調查者與別人共享密碼;超過80%的員工有3個或更多密碼;67%的被調查者用一個密碼訪問5個或5個以上的程序,另有31%訪問9個或更多程序。這是目前密碼管理狀況堪憂的一個證明。從安全角度考慮,我們很容易理解和接受密碼。不過,隨著密碼應用范圍的增多,密碼被忘記、丟失、偷聽、竊取的幾率也在增加。隨著企業信息數據的增多和重要性加強,需要更好的技術來保證密碼的安全。身份識別目前主要有三種手段:最常見的是使用用戶名加口令的方式,當然這也是最原始、最不安全的身份確認方式,非常容易由於外部洩漏等原因或通過口令猜測、線路竊聽、重放攻擊等手段導致合法用戶身份被偽造; 第二種是生物特征識別技術(包括指紋、聲音、手跡、虹膜等),該技術以人體惟一的生物特征為依據,具有很好的安全性和有效性,但實現的技術復雜,技術不成熟,實施成本昂貴,在應用推廣中不具有現實意義;第三種也是現在電子政務和電子商務領域最流行的身份方式――基於USB Key的身份認證系統。
軟件保護思想催生USB Key
USB Key 這個概念最早是由加密鎖廠家提出來的,加密鎖是用來防止軟件盜版的硬件產品,加密鎖的概念是使安裝在計算機內的應用程序脫離加密鎖硬件無法運行來達到保護軟件不被盜版的目的。此後,隨著電子商務和PKI應用的興起,數字證書作為確認用戶身份和保護用戶數據有效手段越來越被人們所接受。然而數字證書實質上表現為帶有用戶信息和密鑰的一個數據文件,如何保護數字證書本身又成為PKI體系中最薄弱的環節。數字證書可以保存在各種存儲介質上,如軟盤、硬盤等。國內CA早期頒發的數字證書都是以軟盤的形式發放,或者由用戶從網絡上下載,然後導入到系統中保存在硬盤上。然而,用軟盤保存數據是非常不可靠和不安全的,軟盤雖然便於攜帶,卻非常容易損壞,而用硬盤保存數據雖然不容易損壞,但是不便於攜帶,更致命的是不論用硬盤還是用軟盤保存數字證書都非常容易被復制或被病毒破壞。雖然一般數字證書都帶有密碼保護,然而一旦證書被非法復制,整個安全系統的安全性就降低到僅僅靠密碼保護的級別。於是,專門用於存儲秘密信息的USB Key就很自然地成為數字證書的最佳載體。
USB Key 廠家將USB Key與PKI技術相結合,開發出了符合PKI標准的安全中間件,利用USB Key來保存數字證書和用戶私鑰,並對應用開發商提供符合PKI標准的編程接口,如PKCS#11和MSCAPI,以便於開發基於PKI的應用程序。由於USB Key 本身作為密鑰存儲器,其自身的硬件結構決定了用戶只能通過廠商編程接口訪問數據,這就保證了保存在USB Key中的數字證書無法被復制,並且每一個USB Key都帶有PIN碼保護,這樣USB Key的硬件和PIN碼構成了可以使用證書的兩個必要因子。如果用戶PIN碼被洩漏,只要保存好USB Key的硬件就可以保護自己的證書不被盜用,如果用戶的USB Key丟失,獲得者由於不知道該硬件的PIN碼,也無法盜用用戶存在USB Key中的證書。與PKI技術的結合使USB Key的應用領域從僅確認用戶身份,到可以使用數字證書的所有領域。
Linux PAM工作原理
然而目前的硬件設備USB Key產品一方面價格昂貴(2000元至12800元不等),另外主要用於Windows操作系統。這裡筆者介紹如何在Linux環境下通過軟硬結合的方法自己制作USB Key。本文以Red Hat Enterprise Linux 3.0為例,使用具有雙啟動型功能的USB閃盤(容量8兆以上就可)建立基於Linux的USB Key。
Linux下的USB Key的工作原理是通過USB閃盤和pam_usb軟件共同構建的。pam_usb是一個開放源代碼軟件項目。首先讀者需要對PAM有所了解, PAM全稱是Pluggable Authentication Module (嵌入式認證模塊)。它最初由Sun公司開發,很快被Linux社區接受,並且開發了更多的模塊。其目標是提供一套可用於驗證用戶身份的函數庫,從而將認證從應用程序開發中獨立出來。Linux-PAM處理四種獨立的(管理)工作。它們是:認證管理、賬號管理、會話期間管理和密碼管理。可插入的認證模塊用於實現應用程序的認證機制,使程序員或管理員不需要重新編寫或編譯程序就可以改變認證機制。
PAM模塊詳述
可以將PAM認為是這樣的工具:它將應用程序從認證的重任中釋放出來,包括可以讓某個應用程序使用多個認證機制。下面的代碼是一個標准的PAM應用於rlogin(遠程登錄)的代碼:
auth required /lib/security/pam_securetty.so
auth sufficient /lib/security/pam_rhosts_auth.so
auth required /lib/security/pam_stack.so service=system-auth
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_stack.so service=system-auth
passWord required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_stack.so service=system-auth
每一行包括以下內容:module-type(模塊類型)、control-flag(控制字)、module-path(模塊路徑)、module-args(模塊參數)。對於以上四個選項,這裡我們主要介紹module-type(模塊類型)和control-flag(控制字),見表1、表2。在Redhat Linux中模塊路徑存儲在lib/security目錄下。
建立pam_usb應用
建立pam_usb應用