S/Key
S/Key
身份認證,是任何網路安全方案的一個基礎。如在大部分情況下,需要認證的實體是通信的發送者,即需要確定訪問者的合法性問題。
在特定的情況下,還需要對接收者進行認證,即要被訪問者的真實性問題。在安全性級別比較高的時候,往往需要進行雙向認證。同時,還要考慮只認證終端設備即可,還是需要在認證終端設備的時候,同時去認證用戶的合法性問題。這些都牽涉到身份驗證方案。
現在可行的身份驗證方案有很多。如基於安全口令的身份驗證或者基於數字證書的身份驗證等等。不過有些方案要麼過於簡單,存在比較多的漏洞。如雖然很多人喜歡利用口令來作為用戶認證或者設備證明,但是如果口令設置很簡單,或者不經常更改的話,甚至以明文形式在網路上傳輸,則很容易被人破解。另外一些解決方案就是過濾複雜,實施成本比較高。如基於數字證書的身份驗證,則實施起來有一定的難度。
筆者現在在企業中部署的是一種物美價廉的身份驗證解決方案。其也許不是一種最安全的身份驗證方法,但是它是一種性價比比較高的解決方法。它就是S/Key一次性口令系統。
S/Key一次性口令系統是一個基於MD4 和MD5的一次性口令生成方案。他可以對訪問者的身份與設備進行綜合驗證。S/Key協議的操作時基於客戶端/伺服器端模式。客戶端可以是任何設備,如普通的PC或者是有移動商務功能的手機。而伺服器一般都是運行Unix系統。
筆者之所以向大家推薦這個解決方案,主要有兩個方面的原因。一是這個身份認證解決方案,可以有效解決重放攻擊。重放攻擊是指攻擊者通過某種方式在網路連接中獲取他人的登陸賬戶與口令,然後利用它多某個網路資源的訪問許可權。而現在S/Key協議分配給訪問者的口令每次都不同,所以,就可以有效解決口令泄漏問題。因此,可以避免重放攻擊。
其次,現在有不少基於這個解決方案的免費工具,也非常的實用。所以,有一定基礎的安全管理人員,可以非常方便的掌握這個解決方案。如此的話,這個S/Key解決方案對於企業來說,可能是免費的。或者只需要添加一些硬體方面的投資即可。
一、三步實現S/Key身份認證。
其實從理論上說,S/Key身份認證很容易實現,只要通過三個步驟就可以輕易實現。
第一步:連接請求人在客戶端上,往往就是用戶自己的主機,輸入賬戶名。若利用S/Key的專業術語,這個用戶名又叫做通行短語。當用戶打開這個客戶端,S/Key伺服器也同時傳送過來一個種子。這個種子往往是以明文的形式傳輸。
第二步:客戶端會多次應用安全哈希函數,產生一個64位的安全性口令。通常情況下,客戶端會進行多達98次的哈希函數運算,以提高口令的安全性,增加其破譯難度。哈希是一種加密校驗和或消息完整性代碼 (MIC) ,每一方都必須通過計算才能驗證消息。例如,發送計算機使用哈希函數和共享密鑰計算消息的校驗和,並在數據包中將其包含進來。接收計算機必須對接收的消息和共享密鑰執行同樣的哈希函數,並將其與原始消息(包含在發送方的數據包中)加以比較。如果消息已經在傳輸過程中更改,哈希值會不同,將拒收數據包。所以,哈希運算本身就是一種安全的口令計算方法。若通過98次的運算而得出的口令,可以說,其安全程度是非常高的。
第三步:輸出函數會把這個64位的一次性口令以明文的形式顯示給用戶。然後用戶在登陸界面中輸入這個一次性口令。登陸程序就會把這個口令傳遞給登陸伺服器,伺服器就會對此進行驗證。若一致的話,用戶則就可以進行正常的訪問。否則的話,伺服器就會拒絕用戶登陸。不過讓用戶手工輸入64位的密碼可能會比較吃力。所以,有些S/Key工具,提供了直接複製粘貼的功能,避免了用戶手工輸入的麻煩。
二、缺陷:需要手工進行初始化。
一般在S/KEY伺服器上有一個文件,它存儲著每個用戶上一次成功登陸的一次性口令。伺服器端在進行驗證的時候,會把接收到的一次性口令輸入到安全哈希函數中進行運算。如果運算出來的結果跟上一次的一次性口令一致的話,認證就成功了。然後伺服器就會把這個一次性口令存入到這個表中,等待下一次驗證。
但是,當用戶每進行一次登陸,則客戶端執行哈希函數應用程序的個數就會減少一個。也就是說,在客戶端上生成的一次性口令是有限的,而不是無限制的。S/Key就是通過這種方式保證口令的唯一性。可是,這也會造成用戶的困擾,如當一次性口令用完時,就需要用戶對S/Key服務進行初始化,以避免用戶不能夠重複登陸的情況。
當在客戶端計算一次性口令時,客戶端通行短語可以是任意長度,不過為了安全起見,我們建議最好長度超過8個字元。這些內容都可以在初始化的時候進行設置。若要把設備認人證與身份認證結合,則可以把設備的一個序列好,如MAC地質等當作通行短語。如此的話,就只有在特定的設備上才能夠登陸企業的某個網路應用。
三、建議:根據企業的安全需求選擇不同的商業化產品。
以上只是S/Key 的基本解決方案。若採用免費產品的話,基本上只能夠實現如上的一些基本功能。企業若在安全方面還有比較高的要求,則可以購買一些商業化的產品,來強化S/Key一次性口令在企業中的使用價值。
如有時候管理員會覺得每次要輸入一次性口令會比較麻煩,而且也不想通過複製粘貼的方式。則企業就可以購買一些商業的軟體,他們可以實現自動登陸。也就是說,會自動把這個哈希函數計算所得的長達64位的一次性口令輸入登陸框中,以減少用戶輸入的工作量。這在實際應用中,是很受歡迎的一個功能。
另外,根據使用頻率的不同,每次都需要手工的對客戶端進行初始化,也是一件很讓人懊惱的事情。在一些商業的S/Key解決方案中,也實現了客戶端的自動初始化功能。如可以每隔一個月或者半年,讓系統自動進行初始化。這個頻率就要企業根據自己的使用情況來確定。當然,也可以讓系統在一次性密碼用完之後自動初始化。