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