隨著信息技術(shù)及相關(guān)應(yīng)用的不斷普及,用戶每天需要登錄不同的信息系統(tǒng),如WEB服務(wù)器、郵件服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器及各種應(yīng)用服務(wù)器等。
傳統(tǒng)的認(rèn)證機(jī)制采用基于用戶名/密碼的分散管理,即用戶通過(guò)網(wǎng)絡(luò)世界的身份標(biāo)識(shí)來(lái)訪問(wèn)各種資源,不同系統(tǒng)生成的身份標(biāo)識(shí)無(wú)法相互傳遞,導(dǎo)致用戶必須通過(guò)每個(gè)系統(tǒng)單獨(dú)的用戶名和密碼進(jìn)行來(lái)認(rèn)證方能進(jìn)入系統(tǒng)。
傳統(tǒng)認(rèn)證機(jī)制存在兩方面安全隱患:一是基于用戶名/密碼的認(rèn)證方式安全強(qiáng)度不高;二是大量的用戶名/密碼給用戶帶來(lái)了額外的安全管理問(wèn)題。在傳統(tǒng)認(rèn)證機(jī)制逐漸無(wú)法滿足用戶需求后,新的更具安全性的認(rèn)證機(jī)制由此出現(xiàn)--單點(diǎn)登錄技術(shù)。該技術(shù)在網(wǎng)絡(luò)資源使用過(guò)程中更為高效、安全并且更加簡(jiǎn)便。
Kerberos是目前使用最廣泛的單點(diǎn)登錄協(xié)議之一,它利用集中式認(rèn)證取代分散認(rèn)證,通過(guò)減少用戶身份認(rèn)證次數(shù),減輕服務(wù)器負(fù)擔(dān);同時(shí)使用對(duì)稱密碼算法實(shí)現(xiàn)通過(guò)可信第三方的認(rèn)證服務(wù)。
Kerberos的運(yùn)行環(huán)境由密鑰分配中心(KDC)、應(yīng)用服務(wù)器和客戶端3個(gè)部分組成。
△ Kerberos運(yùn)行環(huán)境示意圖
· KDC是整個(gè)系統(tǒng)的核心部分,負(fù)責(zé)維護(hù)所有用戶的賬戶信息。
KDC提供認(rèn)證服務(wù)(AS)和會(huì)話授權(quán)服務(wù)(TGS)。認(rèn)證服務(wù)(AS)對(duì)用戶的身份進(jìn)行初始認(rèn)證,若認(rèn)證通過(guò)便給用戶發(fā)放授權(quán)票據(jù)(TGT);用戶使用該票據(jù)可訪問(wèn)會(huì)話授權(quán)服務(wù)(TGS),從而獲得訪問(wèn)應(yīng)用服務(wù)器時(shí)所需的服務(wù)票據(jù)(ST)。
· 應(yīng)用服務(wù)器接受用戶的服務(wù)訪問(wèn)請(qǐng)求,驗(yàn)證用戶身份,并向合法用戶提供所請(qǐng)求的服務(wù)。
· 客戶端在用戶登錄時(shí)發(fā)送各種請(qǐng)求信息,并接收從KDC返回的信息。
Kerberos基本認(rèn)證過(guò)程可以分為3個(gè)階段,分別由3組消息來(lái)完成。
第一階段 獲得票據(jù)許可票據(jù)
本階段,用戶登錄客戶端請(qǐng)求服務(wù),認(rèn)證服務(wù)器(AS)在數(shù)據(jù)庫(kù)中驗(yàn)證用戶的訪問(wèn)權(quán)限,生成票據(jù)許可票據(jù)和會(huì)話密鑰。
1、用戶從客戶端向AS發(fā)送包含用戶、服務(wù)器名和隨機(jī)數(shù)N的消息KRB_AS_REQ。2、AS驗(yàn)證C的身份和訪問(wèn)權(quán)限后,隨機(jī)生成一個(gè)加密密鑰作為下一階段客戶方與TGS通信的會(huì)話密鑰:生成一個(gè)包含客戶方、會(huì)話密鑰以及開(kāi)始和失效時(shí)間等信息的TGT,用TGS的密鑰進(jìn)行加密;AS將會(huì)話密鑰和N用客戶端的密鑰K加密,并與TGT一起構(gòu)成消息KRB_AS_REP,發(fā)送給客戶端??蛻舳送ㄟ^(guò)用戶口令變換出K,獲得會(huì)話密鑰和N,根據(jù)N驗(yàn)證該消息是新鮮的。
第二階段 獲得服務(wù)許可票據(jù)
本階段,客戶端將票據(jù)許可票據(jù)以及包含用戶名稱,網(wǎng)絡(luò)地址和時(shí)間的鑒別符發(fā)往票據(jù)授權(quán)服務(wù)器TGS,票據(jù)授權(quán)服務(wù)器TGS對(duì)票據(jù)和鑒別符進(jìn)行解密,驗(yàn)證請(qǐng)求,然后生成請(qǐng)求服務(wù)許可票據(jù)。
1、客戶端向TGS發(fā)送TGT、需要訪問(wèn)的服務(wù)器名、保證消息新鮮的N、以及用戶會(huì)話密鑰簽名的客戶端認(rèn)證信息,防止數(shù)據(jù)在傳輸過(guò)程中被篡改、每次客戶端要訪問(wèn)某服務(wù)時(shí),必須首先生成一個(gè)新的認(rèn)證信息(鑒別符),該信息包括客戶端名、主機(jī)地址、客戶端主機(jī)時(shí)間,并且最終使用會(huì)話密鑰加密。
2、TGS用會(huì)話密鑰驗(yàn)證TGT后,獲取服務(wù)器名,從數(shù)據(jù)庫(kù)獲得服務(wù)器密鑰KS,隨機(jī)生成客戶端與應(yīng)用之間的通信會(huì)話密鑰和服務(wù)許可票據(jù)。使用會(huì)話密鑰加密N和應(yīng)用會(huì)話密鑰與新產(chǎn)生的服務(wù)許可密鑰一起發(fā)送給客戶端。
第三階段 獲得服務(wù)
客戶端將服務(wù)許可票據(jù)和認(rèn)證信息發(fā)送給服務(wù)器,服務(wù)器驗(yàn)證票據(jù)和認(rèn)證信息中的相匹配,允許訪問(wèn)服務(wù)。如果需要雙向鑒別,服務(wù)器返回一個(gè)認(rèn)證信息。
1、客戶端向服務(wù)器發(fā)送認(rèn)證信息,并提交服務(wù)許可票據(jù)。
2、應(yīng)用通過(guò)加密獲得客戶端的時(shí)間表及,同時(shí)將這些信息用應(yīng)用會(huì)話密鑰加密后發(fā)送客戶端,客戶端保留最近接收到的時(shí)間標(biāo)記最大值,以防止重放攻擊。
Kerberos認(rèn)證系統(tǒng)雖然在網(wǎng)絡(luò)環(huán)境中有著廣泛應(yīng)用,但也存在局限性。
首先,協(xié)議中的認(rèn)證信息依賴于時(shí)間標(biāo)記來(lái)實(shí)現(xiàn)抗重放攻擊,這就要求使用該協(xié)議進(jìn)行認(rèn)證的計(jì)算機(jī)需要時(shí)間同步,而嚴(yán)格的時(shí)間同步需要有時(shí)間服務(wù)器,因此時(shí)間服務(wù)器的安全至關(guān)重要。
其次,協(xié)議認(rèn)證的基礎(chǔ)是通信方都無(wú)條件信任KDC,一旦其安全受到影響,將會(huì)威脅整個(gè)認(rèn)證系統(tǒng)的安全,同時(shí)容易形成系統(tǒng)性能的瓶頸。