沈 陽(yáng), 杜中軍
(四川大學(xué)計(jì)算機(jī)學(xué)院,四川成都610065)
目前,越來(lái)越多的軟件應(yīng)用正在從傳統(tǒng)的C/S結(jié)構(gòu)向B/S結(jié)構(gòu)轉(zhuǎn)變,一個(gè)組織中多個(gè)基于Web的業(yè)務(wù)應(yīng)用系統(tǒng)共存的情況十分普遍。這些系統(tǒng)往往是在不同的時(shí)期內(nèi),由不同的軟件開(kāi)發(fā)人員采取不同的技術(shù)開(kāi)發(fā)而來(lái)的。由于每個(gè)系統(tǒng)相互獨(dú)立,都有各自的用戶認(rèn)證方式,所以用戶登錄時(shí),不得不分別登錄各個(gè)所需使用的系統(tǒng),給用戶帶來(lái)極大不便。記住各個(gè)登錄密碼給用戶提出了挑戰(zhàn),另一方面,對(duì)于系統(tǒng)管理員來(lái)說(shuō),維護(hù)和管理用戶密碼也變得困難。基于效率和安全的因素,改變傳統(tǒng)的認(rèn)證方式,設(shè)計(jì)出一種更為高效、安全的網(wǎng)絡(luò)認(rèn)證機(jī)制顯得非常迫切,單點(diǎn)登錄的概念由此產(chǎn)生。單點(diǎn)登錄是一種可以登錄多個(gè)相互關(guān)聯(lián)但彼此獨(dú)立的軟件系統(tǒng)的一種方法,它只需用戶登錄其中的一個(gè)系統(tǒng)從而獲得其它所有系統(tǒng)的登錄許可而不用重復(fù)登錄各個(gè)系統(tǒng)[1]。目前廣泛使用的單點(diǎn)登錄主要有:Kerberos[2],CAS[3],基于SAML的單點(diǎn)登錄系統(tǒng)[4-6],微軟的.NET Passport[7]。
對(duì)于小型組織或單位,考慮到費(fèi)用以及他們對(duì)單點(diǎn)登錄的性能、安全性要求不高,可以采用基于一次性密碼的認(rèn)證機(jī)制[1]或基于代理的機(jī)制[8]來(lái)實(shí)現(xiàn)單點(diǎn)登錄技術(shù)。但對(duì)于大型企業(yè)或單位,對(duì)于性能、安全性要求較高的應(yīng)用系統(tǒng)而言,如電子商務(wù)、電子政務(wù)等系統(tǒng),這兩種實(shí)現(xiàn)機(jī)制顯得捉襟見(jiàn)肘。對(duì)于此類(lèi)的系統(tǒng)要求,公鑰基礎(chǔ)設(shè)施(publickeyinfrastructure,PKI)、Kerberos技術(shù)便應(yīng)運(yùn)而生。基于PKI認(rèn)證的單點(diǎn)登錄[3,9]采用著名的非對(duì)稱(chēng)加密算法,安全性是目前公認(rèn)為最高的,但它占用了大量的Server端計(jì)算資源,防御Dos、Ddos攻擊的能力差。傳統(tǒng)的基于Kerberos的單點(diǎn)登錄[10]系統(tǒng)采用對(duì)稱(chēng)加密算法,計(jì)算資源的消耗低,單位時(shí)間響應(yīng)認(rèn)證請(qǐng)求能力強(qiáng),但存在重放攻擊以及密文傳輸安全性問(wèn)題。PKI認(rèn)證技術(shù)中,公開(kāi)密鑰系統(tǒng)需要一個(gè)值得信賴而且獨(dú)立的第三方機(jī)構(gòu)充當(dāng)認(rèn)證中心(certification authority,CA),以確認(rèn)公鑰擁有者的真正身份,相對(duì)于Kerberos技術(shù)代價(jià)較高。本文設(shè)計(jì)了一種改進(jìn)的基于Kerberos的單點(diǎn)登錄系統(tǒng),它在密文傳輸安全性和抗重放攻擊方面都進(jìn)行了較大程度的改進(jìn),而且它便于推廣實(shí)施和應(yīng)用。
在設(shè)計(jì)單點(diǎn)登錄系統(tǒng)時(shí)會(huì)用到一些縮寫(xiě)詞、與密碼處理相關(guān)符號(hào)以及通信領(lǐng)域的概念,在本文中將他們定義如下[11]:
PS:Password,用戶密碼
TS:Time Stamp,時(shí)間戳
ID:User Identity,用戶名
C:Client,客戶方
S:resource Servers,資源服務(wù)器
KDC:Key Distribution Center,密鑰分發(fā)中心
AS:Authentication Server,認(rèn)證服務(wù)器
TGS:Ticket Granting Server,憑據(jù)分發(fā)服務(wù)器
H(M):使用SHA、MD5等單向散列算法對(duì)消息M進(jìn)行Hash處理
K(key){M}:使用密鑰key對(duì)消息M加密,采用DES、IDEA等對(duì)稱(chēng)密碼算法
Long-termKey:長(zhǎng)期保持不變(比如用戶密碼)以及由此派生出來(lái)的密鑰(比如H(PS))
在傳統(tǒng)設(shè)計(jì)中,主要有3個(gè)模塊:密鑰分發(fā)中心、資源服務(wù)器、客戶方,其中密鑰分發(fā)中心又由憑據(jù)分發(fā)服務(wù)器和認(rèn)證服務(wù)器組成。整個(gè)Kerberos認(rèn)證過(guò)程通過(guò)3個(gè)階段完成,分別為:AS Exchange、TGS Exchange和 C/S Exchange。這里我們假設(shè):①資源服務(wù)器完全信賴密鑰分發(fā)中心,②密鑰分發(fā)中心和資源服務(wù)器能識(shí)別并認(rèn)證每一個(gè)合法的用戶,③僅有一個(gè)密鑰分發(fā)中心和多個(gè)資源服務(wù)器。傳統(tǒng)的Kerberos單點(diǎn)登錄設(shè)計(jì)見(jiàn)圖1。
圖1 傳統(tǒng)Kerberos單點(diǎn)登錄流程
(1)C→ AS:K(H(PS)){TS||ID}||ID
(2)AS→C:K(H(PS)){SKDC-Client},K(K-KDC){SKDC-Client||ID||ET}
(3)C→TGS:K(SKDC-Client){ID||TS||Sname},K(K-KDC){SKDCClient||ID||ET}
(4)TGS→C:K(SKDC-Client){SServer-Client},K(K-Server){SServer-Client||ID||ET}
(5)C→S:K(SServer-Client){ID||TS},K(K-Server){SServer-Client||ID||ET}
(6)S→C:K(SServer-Client){Data}
AS Exchange由步驟1和步驟2組成。首先,用戶輸入自己的用戶名和密碼以登錄認(rèn)證服務(wù)器。時(shí)間戳和用戶名經(jīng)過(guò)用戶密碼的hash值H(PS)加密并與明文形式的用戶名一起發(fā)送到認(rèn)證服務(wù)器。然后,認(rèn)證服務(wù)器根據(jù)用戶名從數(shù)據(jù)庫(kù)獲取該用戶密碼的hash值,并用它對(duì)加密的文件包解密,如果得到的是一個(gè)合法的時(shí)間戳并且解密獲得的用戶名與明文傳送的用戶名相等,則認(rèn)證成功。密鑰分發(fā)中心產(chǎn)生一個(gè)它與用戶之間的會(huì)話密鑰,即SKDC-Client。認(rèn)證服務(wù)器將同時(shí)發(fā)送兩份加密包給客戶方,分別為用H(PS)加密的SKDC-Client和用密鑰分發(fā)中心自己的密鑰K-KDC加密的SKDC-Client、用戶名以及該包的到期時(shí)間,這個(gè)包稱(chēng)為T(mén)GT。
TGS Exchange由步驟3和步驟4組成??蛻舴绞盏缴弦浑A段的加密包后,使用H(PS)解密第一份加密包獲得SKDCClient。接著,客戶方用該會(huì)話密鑰加密用戶名、此時(shí)獲得的時(shí)間戳以及要訪問(wèn)的資源服務(wù)器名稱(chēng),該包稱(chēng)為Authenticator,并且將它與從認(rèn)證服務(wù)器獲得的TGT一并發(fā)送給憑據(jù)分發(fā)服務(wù)器。憑據(jù)分發(fā)服務(wù)器獲得加密包后先用K-KDC解密TGT獲得會(huì)話密鑰SKDC-Client,然后用該會(huì)話密鑰解密Authenticator,如果是一個(gè)合法的時(shí)間戳并且得到的兩個(gè)用戶名相同則通過(guò)驗(yàn)證。密鑰分發(fā)中心產(chǎn)生一個(gè)客戶方和資源服務(wù)器之間的會(huì)話密鑰,即SServer-Client。憑據(jù)分發(fā)服務(wù)器同時(shí)發(fā)送兩份加密包給客戶方,分別為用SKDC-Client加密的SServer-Client和用資源服務(wù)器自己的密鑰加密的SServer-Client、用戶名和該包到期時(shí)間,這個(gè)包稱(chēng)為ST。
C/S Exchange由步驟5和步驟6組成??蛻舴绞盏缴弦浑A段的加密包后,使用SKDC-Client解密第一份加密包獲得SServer-Client。然后,使用SServer-Client加密用戶名和當(dāng)前獲得的時(shí)間戳,該包也稱(chēng)為Authenticator,并且和上一階段獲得的ST一起發(fā)送給資源服務(wù)器。資源服務(wù)器獲得加密包后,首先使用自己的密鑰對(duì) ST進(jìn)行解密獲得 SServer-Client。接下來(lái),使用SServer-Client對(duì)Authenticator解密,如果獲得的是一個(gè)合法的時(shí)間戳并且解密獲得的兩個(gè)用戶名相同,則該用戶獲得資源服務(wù)器的訪問(wèn)許可,就可以使用會(huì)話密鑰 SServer-Client進(jìn)行彼此間的通信。
在整個(gè)過(guò)程中,ST是基于某個(gè)具體的資源服務(wù)器的,而TGT則是和具體的資源服務(wù)器無(wú)關(guān),客戶方可以使用一個(gè)TGT從密鑰分發(fā)中心獲得基于不同資源服務(wù)器的ST,從而實(shí)現(xiàn)單點(diǎn)登錄。具體來(lái)說(shuō)就是,在步驟3中,客戶方一旦獲得TGT后,在該TGT的存活期內(nèi),就可以根據(jù)訪問(wèn)需要任意反復(fù)地指定資源服務(wù)器名稱(chēng),加密后隨TGT一并發(fā)送給憑據(jù)分發(fā)服務(wù)器,驗(yàn)證通過(guò)后獲得該資源服務(wù)器的ST,從而得到該資源的訪問(wèn)許可。
為了防止重放攻擊,在步驟1、步驟3和步驟5中使用了時(shí)間戳。用戶只需登錄一次,就可以根據(jù)需要訪問(wèn)多個(gè)資源服務(wù)器,因?yàn)槊總€(gè)用戶只有一個(gè)密碼,從而避免了用戶記住多個(gè)密碼的麻煩。整個(gè)系統(tǒng)中只有一個(gè)用戶認(rèn)證信息的數(shù)據(jù)庫(kù),極大方便了管理員對(duì)用戶密碼的管理。使用對(duì)稱(chēng)加密算法對(duì)網(wǎng)絡(luò)中傳送的數(shù)據(jù)進(jìn)行加密,性能明顯優(yōu)于使用非對(duì)稱(chēng)加密算法的PKI認(rèn)證。
盡管如此,在一個(gè)開(kāi)放的網(wǎng)絡(luò)環(huán)境中,該系統(tǒng)仍然存在如下一些安全隱患:
(1)在網(wǎng)絡(luò)安全領(lǐng)域中有這樣的原則:被Long-termKey加密的數(shù)據(jù)最好不要該在網(wǎng)絡(luò)上傳輸。在步驟4和步驟5中,使用了資源服務(wù)器的密鑰對(duì)數(shù)據(jù)進(jìn)行加密傳送,降低了資源服務(wù)器的安全系數(shù)。
(2)雖然時(shí)間戳在一定程度上可以防止重放攻擊,但在Kerberos中一般將它設(shè)置為5分鐘,這樣就留給攻擊者時(shí)間,遺留下進(jìn)行重放攻擊的隱患。
(3)資源服務(wù)器和客戶方并未進(jìn)行雙向認(rèn)證。資源服務(wù)器對(duì)客戶方進(jìn)行了驗(yàn)證,但客戶方并未對(duì)資源服務(wù)器進(jìn)行驗(yàn)證,存在服務(wù)器欺騙的可能。
考慮到傳統(tǒng)Kerberos單點(diǎn)登錄的以上問(wèn)題,本文提出了一種改進(jìn)的單點(diǎn)登錄設(shè)計(jì)方案,本設(shè)計(jì)中添加了客戶方向資源服務(wù)器申請(qǐng)密鑰分發(fā)中心與資源服務(wù)器之間的會(huì)話密鑰的階段,這里把它稱(chēng)為SKDC-ServerRequest。假設(shè)密鑰分發(fā)中心只負(fù)責(zé)產(chǎn)生它與資源服務(wù)器之間的會(huì)話密鑰但并不保存它,并且每個(gè)資源服務(wù)器與密鑰分發(fā)中心之間的會(huì)話密鑰都不一樣,其它條件和傳統(tǒng)Kerberos的假設(shè)條件相同。改進(jìn)的單點(diǎn)登錄設(shè)計(jì)見(jiàn)圖2。
圖2 改進(jìn)單點(diǎn)登錄流程
(1)C→AS:K(H(PS)){TS||ID}||ID
(2)AS→C:K(H(PS)){SKDC-Client},K(K-KDC){SKDC-Client||ID||ET}
(3)C→S:ID||Sname
(4)S→C:K(K-KDC){SKDC-Server||ID||Sname||ET}
(5)C→TGS:K(SKDC-Client){ID||TS||Sname||H(MAC)},K(K-KDC){SKDC-Client||ID||ET},K(K-KDC){SKDC-Server||ID||Sname||ET}
(6)TGS→C:K(SKDC-Client){SServer-Client},K(SKDC-Server){SServer-Client||ID||ET}
(7)C→S:K(SServer-Client){ID||TS||Flag||H(MAC)},K(SKDC-Server){SServer-Client||ID||ET}
(8)S→C:K(SServer-Client){TS}
ASExchange由步驟1和步驟2組成??蛻舴酵ㄟ^(guò)此過(guò)程獲得屬于自己的TGT,通過(guò)此憑據(jù),客戶方可以向密鑰分發(fā)中心申請(qǐng)用于訪問(wèn)某個(gè)資源服務(wù)器的ST。該階段與傳統(tǒng)Kerberos單點(diǎn)登錄的AS Exchange過(guò)程相同。
SKDC-Server Request由步驟3和步驟4組成??蛻舴綄⒆约旱?ID和所要訪問(wèn)資源服務(wù)器的名稱(chēng)以明文的形式發(fā)送給該資源服務(wù)器,以申請(qǐng)?jiān)撡Y源服務(wù)器已從密鑰分發(fā)中心獲得的它與密鑰分發(fā)中心之間的會(huì)話密鑰。資源服務(wù)器收到申請(qǐng)后,如果在它的緩存中存在這個(gè)會(huì)話密鑰,則將之加密發(fā)送給客戶方。反之,如果緩存中沒(méi)有該會(huì)話密鑰,則資源服務(wù)器通過(guò)向RS認(rèn)證服務(wù)器RSAS發(fā)送申請(qǐng),申請(qǐng)內(nèi)容為該用戶的用戶名和資源服務(wù)器名稱(chēng),這個(gè)過(guò)程非常類(lèi)似于客戶方向密鑰分發(fā)中心申請(qǐng)它們之間的會(huì)話密鑰,見(jiàn)圖2中的虛線部分。RSAS收到資源服務(wù)器的申請(qǐng)后,密鑰分發(fā)中心將產(chǎn)生一個(gè)它與資源服務(wù)器之間的會(huì)話密鑰SKDC-Server,然后用自己的密鑰將SKDC-Server、用戶名、資源服務(wù)器名稱(chēng)和該包的到期時(shí)間加密發(fā)送給資源服務(wù)器,該包記為SKTGT。資源服務(wù)器收到該加密包后,將之存入緩存以待申請(qǐng)。
TGS Exchange由步驟5和步驟6組成??蛻舴绞盏?AS Exchange階段的加密包后,使用H(PS)解密第一份加密包獲得SKDC-Client。接著,客戶方用該會(huì)話密鑰加密用戶名、此時(shí)獲得的時(shí)間戳、要訪問(wèn)的資源服務(wù)器名稱(chēng)和自己MAC地址的hash值,該包稱(chēng)為Authenticator,并且將它與從認(rèn)證服務(wù)器獲得的TGT、從資源服務(wù)器獲得的SKTGT一并發(fā)送給憑據(jù)分發(fā)服務(wù)器。憑據(jù)分發(fā)服務(wù)器獲得加密包后先用K-KDC解密TGT獲得會(huì)話密鑰SKDC-Client,然后用SKDC-Client解密Authenticator,如果是一個(gè)合法的時(shí)間戳、解密得到的H(MAC)與從IP包中提出的MAC地址的hash值相等并且得到的兩個(gè)用戶名相同則通過(guò)驗(yàn)證。之后,密鑰分發(fā)中心再用自己的密鑰對(duì)SKTGT解密,獲得密鑰分發(fā)中心與資源服務(wù)器的會(huì)話密鑰SKDC-Server。密鑰分發(fā)中心產(chǎn)生一個(gè)客戶方和資源服務(wù)器之間的會(huì)話密鑰,即SServer-Client。憑據(jù)分發(fā)服務(wù)器同時(shí)發(fā)送兩份加密包給客戶方,分別為用SKDC-Client加密的SServer-Client和用SServer-Client加密的SServer-Client、用戶名以及該包到期時(shí)間,這個(gè)包稱(chēng)為ST。
C/S Exchange由步驟7和步驟8組成??蛻舴绞盏缴弦浑A段的加密包后,使用SKDC-Client解密第一份加密包獲得SServer-Client。然后,使用該會(huì)話密鑰加密用戶名、當(dāng)前獲得的時(shí)間戳、用于雙向驗(yàn)證的Flag標(biāo)記和客戶端硬件地址的hash值,該包也稱(chēng)為Authenticator,并且和從上一階段獲得的ST一起發(fā)送給資源服務(wù)器。資源服務(wù)器獲得加密包后,首先使用SKDC-Server對(duì)ST進(jìn)行解密獲得SServer-Client。接下來(lái),使用該SServer-Client對(duì)Authenticator解密,如果獲得的是一個(gè)合法的時(shí)間戳、解密得到的H(MAC)與從IP包中提出的MAC地址的hash值相等并且獲得的兩個(gè)用戶名相同,則該用戶獲得資源服務(wù)器的訪問(wèn)許可。資源服務(wù)器將解密獲得的時(shí)間戳提取出來(lái),并使用SServer-Client會(huì)話密鑰加密發(fā)送給客戶方。當(dāng)客戶方接收到該包并使用SServer-Client解密之后,如果確認(rèn)時(shí)間戳和原來(lái)的完全一致,那么它可以認(rèn)定該資源服務(wù)器正是它要訪問(wèn)的資源服務(wù)器。接著就可以使用會(huì)話密鑰SServer-Client進(jìn)行彼此間的通信。
本設(shè)計(jì)在繼承了傳統(tǒng)Kerberos單點(diǎn)登錄的所有優(yōu)點(diǎn)的基礎(chǔ)上,在極大程度上降低了傳統(tǒng)Kerberos單點(diǎn)登錄存在的安全隱患:
(1)KDC與資源服務(wù)器之間的數(shù)據(jù)加密不再使用資源服務(wù)器自己的密鑰,而是使用它們之間的會(huì)話密鑰,給惡意攻擊者帶來(lái)極大攻擊難度。
(2)不再單一使用時(shí)間戳來(lái)避免重放攻擊,而是配合MAC地址的驗(yàn)證來(lái)實(shí)現(xiàn)雙重保障,讓重放攻擊幾乎難以實(shí)現(xiàn)。
(3)通過(guò)設(shè)置標(biāo)記位實(shí)現(xiàn)客戶端與資源服務(wù)器端的雙向驗(yàn)證,使得客戶端也可以對(duì)資源服務(wù)器進(jìn)行驗(yàn)證,只有驗(yàn)證通過(guò)后才可以正式發(fā)起會(huì)話。
為了進(jìn)一步驗(yàn)證本設(shè)計(jì)方案的有效性,我使用Java語(yǔ)言開(kāi)發(fā)了軟件系統(tǒng)的原型。由于系統(tǒng)需在開(kāi)放的網(wǎng)絡(luò)環(huán)境中進(jìn)行實(shí)驗(yàn),但實(shí)驗(yàn)室環(huán)境無(wú)法完全真實(shí)地開(kāi)放在一個(gè)網(wǎng)絡(luò)環(huán)境中,所以,我在實(shí)驗(yàn)室內(nèi)部搭建了一個(gè)局域網(wǎng),以達(dá)到模擬開(kāi)放網(wǎng)絡(luò)的實(shí)驗(yàn)環(huán)境。實(shí)驗(yàn)中使用sniffer抓包工具對(duì)網(wǎng)絡(luò)中傳輸?shù)募用馨M(jìn)行捕獲,并實(shí)施重放攻擊,通過(guò)實(shí)驗(yàn)對(duì)兩種單點(diǎn)登錄系統(tǒng)進(jìn)行了比較,得出表1的比較結(jié)果。
表1 兩種單點(diǎn)登錄的實(shí)驗(yàn)結(jié)果定性比較
改進(jìn)的單點(diǎn)登錄較傳統(tǒng)的Kerberos單點(diǎn)登錄系統(tǒng)不僅在系統(tǒng)安全性,抗重放攻擊方面有了很大程度的提高,而且實(shí)現(xiàn)了客戶端與資源服務(wù)器端的雙向驗(yàn)證,并且便于推廣和應(yīng)用。但相比與基于PKI的單點(diǎn)登錄系統(tǒng)仍然存在一些有待解決的問(wèn)題。首先,能否將兩種單點(diǎn)登錄的優(yōu)勢(shì)結(jié)合起來(lái),實(shí)現(xiàn)一種更為安全和高效的單點(diǎn)登錄系統(tǒng)。其次,本系統(tǒng)中多處使用了會(huì)話密鑰,但會(huì)話密鑰存在生命期。如果太長(zhǎng),攻擊者將會(huì)有足夠的時(shí)間進(jìn)行攻擊;太短,客戶端不得不頻繁地進(jìn)行重新認(rèn)證。所以,在未來(lái)的工作中,這兩方面的問(wèn)題將是繼續(xù)研究的工作。
[1]Tiwari P B,Joshi S R.Single sign-on with one time password[C].IEEE First Asian Himalayas International Conference on Internet,2009:1-4.
[2]丁立新,趙曦濱,顧明.基于Kerberos的Web單點(diǎn)登錄研究[J].計(jì)算機(jī)工程與應(yīng)用,2005,41(14):124-126.
[3]Song peng,Yu jinshan.CAS single sign-on technology for integration of enterprise's application system[J].Journal of Huaqiao University(Natural Science),2009,30(3):351-353.
[4]Takaaki Komura,Yasuhiro Nagai,Shoichi Hashimoto,et al.Proposal of delegation using electronic certificates on single sign-on system with SAML-protocol[J].Ninth Annual International Symposium on Applications and the Internet,2009:235-238.
[5]陳科,佘堃,黃迪明.基于安全斷言標(biāo)記語(yǔ)言輔件技術(shù)的單點(diǎn)登錄系統(tǒng)分析[J].計(jì)算機(jī)應(yīng)用,2005,25(11):2574-2576.
[6]Wu kaixing,Yu xiaolin.A model of unite-authentication single sign-on based on SAML underlying Web[C].Second International Conference on Information and Computing Science,2009:211-213.
[7]http://www.passport.com[OL].
[8]Sahana K Bhosale.Architecture of a single sign on(SSO)for internet banking[C].IET International Conference on Wireless,Mobile and Multimedia Networks,2008:103-105.
[9]Zhao Gang,Zheng Dong,Chen Kefei.Design of single sign-on[C].Proceedingof the IEEEInternationalConference on E-Commerce Technology for Dynamic E-Business,2004:253-256.
[10]邱航,權(quán)勇.基于Kerberos的單點(diǎn)登錄系統(tǒng)研究與設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用,2003,23(7):142-144.
[11]季旻,林中.單點(diǎn)登錄方案的研究與設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(12):2862-2864.