◆周 凱 魏 寧
(南京藝術學院信息化建設管理中心 江蘇 210013)
目前在很多分布式協(xié)作業(yè)務系統(tǒng)群中實行的統(tǒng)一身份認證,可以有效實現(xiàn)對用戶的統(tǒng)一認證和管理。這種形式不僅提高了用戶的使用體驗,而且還在一定程度上加強了信息的安全性。但它對用戶身份驗證只局限于用戶登錄層面,即用戶客戶端與登錄服務器之間的驗證,當用戶驗證通過后,將斷開與登錄服務器之間的關系,開始和業(yè)務邏輯服務器進行數(shù)據(jù)的交互。從而缺失了業(yè)務會話過程中用戶客戶端與登錄服務器、各業(yè)務邏輯服務器之間的驗證關系,當具有這層驗證關系后,它將建立起三者之間的相互關聯(lián)性,從而達到更高的安全防御效果,有效地防范如:嗅探密碼、中間人攻擊、重放攻擊等安全問題。
本文將從用戶登錄和業(yè)務會話兩個時間維度來研究身份驗證過程中的安全性問題,并給出一種整體身份驗證方式的實例。這種身份認證方式本質上與數(shù)據(jù)包加密沒有直接聯(lián)系,但有些加密(公共/私有密鑰)會提供類似的功能。
登錄驗證:確定用戶登錄的憑證與主機數(shù)據(jù)庫中的信息是否一致。主要方式有用戶名/密碼認證、手機/驗證碼認證、三方平臺驗證等。
(1)密碼安全:用戶登錄密碼的安全是第一位的。對系統(tǒng)登錄的密碼一定要遵循以下安全原則,即避免出現(xiàn)弱密碼。密碼口令位數(shù)要高于8位;字母、數(shù)字、大小寫結合;避免使用有規(guī)則性的組合密碼等;盡可能降低被破解的可能性。
(2)密碼存儲安全:密碼存儲介質是存放所有認證信息數(shù)據(jù)的容器,它的安全是重中之重。一旦出現(xiàn)設備故障或受到攻擊,被黑客以明文方式讀取到用戶密碼,那就是災難性的。防御主要包括兩個方面:一是網(wǎng)絡信息安全;二是硬件設備安全。前者需要建立一套完整系統(tǒng)的網(wǎng)絡安全防御體系,以避免存儲服務器介質被黑客攻擊。后者的安全問題可以采用雙機熱備方式、數(shù)據(jù)備份容災機制來完善。
(3)嗅探:主要是沒有使用安全套接協(xié)議層或密碼加密協(xié)議,而被黑客通過一種包嗅取器獲得明文密碼;或通過一些社會工程學原理將一些惡意木馬程序安裝到用戶客戶機上,從而嗅探記錄用戶的鍵盤輸入信息獲取到用戶名密碼。
(4)多次登錄:不允許同一賬號同時在多個相同終端上登錄系統(tǒng),這不僅會給系統(tǒng)數(shù)據(jù)同步帶來更高的要求,而且無法確認用戶客戶端來源,不利于安全。
(1)哈希驗證
客戶端接收到服務器發(fā)送來的一個隨機數(shù)(challenge)并與輸入密碼計算出一個哈希值,而后將值返回給服務器,服務器會將客戶端提交的哈希值與服務器之前的哈希值(隨機數(shù)與存儲的密碼)進行校驗,若匹配即校驗通過。它的優(yōu)勢在于:密碼沒有直接被傳送,通過嗅探無法拿到密碼;隨機數(shù)在每次登錄請求的時候都不一樣,校驗時相當于“本次值”與“上次值”的校驗;服務器端的明文密碼是被交互的兩端秘密共享的,可以用來加密客戶端所有發(fā)送/接受的數(shù)據(jù)。但需要注意的是密鑰的加密算法不能被輕易破解;其次明文密碼的哈希值作為交互的密鑰不要與驗證使用同一個哈希,不然就喪失了“不可嗅探”的共享密鑰的優(yōu)勢。
(2)秘密交換驗證
客戶端提交文本式密碼,由服務器計算出這個文本密碼的哈希值后再與服務器存儲的密碼哈希值進行匹配,而確定信息是否正確。這種方式的優(yōu)點在于文本式密碼進入服務器后被哈希,當服務器受到攻擊,攻擊者不會通過哈希值而得到密碼。缺點在于每次向業(yè)務系統(tǒng)發(fā)送登錄請求時用戶名/密碼都會被傳遞,若攻擊者嗅探,易被竊取到相關信息;因為客戶端發(fā)送到服務器的是明文密碼,所以服務器會暫時存有明文密碼,若攻擊者能夠讀到服務器相關進程的內存,那也會被竊取到相關信息。
(3)公共/私有密鑰
公共/私有密鑰的加密系統(tǒng),如安全套接層(SSL)技術,通過加密信息和提供鑒權,保護業(yè)務系統(tǒng)安全。SSL證書具有一個用于加密的公共密鑰和一個用于解密的私有密鑰。它可以同步確認客戶端與服務器,并創(chuàng)建一種加密方式和一個會話密鑰。從而建立一個具有隱私性和完整性的安全會話[1]。也可采用一些加密算法如RSA來發(fā)布密鑰。
業(yè)務會話驗證:確認一個網(wǎng)絡數(shù)據(jù)包是否由已聲明認證的用戶發(fā)送。
用戶成功登錄與業(yè)務服務器進行通訊后,業(yè)務服務器計算出帶有客戶端ID、會話過期時間和一個服務器專用加密符號的哈希值。這個哈希值再與客戶端ID、會話過期時間組成一個標簽發(fā)送給客戶端。而后客戶端將數(shù)據(jù)頭部加上標簽發(fā)送給服務器,業(yè)務服務器收到數(shù)據(jù)后取出標簽里的信息(哈希值、客戶端ID、會話過期時間),并使用服務器內部專用加密符號重新計算哈希值,并與標簽中哈希值進行匹配。若匹配,即可確認數(shù)據(jù)包來源為合法用戶,反之則為過期用戶。
另一種方式可以采用客戶端與服務器共享密碼形式,這個共享密碼可以是文本密碼也可以是由一個密碼加一個隨機數(shù)的哈希值??蛻舳税l(fā)送給服務器的數(shù)據(jù)包將包含三部分:1、客戶端ID;2、由共享密碼(密鑰)加密過的數(shù)據(jù)包;3、未加密數(shù)據(jù)的校驗和。服務器收到數(shù)據(jù)包后,從內部表中查找到用戶的共享密碼解密這個消息,并檢查校驗和。如果校驗和不匹配,那么這個數(shù)據(jù)包就不是由正確的客戶端發(fā)送而來。
服務器查看接收數(shù)據(jù)包的源IP地址/端口號,并與服務器內部維護的所屬用戶的地址/端口表,進行校驗。若相同,則確認數(shù)據(jù)包來源為合法用戶。這種認證方式首先要保證網(wǎng)絡中不會接收到欺騙地址包,如果有欺騙地址包的存在,導致用戶認證異常,可以使用一種特定懷疑命令的直接回包形式進行確認[2]。也可以從一個隨機初始位置進行循環(huán)序列索引。
在一個分布式協(xié)作服務器群中,實行身份驗證如下所述。
分布式協(xié)作服務器群共享一個群密碼(challenge);客戶端通過未加密的TCP連接登錄服務器;服務器向客戶端發(fā)送一個challenge值,客戶端計算出該值和密碼的哈希值,發(fā)送給服務器;登錄服務器計算出本機儲存的密碼與challenge的哈希值,并與客戶端發(fā)送來的進行校驗,若匹配驗證通過。
然后登錄服務器向客戶端發(fā)送一個驗證授權(用戶ID、授權過期時間,以及這兩者與群密碼的哈希值)。它還會生成一個在此會話期間客戶端使用的隨機密鑰(用戶密碼和salt哈希生成的密鑰),發(fā)送給客戶端,并記錄用戶的密鑰和授權過期時間。
客戶端連接到協(xié)作服務器群中任意一臺服務器,并通過先前獲得的驗證授權啟動與新服務器連接。新服務器驗證授權是否到期,以及哈希是否正確。并使用授權中的用戶ID,從登錄服務器檢索客戶端的加密密鑰。此時,新服務器和客戶端還會協(xié)商出將來用于通信的序列號。
一旦驗證通過,新服務器和客戶端就會交換使用會話密鑰加密的數(shù)據(jù),其中加密數(shù)據(jù)包括正確數(shù)據(jù)的散列(作為校驗和)和一個序列號。并且每一個數(shù)據(jù)包都包含客戶端ID和授權標識符作為包頭。
客戶端當前連接到的服務器會周期性的檢查會話驗證授權是否即將過期;如果是,它將向登錄服務器請求一個新的授權并發(fā)送給客戶端。
身份驗證是確認用戶身份的過程,即用戶客戶端與一臺或一組服務器主機相互通訊交互的確認。本文通過分析闡述登錄時、業(yè)務會話時兩階段的多種驗證方式,建立了一套系統(tǒng)的身份驗證體系。這種身份驗證體系可以完善分布式協(xié)作服務器群中各服務器之間的通信安全,有效防御嗅探、中間人攻擊、重放攻擊等。